TUTORIAL: SAMLING & KONSOLL

Relevanta dokument
TUTORIAL: KLASSER & OBJEKT

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Att använda pekare i. C-kod

Programmering B med Visual C

Objektorientering: Lagring, räckvidd och livstid

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Objektsamlingar i Java

Objektorientering: Lagring och livstid

Slutrapport Get it going contracts

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

TDDD78 Objektorientering: Lagring och livstid

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Planering Programmering grundkurs HI1024 HT TIDAA

Laboration 3, uppgift En klass för en räknare

OOP Objekt-orienterad programmering

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Objektorienterad programmering Föreläsning 2

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Projektuppgift - Biblioteket

JAVA Mer om klasser och objektorientering

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Planering Programmering grundkurs HI1024 HT 2014

HI1024 Programmering, grundkurs TEN

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

HI1024 Programmering, grundkurs TEN

Planering Programmering grundkurs HI1024 HT data

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Kopiering av objekt i Java

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Statistik över heltal

Design av en klass BankAccount som representerar ett bankkonto

Laboration 1 Introduktion till Visual Basic 6.0

Tentamen TEN1 HI

Föreläsning 6: Introduktion av listor

Projektuppgift - Gymmet

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

HI1024 Programmering, grundkurs TEN

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

C++ Slumptalsfunktioner + switch-satsen

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Spelprogrammering med XNA och MonoGame

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Projektuppgift - Banken

Laboration 1 - Grunderna för OOP i Java

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

DAT043 - föreläsning 8

trafiksimulering Intro OU5 trafiksimulering

HI1024 Programmering, grundkurs TEN

Tentamen OOP

Objektorienterad programmering D2

Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Frekvenstabell över tärningskast med C#

Diagnostiskt Prov. Antaganden Om förutsättningar saknas I en uppgift skall rimliga antaganden göras och nedtecknas.

Variabler och konstanter

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

Inledande programmering med C# (1DV402) Introduktion till C#

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

Föreläsning 3-4 Innehåll

Tentamen i Grundläggande Programvaruutveckling, TDA548

L04.1 Marodören. Inledning. Mål. Genomförande. Uppgift 1 Hello World. Moment I

Tentamen i Programmering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Objektorienterad programmering i Java

Övningsuppgift. En array baklänges. Steg 1. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Objektorienterad programmering i Java I

Föreläsning 5: Introduktion av pekare

Övningsuppgifter till föreläsning 2 Variabler och uttryck

Övningsuppgift. Repeterbara citat. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Tentamen i Grundläggande programmering STS, åk 1 fredag

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

*Pekarvärden *Pekarvariabler & *

Arrayer. results

Code-Lite tutorial ( /RoJ)

Så här byter du från Unifaun WebOrder (UWO) till Unifaun OnlineConnect (UOCT)

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Labora&on 2 Funk&oner, if och loop övningar/uppgi:er

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Tentamen, EDAA10 Programmering i Java

Transkript:

TUTORIAL: SAMLING & KONSOLL Denna tutorial är en fortsättning på den tutorial där vi skapade klassen Car och sedan objekt av denna klass. Vi skall nu lära oss att lagra dessa objekt i en samling och även skapa en fungerande grafisk applikation. Detta är en praktisk övning, det teoretiska delarna behöver du gå igenom först för att till fullo ta till dig denna övning. INNEHÅLLSFÖRTECKNING 1 Introduktion... 1 1.1 Att tänka på... 1 2 Skapa projekt... 1 3 Deklarera ArrayList som medlemsvariabel... 2 4 Skapa menyn... 2 5 Skapa applikationens huvudloop... 3 6 Programmets metoder... 4 6.1 addcar()... 4 6.2 Ändra meny()... 5 6.3 printlist()... 7 6.3.1 Tips: Läs in bilar vid programstart... 9 6.4 removecar()... 9 6.5 emptylist()... 11 7 JavaDoc... 12 8 Hela applikationens kod... 14 8.1 Car.java... 14 8.2 CarDemoConsole.java... 17 9 Vidareutveckling... 21

