Ivan Nilsson, 2012-04-30 Java introduktionslab (version 2.2) Syfte: Grundläggande om handgrepp och Javaelement, som kan vara användbart i Inlämning 2. 1. Utvecklingsverktyget Netbeans - installation. Varför Netbeans? • Rätt så enkelt att använda (om du använder något annat, förväntas du veta hur du hantera det). • Finns installerat i labbsalarna. • För den som önskar köra Netbeans på sid egen dator finns gratis nedladdning på http://netbeans.org/downloads/index.html (även guider och tekniskt information finns där). Den enklaste versionen av produkten rekommenderas: Javaversionen överst i kolumnen medföljer och installeras också, om den inte redan finns installerad på datorn (i detta fall Java SE). Under installationen: Kryssa i att du vill ha Junit (används för testning: även om vi inte kommer att använda det nu kan det vara lika bra att installera det). Programmets installationsmappar: Den automatiska installation kan ta upp till fyra minuter. Netbeans är därefter klart att användas. 2. Första gången du kör Netbeans. Instroduktionssidan visas med länkar till tips och demonstrationer. I menyn Tools finns många olika inställningar, som du kan göra för att anpassa Netbeans till dina behov. Vi går inte in på det. 2 3. Skapa projektet Temperatur. Vi ska skapa en applikation i Java som låter en termometer göra temperaturmätningar vid olika tidpunkter och lagra data om dem i sitt minne. En extern aktör kan sedan begära att - dessa data ska skrivas ut till Netbeans konsolfönster så att man kan se vilka värdena är. - medeltemperaturen ska räknas ut och skrivas ut. - få hela listan med mätvärden (för att senare exempelvis lagra i en databas). IAD:erna för detta: (systemstarten) 3 4 Design Class Diagram: 5 Då börjar vi skapa detta i Javakod i verktyget Netbeans. Menyn File > New project eller klicka på ikonen för nytt projekt: Välj projektets kategori och typen av projekt inom den kategorin. Vi accepterar standardförslaget och kommer inte att göra någon annan typ av Java-appliktion än denna. Ge projektet ett namn och ange var Netbeans ska lagra filerna, som du skapar (standardmappen är C:\Documents and Settings\admin\Mina dokument\NetBeansProjects): Klicka Finish. 6 Nu öppnas en flik där programkoden visas: Strukturen uppe till vänster med projektetet Temperatur, finns på hårddisken som mappar: Kommentar: Om du vill kopiera in Javakod från någon annanstans, klistar du in den inne i mappen src. Koden behöver inte placeras i en mapp (såsom mappen temperatur för det paketet), men det är bäst att lägga den i ett existerande paket eller skapa en ny paketmapp och kopiera koden dit. 7 4. Klassen Mätning. Skapa en Javafil för klassen: - Menyn File > New file eller klicka på ikonen New file uppe till vänster. - Category: Java. File types: Java class. - Next. - Class Name: Mätning. - Finish. Skriv in Javakoden som visas I kodfönstret nedan. Medan du skriver, gör Netbeans då och då varningar för fel. Bry dig inte om dem till en början. Avsluta varje instruktion med ett semikolon. Efter det försvinner troligen de flesta varningarna, eftersom du nu är klar med instruktionen. Det är aningen irriterande, att Netbeans varnar innan man har fått en chans att fullborda. Metoden public Mätning har samma namn som klassen och är därmed en konstruktor. Den exekveras, när ett Mätning-objekt skapas. Konstruktorn kräver, att det skickas med två värden: ett temperaturvärden av datatypen float och en tidpunkt av objekttypen Date. De lagras i variablerna temperatur respektive tidpunkt, vilka är deklarerade som privata (ingen annan än detta objekt kan komma åt dem). De röda utropstecknen och röda understrykningarna = Ett allvarligt fel som gör att programkoden inte kan exekveras. Placera markören på någon av felmarkeringarna. Det visas ett meddelande om felet: 8 För att se om Netbeans erbjuder sig att automatiskt rätta till felet: ALT-ENTER när markören är på utropstecknet eller dubbelklicka på utropstecknet. Resultat: Här gäller det att veta vilken av åtgärderna som är den rätta. I detta fall den översta. För att kunna använda Javas klass Date måste vi tala om att den ska importeras. Klicka på detta alternativ. En rad lades till uppe i koden och alla felmarkeringarna försvann: Alltså: • • Netbeans hjälper dig gärna genom att flagga för var felen finns och ge förslag på hur de skulle kunna avhjälpas automatiskt. Försök rätta det första felet först. Ofta är de andra bara följdfel, som försvinner så fort det första har rättats. 9 5. Skapa en klass som testar att Mätning fungerar som den ska. Skapa en fil för en klass som heter Mätning_test. Category: Java. File types: Java Main class (vi vill kunna exekvera den direkt med kommandot Run I menyn). En fil med skellettkod skapas: Det finns kommentarer i koden: En kommentar inleds med två snedstreck //. Det som står i en kommentar exekveras inte. Jag har ändrat färgen på texten i kommentarer till röd så att den framhävs i denna guide (menyn Tools > Options > Fonts & colors). Antalet tecken som varje tabulatorsteg utgör: Standard är fyra. För att ändra: Tools > Options > Formatting. Sätt både Number of spaces per indent och Tab Size till exempelvis 2. 10 Ta bort kommentarerna och skriv in nedanstående kod (kommentarerna behöver inte tas med): När du skrev punkten efter objektet m, visade Netbeans en lista med olika saker som får lov att följa efter punkten. Där ska exempelvis finnas metoderna i klassen Mätning (om inte finns ett fel någonstans som behöver rättas till). 11 Exekvera nu denna fil: Menyn Run > Run File eller tangentkombinationen SKIFT-F6. (Om du gör enbart Run eller F6 kommer huvudutprojektet att exekveras, dvs i detta fall filen Temperatur.java som för närvarande inte kommer att göra något av intresse.) Resultat: Det stämmer, och alltså verkar objektet Mätning vara mkorrekt skrivet. Vad som händer när man har beordrat en exekvering: 1. Netbeans exkverar metoden main i den aktuella klassen. Metoden måste vara skriven som i ovanstående kod, dvs med public static o.s.v. Deklarerar variabeln temp till att vara av datatypen float (decimaltal). Deklarerar variabeln d att vara ett objekt av klassen Date (en av Javas egna klasser). Deklarerar variabeln m som ett obejkt av klass Mätning. (d och m kallas även för objektvariabler.) Deklarera = Innan något kan användas måste man ha talat om att det finns och vad de tär för något. Float är en av de grundläggande datatyperna (s.k. primitiver). Samtliga åtta primitiver: - Heltal: byte, short, int, long. - Decimaltal: float, double. - boolean (har ett av värdena true och false). - char (ett tecken, vilket som helst). Obs, alla primitiver måste skrivas med liten begynnelsebokstav. Detaljer om primitiverna: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 2. Värdet 12.45 tilldelas temp. Inom parentes framför står float. Det gör att 12.45 tvingas att bli av datatypen float (kallas typkonvertering). Orsaken är, att Java sätter 12.45 till datatypen double, om man inte uttryckligen skriver att det ska vara float. Java tillåter inte att 12.45 som double tilldelas till temp som är float. Du får det röda felutropstecknet om du försöker. Prova gärna och se om Netbeans hjälper dig med att rätta till problemet. Liknelse: Se temp som en ask som har en etikett där man har skrivit temp. På en lapp skrivs 12.45. Lappen läggs sedan i asken. Tilldelar d en ny instans (=objekt) av klassen Date: new Date(). När detta objekt skapas exekveras dess konstruktor, som läser av systemtiden och lagrar den i variabel. Konstruktor är en metod med samma namn som klassen och som alltid exekveras när ett obejkt skapas. 3. Skapa ett nytt objekt av klassen Mätning. Variablerna temp och d skickas med: Mätning(temp, d). Inuti i objektet m sker: Konstruktorn utförs. Den medskickade variabel temp tilldelas variabeln temperatur och d tilldelas tidpunkt. 12 4. Hämta värdena för temperaturen och datumet för att kontrollera att Mätning-objektet m har de korrekta värdena. 5. Skriv ut dem i Netbeans konsolfönster. Formellt är println en metod (eng: method). Det finns ett stycke programkod någonstans i Java som har namnet println och som tar det som man gav den och skriver ut det i konsolen (det går att styra vart det skickas). Detta "någonstans" är inne i ett objekt som heter System (måste vara stort S) och har en output-stream som heter out, som har metoden println och andra metoder som hanterar utskrift. Det som du ändrar på från fall till fall är vad som står inne i parentesen. Automatiskt radbyte: Du kan utläsa println som Print Line, dvs skriv en rad. När raden har skrivits ut, påbörjas nästa utsktiftskommando på raden under. Det skedde i detta exempel. Inget radbyte: Istället för println skriver du print, där summa ska skrivas ut. Nästa utskrift kommer då direkt efter det sista tecknet, som skrevs ut. Plustecken här = Sammanfoga det som står på båda sidorna om plustecknet. 13 5. Det är ett Termometer-objekt som sköta allt som rör Mätning. Klassen Termometer har givits samma namn som själva termometern. Ett objekt som representerar apparaten, som interagerar med sin omgivning, brukar vara en lämplig kontrollant (jfr kursboken zom har Register som kontrollant, vilken representerar den verkliga kassaapparaten). När ett Termometer-objekt skapas, ska det enligt IAD direkt skapa en lista där ett antal Mätning-objekt kan lagras. Här görs det som en vanlig array i Java. Om klassen Termometer inte redan är skapad, gör det nu. Skriv sedan in dessa instruktioner: Mer information om arrayer: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html. Liknelse: För varje temperaturmätning skapas ett Mätning-objekt som läggs i en ask med etiketten Mätning1, Mätning2 osv. Askarna klistras ihop till en sammanhängande stack, och på den skrivs etiketten mätningar. För att komma åt en ask för att stoppa i ett Mätning-obejkt eller hämta ut ett måste man tala om dess ordningsnummer (kallas för index). Askarna är numrerade med start från noll: 0, 1, 2 o.s.v. Antalet askar i stacken är fixerat – i detta fall 9. Det är också nödvändigt att hålla reda på hur många askar som man har stoppat Mätning-objekt i. Vi fyller dem med början i asken 0 o.s.v. Variabeln antalMätningar får hålla reda på detta. 14 6. Metoden görMätning. Variabler temperatur och tidpunkt ges här värden. Egentligen ska de komma från en sensor som gör själva mätningen. Vi går inte in på det här utan antar att värdena redan har kommit från sensorn. Observera, att antaletMätningar har ett värde som är 1 högre än indexet i arrayen, där värdet ska lagars. Det beror på att det första elementet i arrayen har index = 0. IF-satsen nederst: Kontrollera om index är mindre än eller lika med 8, dvs det maximalt tillåtna indexet i arrayen. Om så är fallet, stoppa in objektet m i arrayen mätningar i den "ask" som har samma nummer som värdet på variabeln index. I annat fall försöker man stoppa in m i en ask som inte finns. Visa ett felmeddelande. Nu behövs en metod för att få Termometern att visa alla sina mätningar. 15 6. visaMätningarna. En snurra (loop) används för att stega igenom alla elementen i arrayen mätningar. Variabeln i håller reda på vilket index, som snurran för närvarande är på. Kontrollstrukturen while: En av flera strukturer för att kontrollera/styra programflödet. Detaljerad informaion om dem: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html. Först kontrollerar while att i är mindre än antalet mätning. Om så är fallet, utförs instruktionerna som står inom { }. I annat fall avbryts while och programexekveringen fortsätter på den första raden efter dess slut (den avslutande } ). Objektet på det aktuella indexet (värdet på i) hämtas: mätningar[i]. Dess metod getTemp() hämtar värdet på temperaturen, vilket tilldelas variabeln temp. Skriv ut värdet. Räkna upp värdet på i. Här används det komprimerade skrivsättet i++ för detta. 16 7. Objektet Temperatur startar och styr allt. Klassen Temperatur är startklassen för projektet (bestämdes när projektet skapades). I kursboken heter klassen Main.används benämningen)). Objekter temperatur skapas direkt när man exekverar projektet (kommandot Run i Netbeans). Det skapar sedan det initiala domänobjektet (i kursboken initial domain object) med namnet term av klassen Termometer. Det initiala domänobjektet term skapar sedan alla andra objekt, som behöver skapas vid systemstarten (jfr Store i kursboken) – detta fallet endast mätningar som är en array. Sedan ber temperatur Termometer-objektet term att göra tre mätningar. Slutligen ber temperatur term att visa mätningarna. Exekvera på ett av dessa sätt: - Run-ikonen (stor grön pil överst). - F6. - Menyn Run main project. Resultat: 17 8. Medelvärdet. En metod I Termometer som räknar ut medelvärdet av de gjorda märningarna. For-loopen. Denna snurra utför ett iI förväg bestämt antal varv, som man talar om för snurran. (While vet inte i förväg hur många det är och är därför bäst när man inte vet hur många varv som det kommer att bli.) Hämta temperaturvärdet från det aktuella Mätning-objektet i arrayen. Addera det med det hittillsvarande varadet på summa. Resultatet blir det nya värdet på summa. När en variabel används på detta sätt är det en god idé att alltid nollställa den innan loop. I annat fall kan värdet från en föregående körning av snurran ligga kvar och därmed bli det nya startvärdet nästa gång snurran körs (vanlig felorsak). Klassen Temperatur ska anropa metoden: 18 Exekvera projektet. Resultat: 19 9. Temperatur returnerar arrayen med alla mätningarna till den som begär det. Det kan finnas behov av att arkivera alla mätvärden för att senare göra analys av dem. Det enklaste kan vara att Termomenter skickar hela arrayen mätningar till den som villa ha mätvärdena. Vi skickar bara med de element som har ett Mätning-objekt. En metod för detta ändamål: Arrayen m deklareras så att den kan innehålla exakt så många element som det finns Mätning-objekt i mätningar. Kopiera objekten från mätningar till m och returnera m-arrayen till objektet, som anropade metoden. Temperatur-objektet begär att få alla mätningarna. Färdigt! 20 Extra övningar i mån av tid De sista övningen är nog litet knepigare än de övriga. 1. Se till att få olika temperaturvärden vid de olika mätningarna. Exempelvis: Öka värdet på temperaturvariabeln med värdet på antalMätningar. Temperaturerna blir då 12.45, 13.45 och 14.45. Additionen är i sig meningslös, men vi är bara ute feter att få olika temperaturvärden. 2. Använd en loop i Temperatur för att göra mätningarna. Använd en variabel för att styra hur många varv som loopen gör. När allt fungerar, testa vad som händer om loopen gör fler varv än vad det finns element i arrayen mätningar. 3. Ett slumpmässigt temperturvärde. Denna metod returnerar en slumpmässig temperatur i intervallet -10.0 t.o.m. +20.0 grader. Använd i stället denna metod för att få ett temperaturvärde på denna plats i Termometer: temperatur = 12.45f; 4. Använd en ArrayList istället för en array till mätningar. 5. Det finns många termometrar utplacerade. En person åker runt med en handdator och läser in mätvärderna från termometrarna och tar bort alla lagrade mätningar från termometern. Det ska gå att skriva ut mätvärderna från termometrarna och räkna ut medelvärdet från samtliga termometrars mätningar. Skapa det eller de objekt, som behövs för att hantera detta. Och det hela måste förstås fungera. 21
© Copyright 2025 Paperzz