Laboration 1 - Grunderna för OOP i Java



Relevanta dokument
UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

OOP Objekt-orienterad programmering

JAVA Mer om klasser och objektorientering

Tentamen i Grundläggande programmering STS, åk 1 lördag

TENTAMEN OOP

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

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

Malmö högskola 2008/2009 CTS

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

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

TENTAMEN OOP

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

TENTAMEN OOP

Tentamen OOP

DAT043 - Föreläsning 7

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Java, klasser, objekt (Skansholm: Kapitel 2)

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.

Lösningsförslag övning 2.

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

OOP Objekt-orienterad programmering

Klasshierarkier - repetition

Klasser och objekt. Henrik Johansson. August 20, 2008

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Programmering för språkteknologer II, HT2011. Rum

Grundläggande programmering med C# 7,5 högskolepoäng

Objektorienterad programmering i Java

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

Malmö högskola 2007/2008 Teknik och samhälle

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Kopiering av objekt i Java

Föreläsning 5-6 Innehåll

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

LÖSNINGSFÖRSLAG TENTAMEN

Imperativ programmering. Föreläsning 4

Lab5 för prgmedcl04 Grafik

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

OOP Omtenta

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

OOP Omtenta

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

DD1342 Programkonstruktion för F1,

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

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

OOP Objekt-orienterad programmering

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

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

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Objektorienterad Programmering (TDDC77)

Laboration A Objektsamlingar

Malmö högskola 2007/2008 Teknik och samhälle

Enkla variabler kontra referensvariabel

Mer om klasser och objekt

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Föreläsning 13 Innehåll

TDDC77 Objektorienterad Programmering

Objekt och referenser

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

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

Objektorienterad Programmering DAT043

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Programmering för språkteknologer II, HT2014. Rum

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

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

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

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Transkript:

Uppdaterad: 2006-08-31 Laboration 1 - Grunderna för OOP i Java Inledning Laborationen går ut på att lära sig grunderna för objektorienterad programmering, samt motsvarande språkkonstruktioner i Java. Labben görs i grupper om två personer. De olika oop-begrepp och programkonstruktioner som behövs i labben kommer att gås igenom på de första föreläsningarna. Laborationen består av olika steg där du får öva på bl.a följande begrepp inom OOP: Klasser och instanser Meddelandesändning Polymorfism Arv Instansvariabler och klassvariabler (static-variabler) Metoder och klassmetoder (static-metoder) Inkapsling och "information hiding" (skydda implementationen) Skyddsnivåerna private, protected, public Relationer mellan objekt (arv, association och aggregat) Efter varje steg finns ett antal frågor att gå igenom. Det är smart att skriva ner svar på dessa frågor så kan du går tillbaka till dessa inför slutexaminationen. Under labben kommer du att modifiera och bygga på klasserna i programmet på olika sätt. Om du vill spara koden du skriver i de tidigare stegen kan du kommentera bort den gamla koden eller spara undan kopior på filerna. Steg 1 - polymorfism Skapa klasser med metoder enligt följande: Djur presenteradig() - ska skriva ut texten: "Morr. Jag är ett djur." Katt (ärver Djur) presenteradig() - ska skriva ut texten: "Mjau. Jag är en katt som heter " Hund (ärver Djur) presenteradig() - ska skriva ut texten: "Vov. Jag är en hund som heter " Lägg varje klass i en egen fil. Använd följande klass för att testa dina klasser: public class Lab1Steg1 public static void main(string[] args) Djur[] alladjur; int i; alladjur = new Djur[3]; alladjur[0] = new Katt("Kurre"); alladjur[1] = new Hund("Vilma"); alladjur[2] = new Katt("Bamse");