Thoren Innovation School Programmering 1 Sid 1 1 INTRODUKTION I en tidigare tutorial skapade vi klassen Car och på det sättet lärt oss att jobba med objekt. Nu skall vi arbeta vidare med klassen Car och se till att vi kan lagra, lista och ta bort bilar (Car-objekt) från en samling. Har du inte gjort den tidigare tutorialen så behöver du iaf gå igenom klassen Car, den koden ligger i slutet av den första tutorialen, för att kunna följa med här. Själva programmet och den kod som styr applikationen kommer vi till stor del att skriva om. Vi skall bygga en applikation där vi kan lagra objekt av typen Car i en ArrayList. Vi kommer göra applikationen menybaserad, se bilden nedan, och alla menyalternativ kommer ligga i egna metoder. Vår målsättning är att skriva en snygg applikation som är lätt att arbeta med och som lätt kan återanvändas till andra projekt. 1.1 ATT TÄNKA PÅ Denna tutorial arbetar med samlingstypen ArrayList, det finns flera likheter med andra samlingar och stora delar av denna kod skulle vara identisk eller liknande om man valde att använda samlingarna, Stack, PriorityQueue eller någon annan. Varje samlingstyp har sina för och nackdelar och det finns flera bra metoder som inte används i denna övning. Tanken är att göra uppgiften generell så att du som användare i första hand lär sig principerna, det går alltid att skriva bättre och/eller annan kod och ibland kan det vara att föredra andra lösningar. 1. Vi skapar ett nytt projekt och döper det till CarDemoConsole, låt rutan Create Main Class vara ikryssad. 2 SKAPA PROJEKT 2. Dra in Car.java (Car.java är en klass som vi skapat vid ett tidigare tillfälle, hela koden för den ligger annars i den tidigare tutorialen) till projektet. Se till att välja Refactoring för att paketnamn och annat viktigt skall förändras.

Thoren Innovation School Programmering 1 Sid 2 3 DEKLARERA ARRAYLIST SOM MEDLEMSVARIABEL Det första vi gör är att skapa vår lista, carlist av typen ArrayList. Glöm inte att importera paketet java.util.arraylist, eller svara ja på frågan om NetBeans skall importera det automatiskt åt dig. Nu har vi en lista carlist av samlingstypen ArrayList som kommer lagra objekt av typen Car. 4 SKAPA MENYN Det första vi skall göra är att skapa vår meny, utifrån menyn skall vi sedan styra användaren till olika metoder, beroende på vad hen vill göra i vår applikation. Vi låter hela applikationen vara metodstyrd, vilket innebär att varje litet delprogram är en egen metod. Detta gör programmet enklare att följa, då varje metod inte blir så stor, det gör det också enklare att låta flera utvecklare vara med och bygga ett program. I klassen CarDemoConsole skriver vi följande metod. Titta också på hur jag väljer att kommentera alla metoder, jag använder mig av JavaDoc vilket gör att jag sedan kan generera en dokumentation på alla klasser i applikationen. Detta är lite överkurs i denna kurs, men eftersom koden ändå skall kommenteras kan man göra det på riktigt. För att få lite gratis så kan du gå ut i marginalen på samma rad som en metod, eller klassdeklaration och klicka på glödlampan och sedan välja Create missing JavaDoc for XXXX så kommer NetBeans skapa ramen för

Thoren Innovation School Programmering 1 Sid 3 JavaDoc för den specifika metoden/klassen och skriva ut eventuella inparametrar och returvärde så att du enkelt kan skriva en text kring detta. 5 SKAPA APPLIKATIONENS HUVUDLOOP I klassen CarDemoConsole skriver vi nu loopen som är själva huvudprogrammet. Denna kod borde inte innehålla några konstigheter. På rad 5-8 görs en presentation av hela klassen och på rad 10-13 dokumenteras mainmetoden, bägge dessa görs med JavaDoc. På rad 20 anropas metoden meny() som ritar ut menyn och returnerar ett char-värde som lagras i menyval och som det sedan görs en switch-selektion på för att välja vilket av de mindre delprogrammen som skall köras. Loopen kommer att köras så länge användaren inte matar in 0. Om du har dokumenterat enligt JavaDoc kan du nu testa att generera en dokumentation av klassen enligt JavaDoc. Skapa din JavaDoc via Netbeans i menyn Run -> Generate JavDoc och då kommer hela projektet att genereras i JavaDoc. Denna ser precis ut som dokumentationen i Javas egen API.

