Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.

Slides:



Advertisements
Liknande presentationer
Utveckla en applikation Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Advertisements

Föreläsning 7, Kapitel 7 Designa klasser Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Algoritmer och data strukturer -Länkade listor
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 6
Klassarv och inkapsling
OOP Objekt-orienterad programmering
ObjektOrienterad analys och design. SVP Vt2009 Föreläsning nr 2, måndag 8 april kl Diskussion (kurshemsida): Om designuppgiften Om projektuppgiften.
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Att programmera i språket Java
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
TNSL04 – IT grundkurs. VT2008. Föreläsning nr 3, torsdag 7 feb. kl Del 1. Klasser, objekt, metoder, konstruktorer, samlingar och tillstånd. Hur.
i olika programmeringsspråk
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Föreläsning 2, Kapitel 2 Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
PROCESSPROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Repetition inför slutprovet
Klasser och objekt Klasser, objekt och instansvariabler
Föreläsning 6, kapitel 6 Objekt som uppför sig som de skall Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes.
Sid 41 Fordon int antalhjul; int vikt;
Datasamlingar och generiska enheter
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Metodik för problemlösning Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar.
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Arv.
Programmeringsteknik för Media1 & K1
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Introduktion till klasser, objekt och BlueJ Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 10, kapitel 10 Abstrahera mera! Abstrakta klasser och interface Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”,
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Objektorienterad programmering i Java
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Föreläsning 3, Kapitel 3 Objektinteraktion - Skapa objekt som samarbetar Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
1 Föreläsning 8 Mer om klasser och objektorientering.
Välkommen till kursen objektorienterad programmering med Java Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes.
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M del II– Föreläsning 5 vecka 50 OBJEKT Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle Book String.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Föreläsning 8: Exempel och problemlösning
Föreläsning 9: Arv och UML
Presentationens avskrift:

Föreläsning 8, kapitel 8 Förbättra strukturen med arv Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar Telefon Andreas Hedrén Telefon

Dagens punkter Arv Subtyping Substitution Polymorfa variabler

DoME exemplet "Database of Multimedia Entertainment" Lagrar detaljer om CD-skivor och videofilmer CD: titel, artist, antal spår, speltid, har den, kommentar Video: titel, regissör, speltid, har den, kommentar Tillåter (senare) att söka efter information eller skriva ut listor

Objekt i DoME

Klasser i DoME

Objektmodell för DoME

Klassdiagram för DoME

Källkod för klassen CD public class CD { private String title; private String artist; private String comment; CD(String theTitle, String theArtist) { title = theTitle;artist = theArtist;comment = " "; } void setComment(String newComment) {... } String getComment() {... } void print() {... }...} Inte komplett (kommentarer!)

public class Video { private String title; private String director; private String comment; Video(String theTitle, String theDirect) { title = theTitle;director = theDirect;comment = " "; } void setComment(String newComment) {... } String getComment() {... } void print() {... }...} Inte komplett (kommentarer!) Källkod för klassen Video

