Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected]

25
Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected] Föreläsning 2, Kapitel 2

description

Föreläsning 2, Kapitel 2. Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling. Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected]. Idag. - PowerPoint PPT Presentation

Transcript of Fredric Ragnar [email protected] Telefon 0498-299948 Andreas Hedrén [email protected]

Page 1: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Att förstå klassdefinitioner

Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling

Fredric Ragnar [email protected]

Telefon 0498-299948

Andreas Hedrén [email protected]

Föreläsning 2, Kapitel 2

Page 2: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Idag

• Fortsätta att gå igenom fler nya termer– Fält

– Konstruktorer

– Metoder

– Parametrar

• Titta på delar av Java-syntax – grammatiken i programmeringsspråket– Tilldelningssatser

– Villkorssatser

• Introduktion till UML

Page 3: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Automatisk biljettmaskin – utifrån sett

• Vi skall undersöka beteendet hos en typisk biljettmaskin.– Vi kommer att använda ”naive ticket-machine” projektet.

– Maskinen ger biljetter till ett fast pris

– Hur matas pengar in i maskinen?

– Hur håller maskinen reda på hur mycket pengar som matats i?

Page 4: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Automatisk biljettmaskin – inifrån sett

• Genom att interagera med objektet får vi en bild av vilket beteende det har

• Genom att titta inuti objektet ser vi hur objektet gör för att åstadkommma beteendet

• Alla Java-klasser ser liknande ut inuti

Page 5: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Grundläggande struktur för klasser

public class TicketMachine{ Inre delen av klassen visar vi inte}

public class ClassName{ Fält Konstruktorer Metoder}

Det yttre skaletför TicketMachine

Innehållet en klass

Page 6: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Fält

• Fält lagrar värden för ett objekt

• De kallas också instansvariabler

• Använd Inspect för att titta på fälten i ett objekt

• Fältet definierar tillståndet hos objektet

public class TicketMachine{ private int price; private int balance; private int total;  Konstruktor och metoder visas inte.}

private int price;

Synlighetsmodifierare typ variabelnamn

Page 7: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Konstruktorer

• Konstruktorer initierar ett objekt

• De har samma namn som sin klass

• De lagrar startvärden/initialvärden i fälten

• De tar ofta emot värden i parametrar för detta

public TicketMachine(int ticketCost){ price = ticketCost; balance = 0; total = 0;}

Page 8: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Skicka data med parametrar

Page 9: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Rekapitulering av termer

• Klass

• Attribut

• Konstruktor

• Parameter

• Metod

public class TicketMachine

{

private int price;

private int balance;

private int total;

 

public TicketMachine(int ticketCost)

{

price = ticketCost;

balance = 0;

total = 0;

}

public int getPrice()

{

return price;

}

}

Page 10: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Tilldelning

• Värden lagras i fält och variabler med hjälp av tilldelningssatser.– variable = expression;– price = ticketCost;

• En variabel lagrar endast ett värde, så värden som lagrades i variabeln tidigare försvinner.

Page 11: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

”Accessor”-metoder

• Metoder implementerar beteendet hos objekt• ”Accessor”-metoder (eng: ”accessors” eller ”getters”) ger

information om objekt• Metoder består av ett huvud och en kropp• Huvudet definierar metodens signatur

public int getPrice()• Kroppen innehåller metodens satser

Page 12: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

”Accessor”-metoder, mer…

public int getPrice(){ return price;}

returtypmetodnamn

Början och slut på metodens kropp (block)

retursats

synlighetsmodifierare

Page 13: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

”Mutator”-metoder

• Har en liknande struktur: huvud och kropp• Används för att mutera (ändra) ett objekts tillstånd (eng:

”mutators” eller ”setters”)• Fixas genom att ändra värdet på ett eller flera fält

– Har typiskt tilldelningssatser

– Har typiskt parametrar

Page 14: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

”Mutator”-metoder, mer…

public void insertMoney(int amount){ balance += amount;}

returtyp (void)

metodnamn parameter

synlighetsmodifierare

tilldelningssats

fält som ändras

Page 15: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Att skriva ut från metoderpublic void printTicket(){ // Simulate the printing of a ticket. System.out.println("##################"); System.out.println("# The BlueJ Line"); System.out.println("# Ticket"); System.out.println("# " + price + " cents."); System.out.println("##################"); System.out.println();  // Update the total collected with the balance. total += balance; // Clear the balance. balance = 0;}

Page 16: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Tankar om biljettmaskiner

• Deras beteende är otillräckligt på flera sätt:– Ingen koll på summor som matats i

– Ingen växel

– Ingen koll på att initieringen är vettig

• Hur kan vi fixa detta?– Behöver ett mer sofistikerat beteende

Page 17: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Att göra val

public void insertMoney(int amount){ if(amount > 0) { balance += amount; } else { System.out.println("Use a positive amount: " + amount); }}

Page 18: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Att göra val, mer…

if(gör något test) { Gör satserna här om testet ger resultatet sant}else { Gör satserna här om testet ger falskt som resultat}

‘if’ nyckelordBoolskt villkor som skall testas – ger resultatet sant eller falskt

Åtgärder om villkoret är sant

Åtgärder om villkoret är falskt‘else’ nyckelord

Page 19: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Lokala variabler

• Fält är en sorts variabler– De lagrar värden så länge som objektet lever

– De kan kommas åt från hela klassen

• Metoder kan ha mer kortlivade variabler– De finns bar aunder tiden som metoden körs

– De kan bara kommas åt från metoden

Page 20: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Lokala variabler

public int refundBalance(){ int amountToRefund; amountToRefund = balance; balance = 0; return amountToRefund;}

En lokal variabel

Ingen synlighets-modifierare

Page 21: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Introduktion till UML

Vi har tittat på de centrala begreppen för de byggstenar som finns

för en klass. Vi kommer att fortsätta med att beskriva system som

består av fler klasser. Det blir ju fort många detaljer och då vill

man många gånger kunna presentera en förenkling av systemet.

Det gör man genom att beskriva en modell av systemet. Till vår

hjälp har vi då UML (Unified Modeling Language). Det är ett antal

diagram för att beskriva dessa modeller. Vi börjar att titta på

klassdiagrammet.

Page 22: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Källkod vs. klassdiagram

public class TicketMachine

{

public int price;

public int balance;

public int total;

 

public TicketMachine(int ticketCost)

{

price = ticketCost;

balance = 0;

total = 0;

}

public int getPrice()

{

return price;

}

}

Page 23: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Sammanfattning – klassers beståndsdelar

• Klassers kroppar innehåller: fält, konstruktorer och metoder.• Fält lagrar värden som bestämmer/definierar objektens tillstånd• Konstruktorer initierar objekten.• Metoder implementerar objektens beteende.• Ett klassdiagram kan visa en förenklad bild av en klass.

Page 24: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Sammanfattning – fält, parametrar och variabler

• Fält, parametrar och lokala variabler är variabler allihop• Fält består under ett objekts livstid• Parametrar används för att ta emot värden in till en konstruktor

eller metod• Lokala variabler används för att tillfälligt lagra värden.

Page 25: Fredric Ragnar  fredric.ragnar@hgo.se Telefon 0498-299948 Andreas Hedrén  andreas.hedren@hgo.se

Sammanfattning – styrande satser

• Objekt kan ta beslut eller göra val med hjälp av villkors-satser (if-satser)

• Ett test som ger sant eller falskt tillåter att en av två alternativa händelseutvecklingar kan väljas. (En av två olika vägar väljs)