Innehåll u OOP snabbintroduktion u Datatyper u Uttryck u Satser u Arv (intro) u Programvaruutveckling och programmering u Klassdesign och metodik (UML, CRC) u Arv, polymorfi och dynamisk bindning u Fält u Undantag u In-/utmatning och filer u Applets vs applikationer u Rekursion F6 jubo,thomasj,marie 2003 1
Omdefiniera metoder 1 u Ärvda metoder kan ibland vara olämpliga o changesize(), draw() och erase() t ex måste fungera olika för olika figurer Ë En subklass får omdefiniera en ärvd metod u I en omdefinition ges en metod en ny implementering u Måste dock ha samma signatur som superklassens metod u signatur : metodens namn och parametrar (antal,typ och ordning) F6 jubo,thomasj,marie 2003 2
Omdefiniera metoder 2 u Originalmetoden skuggas, finns dock fortfarande tillgänglig genom super referensen super.metod (parametrar); u...på detta sätt kan originalmetoden utökas u Se t.ex. metoden tostring i people2 F6 jubo,thomasj,marie 2003 3
Klassen Object u Alla klasser härleds från klassen Object u Om inget arv anges, är klassen automatiskt subklass till Object u Klassen Object är alltså rot i alla hierarkier Object // `== och `= för objekt + boolean equals (Object obj ) + Object clone ( ) + String tostring ( ) + Class getclass ( ) # wait (long timeout )... F6 jubo,thomasj,marie 2003 4
Omdefiniera metoder 3 /** * Return a string representation of this object. */ public String tostring() // redefined from "Object" { } return "Name: " + name + "\n" + "Year of birth: " + yearofbirth + "\n"; Person /** * Return a string representation of this object. */ public String tostring() // redefined from "Person" { } return super.tostring() + "Staff member\n" + "Room: " + room + "\n"; Staff F6 jubo,thomasj,marie 2003 5
Omdefinition vs. Overloading u Omdefinition o Två (eller fler) metoder med samma signatur o Deklarerat i olika klasser o Originalversionen deklarerat i en superklass o Omdefinitioner i olika subklasser Ë Metodval beror på klasstyp u u Overloading o Två (eller fler) metoder med olika signatur o Får vara deklarerat i samma klass Ë Metodval beror på parameterlistan Se klassen Triangle i shapes2 exemplet F6 jubo,thomasj,marie 2003 6
Klass hierarkier u Subklasser kan i sin tur ha subklasser u God klassdesign placerar gemensamma egenskaper så högt som möjligt i hierarkin u God klassdesign lägger till bara ett fåtal nya attribut och metoder åt gången u Klass hierarkier måste ofta modifieras och utökas u Ingen generell design som duger överallt F6 jubo,thomasj,marie 2003 7
Arv och polymorfi Polymorfi: Kan förekomma i många former. u Referenser får referera till objekt av en subklass u Exempel: Figure f = new Square(); Square s = new Figure(); OK. Square är-en Figure Figure Square s = new Circle(); Square... Circle Typfel F6 jubo,thomasj,marie 2003 8
Dynamisk bindning u Objektets typ (inte referensens) bestämmer vilken metod som exekveras u Samma kod kan ge olika anrop vid olika tillfällen u Kopplingen görs under körningen (dvs dynamisk) OK. Square och Circle ärver från ( är-en ) Figure u Exempel: Figure f = new Square(); f.changesize (100); changesize i Square exekveras! Figure f = new Circle(); Square... Circle f.changesize (100); changesize i Circle exekveras! F6 jubo,thomasj,marie 2003 9
Sammanfattning u Arv tillåter att skapa speciella klasser på ett enkelt sätt u Polymorfi tillåter att använda en referens för olika klasstyper o Definierat klasstyp o Annan klasstyp som direkt eller indirekt ärver från denna u Metoder kan omdefinieras (bara i samband med arv) och överladdas u Dynamisk bindning ser till att rätt metod exekveras Ë Programmeraren behöver inte manuellt kolla klasstyp Ë Mera flexibla program u Se Database klassen i people2 exemplet F6 jubo,thomasj,marie 2003 10
Identifierares existens u En identifierare existerar i det block där den definierats public class MinKlass { private int x; // instansvariabler public int minmetod(int y) { for (int i=1; i <= 10; i=i+1) { int j;... }// i-loop... }// minmetod attribut x parameter y loopvariabel i lokal variabel j... }// MinKlass F6 jubo,thomasj,marie 2003 11
Att organisera Javakod u Förutom (enkelt) arv finns det fler koncept i Java som underlättar strukturering av kod u Abstrakta klasser (abstract) o När lämpliga superklasser blir för allmänna u Interfaces (interface) o När arv och abstrakta klasser inte räcker till u Paket (package) o När det blir så pass många klasser att de måste struktureras på ett lämplig sätt F6 jubo,thomasj,marie 2003 12
Abstrakta Klasser 1 u God klassdesign placerar gemensamma attribut och metoder så högt som möjligt i hierarkin u men ibland kan dessa egenskaper inte definieras fullständigt u Abstrakta klasser innehåller ofta abstrakta metoder u En abstrakt metod har ingen implementation, bara en signatur u Klasser med abstrakta metoder blir abstrakta Ë Abstrakta klasser är ofta för allmänna för att vara direkt användbara Ë En abstrakt klass kan inte instantieras o Varför inte? - Prova själv i labbet! F6 jubo,thomasj,marie 2003 13
Abstrakta Klasser 2 /* * Draw the figure on screen. */ protected abstract void draw(); Bara metodhuvudet } // Canvas canvas = Canvas.getCanvas(); // canvas.setforegroundcolour(color); // construct an appropriate Shape object // and call `canvas.fill() with this // `Shape object // canvas.wait(10); /* * Erase the figure on screen. */ protected abstract void erase(); // Canvas canvas = Canvas.getCanvas(); // construct an appropriate `Shape object and // call `canvas.erase() with this `Shape object F6 jubo,thomasj,marie 2003 14
Abstrakta Klasser - deklaration public abstract class Classname { attribut deklareras implementerade metoder abstrakta metodhuvuden } F6 jubo,thomasj,marie 2003 15
Abstrakta Klasser 3 u Abstrakta klasser (och metoder) markeras med modifieraren abstract u Subklasser som inte (om)definierar alla abstrakta metoder blir också abstrakta u Exempel: File id size name() print() <<abstract>> Text_File text print() Binary_File data print() Picture_File print() F6 jubo,thomasj,marie 2003 16
Vad kännetecknar en god klass u En odelad, väldefinierad abstraktion u Uppgiften kan beskrivas kort och tydlig u Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat sätt u Har ett koncist och sammanhörig gränssnitt u Har tillstånd och beteende u Representerar en mängd möjliga run-time objekt u Problemet ska delas upp i lämpliga klasser Ë Cohesion och Coupling (sammanhörighet och koppling) Ë Metoderna i varje klass ska ha stark sammanhörighet Ë Klasserna ska vara löst kopplade (oberoende av varann) F6 jubo,thomasj,marie 2003 17
Cohesion u Varje metod ska vara ansvarig för bara en uppgift u Cohesion mäter huruvida en metod uppfyller detta krav u Ju mer en metod fokuserar på en enda uppgift, desto o enklare är det att finna ett bra namn o enklare och förståeligare blir koden u Metoder med stark sammanhörighet kan lättare ändras utan att andra metoder påverkas Ë Det ska vara möjligt att beskriva en metod med en enkel mening med ett verb och ett objekt F6 jubo,thomasj,marie 2003 18
Cohesion: Exempel u Exempel 3: public void setfirstname (String name) { firstname = name; } public void setlastname (String name) { lastname = name; fullname = firstname + + lastname; } Bättre: public void setfirstname (String name) { firstname = name; fullname = firstname + + lastname; } public void setlastname (String name) { lastname = name; fullname = firstname + + lastname; } F6 jubo,thomasj,marie 2003 19
Kategorier av metoder u Konstruktorer o Skapa instanser u Selektor (get-metod) o Returnerar information om objektets tillstånd u Mutator (set-metod) o Ändra objektets tillstånd u Iteratorer o Gå igenom en kollektion elementvis o Returnerar ett objekt och fortsätter till nästa u Annat o Gör nånting Ë En metod ska vara bara i en kategori F6 jubo,thomasj,marie 2003 20
Coupling u Klasserna ska vara så oberoende som möjligt av varann u Coupling mäter hur stark klasserna är kopplade u Ju lösare klasserna är kopplade, desto o enklare är det att förstå en enstak klass o enklare och förståeligare blir systemet som helhet u Klasserna med lös koppling kan lättare ändras utan att andra klasser påverkas Ë Systemet blir lättare att ändra Ë Mera flexibilitet PROBLEM: Koppling och återanvändning går inte ihop F6 jubo,thomasj,marie 2003 21
u Ju starkare relation desto starkare koppling ( sämre) u Dependency u Association u Komposition u Arv Klassrelationer igen <<beror på>> Klass1 Klass 2 relation Klass1 Klass 2 Klass1 Klass 2 Klass1 Klass 2 svag koppling stark koppling F6 jubo,thomasj,marie 2003 22
protected u Problem: Omdefinition av icke publika metoder u Private metoder ärvs inte u men public ska de inte vara Ë Modifieraren protected tillåter arv men ger bättre skydd än public Ë Subklasser kommer åt public och protected attribut/ metoder Ë medan andra klasser bara kommer åt public F6 jubo,thomasj,marie 2003 23
Visibility Variabel eller metod Nås inom samma klass Nås inom samma paket Nås från subklass Nås av alla private nej nej nej default nej nej protecte d public nej F6 jubo,thomasj,marie 2003 24
Visibility via arv Variabel eller metod private default protecte d public Ärvs av subklass i samma paket nej Ärvs av godt. subklass nej nej nej F6 jubo,thomasj,marie 2003 25