Typkonvertering Typecasting - primitiva typer Typecasting - klasstyper Implicit Vid tilldelning I aritmetiska uttryck Explicit! Casting Om konvertering är möjlig Operator (type) value Cast har hög prioritet (Lägst av de unära, se app.d) Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 1 double result; int count, total; //count & total har fått värden result = (double)total/count; Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 2 public class Auction // The list of Lots in this auction. private ArrayList lots; Vilken typ har public Lot getlot(int number) elementen? if((number >= 1) && (number < nextlotnumber)) // The number seems to be reasonable. Lot selectedlot = (Lot) lots.get(number-1); //getlot Anger att Returnerar en referensen skall referens till ett tolkas som Lot Object //Auction Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 3 Objects First With Java A Practical Introduction Using BlueJ Innehåll Exemplet DoME "Database of Multimedia Entertainment" 8.Improving structure with inheritance Arv Subtyping Substitution Polymorfi Lagra info om CD-skivor och video CD: titel, artist, #spår, speltid, innehav, kommentar Video: titel, regissör, speltid, innehav, kommentar Möjliggör t.ex. sökning i och listning av innehåll Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 5 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 6 DoME objekt DoME klasser DoME objektmodell övre halvan visar attributen nedre halvan visar metoderna Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 7 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 8 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 9
Klassdiagram CD källkod ofullständigt [(kommentarer!) ] public class CD CD(String thetitle, String theartist) artist = theartist; comment = " "; void setcomment(string newcomment) String getcomment() Video källkod ofullständigt [(kommentarer!) ] public class Video private String director; Video(String thetitle, String thedirect) director = thedirect; comment = " "; void setcomment(string newcomment) String getcomment() Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 10 void print() Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 11 void print() Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 12 class Database private ArrayList cds; private ArrayList videos; Database källkod public void list() for(iterator iter = cds.iterator(); iter.hasnext(); ) CD cd = (CD)iter.next(); cd.print(); for(iterator iter = videos.iterator(); iter.hasnext(); ) Video video = (Video)iter.next(); video.print(); //list //Database + och - DoME + Strukturerna definierade - Samma kod på flera ställen!cd och Video liknar varandra, stora delar identiska!mer jobb med underhåll!risk för att fel introduceras - Dubletter av kod även i Database Arv Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 13 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 14 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 15 Att använda arv Arvshierarkier Arv i Java definiera en superklass : Item definiera subklasser för Video och CD superklassen definierar gemensamma attribut subklasserna ärver superklassens attribut subklasserna lägger till egna attribut no ingen change ändring here här change ändring här here public class Video extends Item Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 16 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 17 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 18
Superklass/basklass private int playingtime; private boolean gotit; Subklasser private int numberoftracks; public class Video extends Item private String director; private int playingtime; private boolean gotit; * Initialise the fields of the item. public Item(String thetitle, int time) playingtime = time; gotit = false; comment = ""; // methods omitted Arv och konstruktorer Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 19 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 20 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 21 private int numberoftracks; Arv och konstruktorer * Constructor for objects of class CD public CD(String thetitle, String theartist, int tracks, int time) super(thetitle, time); artist = theartist; numberoftracks = tracks; // methods omitted super betyder konstruktorn i superklassen med denna parameterlista Anrop av basklassens konstruktor Konstruktorer ärvs inte! Subklassens konstruktorer måste innehålla ett anrop 'super'. Om det inte står explicit, lägger kompilatorn till anropet (utan parametrar) fungerar bara om basklassen har en sådan konstruktor Måste vara första satsen i subklassens konstruktor. Fler mediakategorier i DoME metoderna visas ej Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 22 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 23 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 24 Ytterligare nivåer i hierarkin metoderna visas ej Sammanfattning Arv ger (så här långt) stöd för : Undviker dubletter av kod Återanvändning av kod Enklare underhåll Utökning av befintlig kod public class Database private ArrayList items; * Construct an empty Database. public Database() items = new ArrayList(); * Add an item to the database. items.add(theitem); Database ny källkod Undviker avoids att code kod dupliceras duplication i klienten in client! Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 25 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 26 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 27
Database källkod Subtypning Subklasser och subtypning * Print a list of all currently stored CDs and * videos to the text terminal. public void list() for(iterator iter = items.iterator(); iter.hasnext(); ) Item item = (Item)iter.next(); item.print(); Vi hade: public void addcd(cd thecd) public void addvideo(video thevideo) Nu har vi: Metoden anropas med: Video myvideo = new Video(); database.additem(myvideo); Klasser definierar typer. Subklasser definierar subtyper. CD är-en Item Subklassens objekt kan användas där det krävs ett objekt av superklassen. (Detta kallas substitution.) Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 28 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 29 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 30 Subtyping och tilldelning Parameteröverföring Objektdiagram Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle(); subclass Subklassens objects objekt may kan be tilldelas assigned en to superclass referensvariabel för superklassen variables Car är-en Vehicle public class Database Video video = new Video(); CD cd = new CD(); database.additem(video); database.additem(cd); Vilket Item som helst är ok Subklassens objekt kan skickas till en formell parameter av superklassens typ Video är-en Item CD är-en Item Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 31 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 32 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 33 Klassdiagram Polymorfi Klassen Object Referensvariabler i Java är polymorfa. Alla klasser ärver från klassen Object (De kan referera till objekt av mer än en typ.) De kan referera till objekt av den deklarerade klassen eller till objekt av härledda klasser. Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 34 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 35 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 36
Polymorfa collections Casting (igen) Alla collections är polymorfa. Elementen är av typen Object. public void add(object element) public Object get(int index) Kan tilldela subtyp till supertyp. Kan inte tilldela supertyp till subtyp! String s1 = mylist.get(1); error! Casting fixar detta: String s1 = (String) mylist.get(1); (bara om elementet är av typen String!) Alla objekt kan läggas in i collections eftersom collections accepterar objekt av typen Object ocj alla klasser är härledda från Object. Bra! Hur är det med primitiva typer? Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 37 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 38 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 39 Sammanfattning Primitiva typer (int, char, etc) är inte objekt. De slås in i paket till ett objekt! existerar för alla primitiva typer: primitiv typ wrapperklass int Integer float Float char Character int i = 18; Integer iwrap = new Integer(i); mycollecton.add(iwrap); Slå wrap in värdet the int av value typen int Lägg add in the det wrapper objektifierade värdet Integer element = (Integer) mycollection.get(0); int value = element.intvalue() retrieve Få tillbaka the ett wrapper objektifierat värde Ta unwrap av omslaget Arv möjliggör att man kan utnyttja ett strukturellt släkskap mellan klasser Arv Undviker kodupprepning Kod kan återanvändas Förenklar koden Förenklar underhåll och utvidning Referensvariabler kan referera till objekt av alla underliggande klasser i en hierarki. Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 40 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 41 Objects First with Java - A Practical Introduction using BlueJ, David J. Barnes, Michael Kölling 42