i = 0; while (i < alladjur.length) alladjur[i].presenteradig(); i = i + 1; Lägg även denna klass i en egen fil, som alltså ska heta Lab1Steg1.java OBS att du måste bestämma dig för var namnet på djuren ska sparas. Bäst är att lägga instansvariabeln för namnet i Djur (Katt och Hund ärver då denna). Du måste göra konstruktorer för klasserna Katt, Hund och Djur som tar en sträng för namnet på ett djur som argument. Använd super för att anropa konstruktorn i Djur från Katt och Hund. Frågor: Vad blir det för utskrift när man kör ovanstående kod? Vad menas med polymorfism? Hur fungerar polymorfismen i ovanstående program? Metoden presenteradig i Djur verkar ju aldrig anropas? Varför inte? Kommentera bort metoden presenteraddig i Hund. Vad händer nu när du kör programmet? Var sparas namnet för instanserna av Katt och Hund? (I vilken/vilka klasser har du lagt instansvariabeln som refererar till namnet på djuret? I både Katt och Hund, eller bara i Djur?) Rita ett klassdiagram på ett papper för klasserna Djur, Katt och Hund. Tag med alla instansvariabler och metoder i diagrammet. Hur fungerar koden i testprogrammet? Hur fungerar en array? Hur fungerar while? Kan du skriva om while-loopen som en for-loop? Steg 2 - instansvariabler och klassvariabler Lägg till en publik instansvariabel i klassen Djur av typen int som heter ålder. Modifiera metoderna presenteradig i klasserna Djur, Katt och Hund så att de också skriver ut hur gammalt djuret är. Här är ett exempel på kod för klassen Katt: public void presenteradig() System.out.println("Mjau. Jag är en katt som heter " + this.namn); System.out.println("och jag är " + this.ålder + " år gammal."); Testkör sedan med följande kod: public class Lab1Steg2 public static void main(string[] args) Djur kurre = new Katt("Kurre"); Djur vilma = new Hund("Vilma"); kurre.ålder = 6; vilma.ålder = 3; kurre.presenteradig(); vilma.presenteradig(); Frågor:

Vad blir utskriften? Förklara hur det kommer sig att instansvariabeln ålder i Djur kan användas i Katt och Hund när den är deklarerad i Djur. Vad består egentligen en instans av? Och vad består en klass av? Vad är skillnaden mellan en klass och en instans? Ändra deklarationen av instansvariabeln ålder i Djur till en klassvariabel genom att använda static på det här sättet: public static int ålder; Vad blir resultatet av utskriften nu? Vaför då? Det kan hända att du får varningar från kompilatorn om att du borde accessa ålder som Djur.ålder, men det bör gå att köra programmet i alla fall. Ändra annars referenserna till ålder i koden till Djur.ålder. Var sparas värdet på en instansvariabel? Var sparas värdet på en klassvariabel? Vad refererar den variabeln this till? Steg 3 - publika vs. privata variabler Här får du lära dig varför man ska skydda representationen (instansvariablerna) och du får också lära dig en del om konstruktorer, och prova att skriva en klassmetod (static-metod). Själva uppgiften för Steg 3 kommer i slutet av steget. Det är mycket osnyggt att använda publika variabler på det sätt vi gjorde i Steg 2. Anledningen är är koden blir känslig för ändringar. Antag att vi vill ändra representerationen av hur gammalt ett djur är från ålder till födelseår. Så här skulle det kunna se ut i klassen Djur i så fall: public class Djur public int födelseår; // variabeln ålder är borttagen... Plötsligt fungerar inte koden som använder variabeln ålder längre! Vi måste gå in och ändra i alla klasser där ålder används och skriva om koden så att den använder variabeln födelseår istället, och vi måste dessutom räkna ut åldern varje gång vi vill veta denna genom att ta nuvarande årtal minus födelseåret. I t.ex klassen Katt hade vi fått ändra till följande kod: public void presenteradig() System.out.println("Mjau. Jag är en katt som heter " + this.namn); System.out.println( "och jag är " + (2004 - this.födelseår) + " år gammal."); Hade vi haft en metod som heter ålder istället hade vi däremot bara behövt ändra på ett enda ställe i koden - i klassen Djur. Så här skulle det kunnat ha sett ut i klassen Djur om vi hade gömt variabeln ålder från första början och kommit åt den via en metod istället: public class Djur private int ålder; public Djur(int ålder)