Thoren Innovation School Programmering 1 Sid 4 6 PROGRAMMETS METODER Nu är det dags att titta på de metoder som användaren anropar via menyn för att arbeta med applikationen, i mina kommentarer kommer jag fokusera på de delar som rör vår lista, övrig kod bör inte vara någon nyhet. I denna applikation så har vi inte skapat listan som en global variabel, på ett sätt hade detta varit enklare, då hade vi inte behövt skicka in listan som inparameter 1 till alla våra metoder och sedan returnera listan när vi är klara med metoden. Anledningen till att jag har valt att inte göra listan global är dels för att slippa blanda variabler som är static och variabler som inte är static, dels för att om man börjar skapa globala variabler så blir det lätt att man fortsätter med det och då slutar det ofta med att det finns en hel mängd variabler som lagras som globala trots att det inte finns någon som helst anledning till detta. Kanske återkommer jag i slutet av denna tutorial till hur man skulle kunna göra om listan vore global, kanske inte. Alla metoder skall skrivas i CarDemoConsole.java. Tänk så här, det som tillhör programmet skrivs i programmets fil, det som är specifikt för objektet, i detta fall Car, skrivs i klassen Car. 6.1 ADDCAR() Vad händer i denna metoden? I metoddeklarationen (på rad 68) anger vi att det som returneras från metoden är en ArrayList som lagrar objekt av typen Car. Vi anger också att det skall skickas in en lista av samma typ och den variabeln döper vi till carlist. 1 Det är egentligen inte listan som skickas in i en metod utan referenspekaren som pekar på listan.

Thoren Innovation School Programmering 1 Sid 5 I metoden deklareras först de variabler som vi behöver, sedan frågar vi användaren om data för bilen som sedan skapas. Detta har vi gjort tidigare så det är inget nytt. Det nya är att använda metoden add() till listan som helt enkelt lägger till objektet sist i listan. Slutligen returnerar vi listan och då måste vi se till att vi tar emot den när vi anropar metoden. Den koden ser ut så här; Bra. Nu kan vi lägga till en bil till en lista men vi kan fortfarande inte se att det finns några bilar lagrade i vårt system. Vi provar att modifiera menyn så att det står hur många bilar det finns i systemet. Vi börjar med att ändra i metoden meny(), 6.2 ÄNDRA MENY() På rad 43 lägger vi in en inparameter till metoden som inte tidigare fanns, glöm inte att ändra i JavaDoc-dokumentationen på rad 40. Skriv in det manuellt eller välja att gå ut till vänsterkanten för rad 43 och välj Add @param CarList tag för att sedan skriva in texten. På rad 52 skriver vi ut antalet bilar i listan.

Thoren Innovation School Programmering 1 Sid 6 I huvudloopen måste vi nu lägga till carlist som inparameter till menyanropet meny(). När det är gjort kan du kompilera och köra applikationen. Nu bör det fungera. Härligt!

Thoren Innovation School Programmering 1 Sid 7 6.3 PRINTLIST() Nu skall vi skapa metoden för att skriva ut en lista med bilar. Vi har bara en medlemsmetod, i klassen Car, som skriver ut information om en bil. Vi testar att använda denna för att se hur det skulle se ut att använda denna. Anropet från huvudprogrammet skriver vi så här; Utskriften blir då; Nej, så kan det inte se ut. Vi måste skapa en annan medlemsmetod i klassen Car för att skriva ut listan.

Thoren Innovation School Programmering 1 Sid 8 Vi gör det enkelt för oss, vi kopierar hela metoden tostring() i Car.java och sedan modifierar vi den metoden. Jag döper den först till tostringlist() och så här skriver jag metoden, du får gärna skriva den annorlunda. Vi ser också att vi inte har någon JavaDoc i Car.java, nu kan det vara läge att skapa den så att bägge våra klasser är lika fint dokumenterade. Min metod tostringlist() i klassen Car blev nu så här. Det gick att använda get-metoderna för alla medlemsvariabler förutom för forsale, här stod jag i valet och kvalet att göra en get-metod till som används bara för att kunna skapa listan eller att lägga lite logik och formatering direkt i metoden tostringlist. Om jag misstänker att jag vid något annat tillfälle kommer behöva använda JA/NEJ som info om att en bil är till salu bör jag göra en andra get-metod för att hämta detta värde, denna gång lät jag bli. Då skriver jag också om printlist-metoden i CarDemoConsole så att listan skrivs ut snyggt. Här blir det en del formatering, jag har också lagt till en räknare som visar positionen för varje bil i listan. På utskriften ser vi att det är uppenbar risk att ett långt namn på en modell eller ett bilmärke saboterar vår lista. Det kan vi lägga ner väldigt mycket tid för att jobba fram olika lösningar beroende på vad som händer. Men just nu är vi nöjda med detta resultat.