Källkod för klassen Database class Database { private ArrayList cds ; private ArrayList videos ;... public void list() { for(Iterator iter = cds.iterator(); iter.hasNext(); ) { CD cd = (CD)iter.next(); cd.print(); System.out.println(); // empty line between items } for(Iterator iter = videos.iterator(); iter.hasNext(); ) { Video video = (Video)iter.next(); video.print(); System.out.println(); // empty line between items }

Kritik av DoME Duplicering av kod Klasserna CD och Video är väldigt lika, stora delar t o m identiska Gör underhåll svårt/mer jobb Inför risk för buggar genom felaktigt underhåll Det finns också duplicerad kod i klassen Database

Använda arv

Använda arv, mer 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

Arvshierarkier

Arv i Java public class Item {... } public class CD extends Item {... } public class Video extends Item {... } Ingen ändring här Ändra här

Superklassen Item public class Item { private String title; private int playingTime; private boolean gotIt; private String comment; // constructors and methods omitted. }

Underklasserna CD och Video public class CD extends Item { private String artist; private int numberOfTracks; // constructors and methods omitted. } public class Video extends Item { private String director; // constructors and methods omitted. }

Arv och konstruktorer public class Item { private String title; private int playingTime; private boolean gotIt; private String comment; /** * Initialise the fields of the item. */ public Item(String theTitle, int time) { title = theTitle; playingTime = time; gotIt = false; comment = ""; } // methods omitted }

Arv och konstruktorer, mer public class CD extends Item { private String artist; private int numberOfTracks; /** * 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 }

Anrop av superklassens konstruktor Subklassernas konstruktorer måste alltid ha ett ”super” anrop Om det inte finns i källkoden så lägger kompilatorn till ett ”super”-anrop (utan parametrar) –Funkar bara om superklassen har en konstruktor utan parametrar Måste vara den första satsen i subklassens konstruktor

Lägger till flera Item typer

Djupare hierarkier

Summering Vitsen med arv vad vi hittills sett: Att undvika duplicering av kod Återanvändning av kod Lättare underhåll Möjlighet att utöka

Ny källkod för klassen Database public class Database{ private ArrayList items; /** * Construct an empty Database. */ public Database() { items = new ArrayList(); } /** * Add an item to the database. */ public void addItem(Item theItem) { items.add(theItem); }...} undviker duplicering av kod i klienten!

Ny källkod för klassen Database /** * 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(); System.out.println(); // empty line between items }

Subtypning Först hade vi: public void addCD(CD theCD) public void addVideo(Video theVideo) Nu har vi: public void addItem(Item theItem) Vi anropar den här metoden med: Video myVideo = new Video(...); database.addItem(myVideo);

Subklasser och subtypning Klasser definierar typer Subklasser definierar subtyper Objekt av subklasser kan användas där objekt av superklasser krävs (Detta kallas substitution)

Subtypning och tilldelning Vehicle v1 = new Vehicle();Vehicle v2 = new Car();Vehicle v3 = new Bicycle(); Objekt ur en subklass kan tilldelas till superklass variabler

Subtypning och parametrar public class Database { public void addItem(Item theItem) {... } Video video = new Video(...); CD cd = new CD(...); database.addItem(video); database.addItem(cd); Objekt ur en subklass kan användas som parametrar som är objekt ur en superklass

Objektdiagram

Klassdiagram

Polymorfa variabler Objektvariabler i Java är polymorfa De kan innehålla objekt av mer än en typ De kan innehålla objekt av den deklarerade typen, eller objekt av subtyper av den deklarerade typen.

Klassen Object Alla klasser ärver från Object.

Polymorfa samlingar Alla samlingar (collections) är polymorfa Elementen är av typen Object public void add(Object element) public Object get(int index)

Casting, igen Kan tilldela subtyp till supertyp Kan inte tilldela supertyp till subtyp String s1 = myList.get(1); fel! Casting fixar detta: String s1 = (String) myList.get(1); Bara om elementet verkligen är en String.

Wrapper-klasser Alla objekt kan stoppas in i en samling… …eftersom samlingar klarar element av typen Object… … och alla klasser är subtyper till Object Great! Men primitiva typer då?

Wrapper-klasser, mer Primitiva typer (int, char, etc) är inte objekt. De måste ”slås in”/”wrappas” i ett objekt. Wrapper-klasser finns för alla primitiva typer primitiv typwrapper-klass intInteger floatFloat charCharacter...

Wrapper-klasser, ännu mer int i = 18; Integer iwrap = new Integer(i); myCollecton.add(iwrap);... Integer element = (Integer) myCollection.get(0); int value = element.intValue() packa int-värdet I ett objekt Lägg till objektet Plocka ut värdet igen

Summering Arv tillåter att klasser definieras som utökningar av andra klasser Arv: –Undviker duplicering av kod –Tillåter återanvändning av kod –Förenklar koden –Förenklar underhåll och tillägg Variabler kan referera till objekt av subtyper Subtyper kan användas överallt där objekt av superklassen förväntas (substitution)