this.ålder = ålder; public int hämtaålder() return ålder; Koden i Katt hade då t.ex kunnat se ut så här: public class Katt extends Djur private String namn; public Katt(String namn, int ålder) super(ålder); // Observera anropet till superklassens konstruktor. this.namn = namn; public String hämtanamn() return this.namn; public void presenteradig() System.out.println( "Mjau. Jag är en katt som heter " + this.hämtanamn()); System.out.println( "och jag är " + this.hämtaålder() + " år gammal."); Notera att i ovanstående kod gömmer vi också instansvariabeln namn med private, för att den ska vara skyddad mot åtkonst av kod utanför klassen. Om man hellre vill lägga namn i Djur flyttar man metoden hämtanamn dit. Då slipper man ha variabeln namn i både Katt och Hund, men man måste i så fall ge konstruktorn till Djur ett extra argument för namnet. Kanske har du redan gjort på det sättet i de tidigare stegen. Nu när vi vill ändra representerationen av ålder till födelseår, så behöver vi endast ändra i koden för Djur. Koden i övriga klasser fungerar utan ändringar eftersom vi kommer åt ålder via en metoden hämtaålder i Djur. Koden i klassen Djur kan då se ut så här: public class Djur private static int nuvarandeår = 2004; private int födelseår; public Djur(int ålder) this.födelseår = Djur.nuvarandeår - ålder; public int hämtaålder() return Djur.nuvarandeår - this.födelseår; I ovanstående kod används en klassvariabel för att hålla reda på vilket år som är det nuvarande året. Årtalet är ju rimligtvis det samma för alla djur. (Såvida de inte börjar hålla på med tidsresor, i så fall behöver nuvarandeår vara en instansvariabel, men hur fungerar det då med åldern? Man borde ju vara lika gammal även när man reser i tiden, eller är det rimligt att man t.ex kan få en negativ ålder? Nu flippade visst labben ur...) Nu till din uppgift. Den är att skriva om ditt program enligt de riktlinjer vi har gått igenom så att alla

instansvariabler skyddas med private. Koden för klasserna ska fungera med följande testprogram: public class Lab1Steg3 public static void main(string[] args) Djur.sättÅrtal(2004); // Så här anropar man en klassmetod. // Hur ska koden för sättårtal se ut? Djur kurre = new Katt("Kurre", 6); Djur vilma = new Hund("Vilma", 3); kurre.presenteradig(); vilma.presenteradig(); Djur.sättÅrtal(2005); // Nu blir är ett nytt år för alla djur. kurre.presenteradig(); vilma.presenteradig(); Det kan hända att kompilatorn klagar på koden i de tidigare testprogrammen (Lab1Steg1 och Lab1Steg2). Du kan i så fall helt enkelt kommentera bort koden inuti dessa klasser så försvinner problemen. Frågor: Vad är skillnaden mellan private och public? Hur kommer man åt instansvariabler som är deklarerade som private från andra klasser? Kan man komma åt private-variabler i subklasser? Vi har inte använt protected ännu, men vad innebär det? Vad innebär det att använda private, public och protected på metoder? Vad betyder this nu igen? När kan man utelämna this och när måste man ha med this? Vad betyder super(ålder); i konstruktorn för klassen Katt i kodexemplet ovan? Hur skriver man en klassmetod (en static-metod)? Vad skiljer en klassmetod från en vanlig metod? Kan man komma åt instansvariabler från en klassmetod? Slutligen: Varför är det känsligt att accessa en instansvariabel, men mycket mindre känsligt att anropa en metod? Sammanfattningsvis: Att gömma implementationen (t.ex genom att göra instansvariablerna privata, men även metoder kan göras privata) är en en grundstenarna i OOP. Det är en del extra arbete att skriva metoder för att accessa variablerna, men det är väl värt detta i lite större program, och i yrkesmässig programmering är det en självklarhet. Steg 4 - relationer mellan objekt Det här är det sista steget i labb 1 och här får du lära dig mer om relationer mellan objekt. Objekt kan hänga ihop med varandra. Det kallas för relationer. Ett hus kan t.ex innehålla ett antal olika djur. För att hålla reda på vilka djur som finns i huset, kan huset ha en lista över djuren. Ett djur i sin tur kanske kan ha en leksak, och det kanske kan ha en kompis, en relation till ett annat djurobjekt. Arv är en typ av relation som brukar kallas för "är en" ("is a") på engelska). T.ex en Katt är ett Djur. Här används extends i Java. Association är en relation som säger att ett objekt "känner till" ett annat objekt. Här används instansvariabler i Java. Det finns även en variant av association som kallas aggregat ("består av"). Aggregat implementeras på samma sätt som en association i Java. Skillnaden är att aggregat är en hårdare koppling än association. Två viktiga typer av relationer (association/aggregat) är ett-till-ett (1:1) och ett-till-många (1:M). I fallet 1:1 har ett objekt en instansvariabel som refererar till ett annat objekt. Om ett objekt behöver kunna referera till många andra objekt (1:M) används en instansvariabel som är en array eller lista. ArrayList är ett exempel på en användbar list-