Thoren Innovation School Programmering 1 Sid 9 6.3.1 TIPS: LÄS IN BILAR VID PROGRAMSTART Eftersom vi testar en hel del har jag skapat en metod som skapar tre bilar vid uppstarten av applikationen, använd den om du vill. Metod och anrop ser ut så här; 6.4 REMOVECAR() Dags att ge användaren möjlighet att ta bort en bil ur listan. Metoden skall ligga i CarDemoConsole.java Här återanvänder vi en metod som vi skapade tidigare, det är den som skriver ut listan av bilar. Vi ger användaren chansen att ange 0 för att slippa ta bort en bil, denna kontroll görs på rad 126. Tänk på att numreringen i listans utskrift är 1, 2, 3 osv medan index i listan carlist är 0, 1, 2 osv, därför måste vi på rad 127 ta bort objekt med index-1. Ingen felhantering finns i detta läge, om användaren matar in ett felaktigt värde, inte heltal, eller ett index som ligger utanför de index som är representerade i listan så kommer applikationen att krascha. Hur du som utvecklare skyddar dig mot detta kommer vi kika på senare i kursen.

Thoren Innovation School Programmering 1 Sid 10 Innan vi kan testa om vår metod fungerar måste vi göra ett anrop ifrån vårt huvudprogram, det anropet ser du på rad 30. Så, nu kan vi testa. Då borde resultatet bli detta.

Thoren Innovation School Programmering 1 Sid 11 Dags att skriva metoden för att tömma listan; 6.5 EMPTYLIST() Anropet från huvudprogrammet blir då; Resultatet blir; Enkelt! Vissa andra samlingar har ingen metod för att ta bort alla på en gång, då tvingas vi loopa igenom listan och ta bort ett objekt i taget, men det behöver vi inte fundera på nu.

Thoren Innovation School Programmering 1 Sid 12 7 JAVADOC Om vi nu har varit duktiga med att jobba med JavaDoc så är det dags att generera denna kod och kika på den. En sammanfattning vilka klasser som finns i vårt projekt. Alla metoder som finns i klassen Car, enkelt för någon utvecklare att ta över vår klass och implementera den i ett eget arbete.

Thoren Innovation School Programmering 1 Sid 13 Här är metoderna i klassen CarDemoConsole, här ser vi att en metod, addcarsatstart() är okommenterad och det är helt ok. Det var ju en metod vi använde för att testa vår applikation, den skall tas bort innan vår applikation går i skarpt läge. Vi kan kolla närmare på våra metoder och se vad de gör, vilka inparametrar de kräver och vad som returneras från metoderna. Genom denna dokumentation så vet en utvecklare vad en metod gör, vad som förväntas skickas in i metoden och vad som returneras som resultat från en metod. Det innebär att utvecklaren inte behöver veta vad som händer inne i metoden utan informationen från JavaDoc räcker för att kunna använda de klasser och metoder som någon annan har utvecklat.

Thoren Innovation School Programmering 1 Sid 14 8 HELA APPLIKATIONENS KOD 8.1 CAR.JAVA

Thoren Innovation School Programmering 1 Sid 15

Thoren Innovation School Programmering 1 Sid 16

Thoren Innovation School Programmering 1 Sid 17 8.2 CARDEMOCONSOLE.JAVA Här blir det ganska mycket luft på vissa sidor men det beror på att jag inte vill sidbryta inne i metoderna, det är bättre att hålla ihop en metod vid utskrift. Tänk också på att inte skapa för stora metoder av just denna anledning. Grundtanken är att en metod skall göra en sak och då bör den gå att skriva ut på en A4-sida, blir metoden större går den oftast att dela upp i mindre delar, särskilt om metoden visar sig göra mer än en sak.

Thoren Innovation School Programmering 1 Sid 18

Thoren Innovation School Programmering 1 Sid 19

Thoren Innovation School Programmering 1 Sid 20

Thoren Innovation School Programmering 1 Sid 21 Hur kan man vidareutveckla denna applikation? 9 VIDAREUTVECKLING ü Skapa en global variabel för att enklare kunna jobba med listan? För och nackdelar med detta? ü Ge användaren möjlighet att upprepa ett visst delprogram, alltså utan att hoppa tillbaka till det stora huvudprogrammet få möjlighet att lägga till flera bilar, ta bort flera bilar osv. ü Det finns ingen kontroll för validerat data, det borde läggas dit för att skapa en bra applikation. En applikation som kraschar är aldrig trevlig för användaren. ü Vi skulle kunna skapa någon form av metod som ger bättre information om vad som är gjort, t.ex. En bil är tillagd/borttagen, Listan är tömd, antingen i direkt anslutning till menyn eller i ett läge där användaren får info och sedan godkänner med enter innan menyn skrivs ut och applikationen fortsätter. ü Avsluta applikationen på ett trevligt sätt. ü Sista steget för att få en riktig applikation är att kunna spara bilarna som skapats i en fil så att listan kan läsas in nästa gång applikationen öppnas. Detta ligger dock utanför ramen för denna kurs.