klass som finns i Javasklassbibliotek. Din uppgift är att skriva ett program som har följande struktur: Instanser av klassen Hus kan innehålla många Djur (1:M). Instanser av kassen Djur (eller instanser av dess subklasser Hund och Katt) kan ha en kompis, ett annat djur (1:1). Och en de kan referera till noll eller många instanser av klassen Leksak (1:M). Leksakerna ska skrivas ut när djuret presenterar sig. Klassen Leksak har en sträng som är namnet på leksaken. Namnet sätts i konstruktorn, och kan kommas åt med den publika metoden hämtanamn. Din kod för klasserna Hus, Djur, Hund, Katt, och Leksak, ska fungera med följande testprogram: public class Lab1Steg4 public static void main(string[] args) // Sätt årtalet för djuren. Djur.sättÅrtal(2004); // Skapa några djur. Djur kurre = new Katt("Kurre", 6); Djur vilma = new Hund("Vilma", 3); Djur bamse = new Katt("Bamse", 12); Djur smilla = new Hund("Smilla", 1); // Skapa leksaker. Leksak boll = new Leksak ("Boll"); Leksak sko = new Leksak ("Tuggsko"); Leksak mus = new Leksak ("Platsmus"); // Skapa huset. Hus hus = new Hus(); // Skapa relationer mellan objekten. hus.läggtilldjur(kurre); hus.läggtilldjur(vilma); hus.läggtilldjur(bamse); hus.läggtilldjur(smilla); kurre.sättkompis(vilma); vilma.sättkompis(smilla); bamse.sättkompis(kurre); kurre.läggtillleksak(boll); kurre.läggtillleksak(mus); vilma.läggtillleksak(sko); // Skriv ut vad som finns i huset. hus.skrivut(); Lite hjälp på vägen: så här kan metoden skrivut i Hus se ut: public void skrivut() System.out.println("Följande djur finns i huset:"); for (int i = 0; i < djurlista.size(); i++) // Notera typomvandlingen ("castningen") när variabeln djur // sätts till elementet på plats i i listan.

Djur djur = (Djur) djurlista.get(i); djur.skrivut(); Instansvariabeln djurlista i Hus är av typen ArrayList. Det är en klass i Javas klassbibliotek och för att kunna använda den måste du importera den med: import java.util.arraylist; Lägg import-satserna först i källkodsfilen, innan klassen. Nu fortsätter vi med en annan sak. Observera att man måste kolla att en variabel inte är null innan den används. Om man t.ex har en variabel kompis i djur som kan vara null måste man testa att den har ett värde innan man kan använda den. Här följer ett kodexempel som illustrerar detta: class Djur extends Object private Djur kompis; public Djur() // Till att börja med har ett nytt djur ingen kompis. this.kompis = null; public void sättkompis(djur djur) this.kompis = djur; public void skrivut() // Anropa presenteradig för att skriva ut // uppgifter om mig själv. Om this t.ex // är en Katt-instans, kommer då metoden // presenteradig i Djur eller i Katt att // anropas? this.presenteradig(); // Kolla att kompis är skild från null innan // meddelandet presenteradig skickas. if (kompis!= null) System.out.println("Här är uppgifter om min kompis:"); kompis.presenteradig(); public void presenteradig() System.out.println("Morr. Jag är ett djur."); // Överlagda metoden i subklasserna och skriv ut // namn och även leksakerna. Om du utgår från ovanstående kodexempel för klassen Djur i ditt program, behövs i så fall metoderna sättkompis och skrivut även i subklasserna Hund och Katt? Hur kan du bygga ut ovanstående kod för klassen Djur så att djurobjekt kan referera till leksaker? Vilka tillägg behövs i skrivut för att namnet på leksakerna i djurets lista med leksaker ska skrivas ut? Frågor:

Hur skapar man en ArrayList? Hur lägger man in ett objekt i en ArrayList? Hur itererar man över elementen i en ArrayList? Finns det flera sätt? Vad är en typomvandling ("cast") och när behövs den? Kan du beskriva vilka meddelanden som skickas till vilka instanser och vilka metoder som anropas när skrivut i Hus utförs? Rita ett översiktligt klassdiagram över ditt program där namnet på klasserna och relationerna mellan klasserna är utritade. Hur ritar man arv? Hur ritar man en 1:1 relation? Hur ritar man en 1:M relation? Examination och inlämning Examinationen består av två moment. Inlämning av labben på papper, och en muntlig genomgång. Be din lärare att komma och gå igenom labben med er när ni är klara. Du får då svara på några av frågorna under de olika stegen. Obs att ni ska kunna redogöra för all kod och alla frågor individuellt. Det är inte godtagbart att en person i gruppen har gjort det mesta av jobbet. Lämna in följande på papper i ett labbomslag: En utskrift av programkoden för det slutliga programmet (resultatet från steg 4). Alla klasser och publika metoder ska vara kommenterade med javadoc-kommenterar. Koden ska följa kodstandarden och vara enhetligt indenterad. Ett handritat klassdiagram för klasserna i programmet i steg 4. Dessa ska innehålla klassernas namn samt relationerna mellan klasserna. Avsluta med ett blad där du anger hur mycket tid du har använt för uppgiften (för din grupp), och några kortfattade reflektioner kring uppgiften. Det kan t.ex vara synpunkter på uppgiften och feedback till lärarna, vad som känns oklart, begrepp som är svåra, osv. Generera även javadoc-sidor för dina klasser. Checklista för examinationen Lärarna på kursen kommer att använda följande cheklistor vid examinationen av uppgiften. Checklista för inlämnat material: Är materialet inlämnat i tid? Är alla delar inlämnade? Uppfyller programmet kraven i uppgiften? Följer koden kodstandarden? Avvikelser ger rest. Är koden enhetligt indenterad? Slarvig indentering ger omedelbart rest. Är alla klasser och publika metoder i koden kommenterade med javadoc-kommentarer? Kommentarerna ska vara informativa och meningsfulla. Du behöver inte använda specialtaggar. Är javadoc-sidor genererade? Är alla krav uppfyllda? För den muntliga redovisningen ska alla i gruppen vara beredda att svara på följande frågor. Om du inte kan svara på en fråga ska du lämna in ett skriftligt svar till din lärare. Checklista för den muntliga redovisningen: Kan du berätta vad en kodstandard är bra för? Vad är en klass? Kan du berätta vilka delar en klassbeskrivning i Java innehåller? Ge exempel med hjälp av en klass i ert program. Kan du förklara skillnaden mellan en klass och en instans?

Kan du förklara vad instansvariabler är? Kan du förklara varför instanser har egna värden på instansvariabler, men delar på koden för metoderna? Kan du berätta vad synlighet innebär? Kan du ge exempel på hur "information hiding" används och vad det är bra för? Kan du förklara syntaxen för de olika kontrollstrukturer du har använt i ert program? Kan du visa ett exempel på en loop i ert program som itererar över en lista med objekt och förklara vad koden gör? Vad är "casting" (typomvandling)? När behöver man använda det? Kan du ge exempel hur strängar används?