OOMPA 2D1359 Föreläsning 8

Relevanta dokument
..arv Arv kan delas in i två huvudtyper Arv för specifikation dvs arv av protokoll Arv av kod dvs arv av beteende och struktur. 2203$ ) UHOlVQLQJ.

Objektkonstruktion. Vilka sorter finns? Varför ärver vi? Aggregering ger en lösare koppling till delarna än komposition. 1nJUDÃJUXQGOlJJDQGHÃUHJOHU

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

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

Laboration 1: Figurer i hierarki

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

OOMPA 2D1359 Föreläsning 2

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

DAT043 - Föreläsning 7

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

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Extentamen i 2D1359 Objektorinterad modellering programmering och analys Tisdag den 13 oktober 1998 kl

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Objektorienterad Programmering (TDDC77)

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

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

Konstruktion av klasser med klasser

Begreppet subtyp/supertyp i Java. Mera om generik. Generik och arv. Generik och arv. Innehåll

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

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

Objektorienterad Programmering (TDDC77)

Klasshierarkier - repetition

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

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Repetition av OOP- och Javabegrepp

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Objektorienterad Programmering (TDDC77)

Repetition av OOP- och Javabegrepp

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

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

Länkade strukturer. (del 2)

Generics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

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

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

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Föreläsning 15: Repetition DVGA02

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

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

Föreläsning 13 Innehåll

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

Introduktion till arv

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

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

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

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

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

Generics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018

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

OOP Objekt-orienterad programmering

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

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

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

Imperativ programmering. Föreläsning 4

Teoridel (svaren direkt på lydelsen)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

TDDC76 - Programmering och Datastrukturer

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

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

Objektorientering - Arv och polymorfi. Eric Elfving Institutionen för datavetenskap

Arv. Objektorienterad och komponentbaserad programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Datastrukturer. föreläsning 3. Stacks 1

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

DAT043 - föreläsning 8

Objektorienterad programmering

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

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation.

Enkla variabler kontra referensvariabel

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

Objektorienterad Programmering (OOP) Murach s: kap 12-16

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

Arrayer. results

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

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

Föreläsning 12. Länkade listor

Transkript:

OOMPA 2D1359 Föreläsning 8 Innehåll Arv, polymorfi och gränssnitt Arv Subtyp, ersättbarhet Olika former av arv Polymorfi Abstrakta klasser och gränssnitt - 1 - Arv l Arv är fundamentalt i objektorienterad programmering För att ett språk skall kallas objektorienterat så måste arv ingå som en möjlig väg att återanvända kod och beskrivningar I programspråksammanhang låter vi subklasser ärva både struktur och attribut från superklasser Shape l dvs både variabler och metoder ärvs A position : Point bounds() :Rectangle draw() : void extent() : Point B E C D - 2 - Shape1 extent : Point draw() : void Shape2 extent : Point draw() : void 1

..arv l Arv kan delas in i två huvudtyper Arv för specifikation l dvs arv av protokoll Arv av kod l dvs arv av beteende och struktur l Arv kan vara av olika typ Generalisering (eng. extension) l subklassen är rikare än, eller en utvidgning av, superklassen Specialisering (eng. specialisation) l sunbklassen är mer specialiserad än, eller ett specialfall av, superklassen l Arv är transitivt Om A superklass till B och B superklass till C så ärver C attribut och beteende från både B och C - 3 - Javas basklass Object l Klassen Object är överst i Javas klassträd Object equals(obj : Object) : boolean tostring() : String getclass() : String Klassen Object med några subklasser och några viktiga metoder Boolean Number String Graphics Component Byte Integer Button Label Container - 4 - Window Panel 2

Subklass, subtyp och ersättbarhet l Abstrakt datatyp Är en inkapsling av data och dom metoder som opererar på dessa data l Subtyp En viss typ A är subtyp till en annan typ B omm A åtminstone erbjuder samma beteende som A och att A kan användas överallt där B kan användas utan att någon skillnad kan observeras l Subklass En subklass ärver struktur och beteende från sina superklasser En subklass kan berika, inskränka eller förändra det ärvda beteendet från sina superklasser l Ersättbarhet Ett objekt av typ A som är subtyp till typen B kan användas som om det vore av typ B eftersom det åtminstone uppvisar B:s beteende - 5 - Olika former av arv l Arv för specialisering subklassen är ett specialfall av superklassen, dvs subklassen är en subtyp till superklassen l En Tandemcykel är en speciell sorts Cykel l Arv för specifikation Superklassen specificerar beteende som inte är implementerat i superklassen men måste implementeras i dess subklasser l Ett Fordon specificerar en Bil och Cykel l Arv för konstruktion Subklassen utnyttjar superklassens beteende men är inte subtyp till superklassen l En FigurGrupp kan implementeras mha av en Vector - 6-3

... l Arv för utvidgning Subklassen lägger till ny funktionalitet i förhållande till superklassen men förändrar inte existerande beteende l En Egenskapslista kan implementeras genom att utvidga en HashTable (en hashad tabell med nyckel/värde-par) l Arv för begränsning Subklassen inskränker superklassens beteende l En MängdKlass kan implementeras som en "inskränkt" Vector l Arv för kombination Subklassen ärver från mer än en superklass l En Amfibiebil kan implementeras genom att kombinera en Bil med en Båt - 7 - Exempel: olika typer av arv Arv för specialisering Ellipse Circle Win95Window Window MacWindow Arv för specifikation MotorLandVehicle tank engine wheels() speed() Car Bike Lorry MotorCycle - 8-4

... Arv för konstruktion Arv för utvidgning Arv för begränsning Polyline Vector Circle Vector Cartoon Stack Ellipse Set Arv för kombination Collection GraphicObject Car Boat GraphicComponent AmfibieCar - 9 - Modifierare och arv l I Java kan vi använda modifierare för att kontrollera arv eller "synbarhet" public l kan användas överallt protected l kan användas i klass eller subklasser private l kan bara användas inne i klassens beskrivning static l klassmetod eller klassvariabel final l kan ej ändras (variabelfallet), kan ej subklassas (klassfallet) abstract l måste specificeras i subklasser - 10-5

Fördelar med arv l Återanvändning av mjukvara Enkelt att modifiera passande klass (på ett strukturerat sätt) l Ökad tillförlitlighet Klasser i "bibliotek" som används av många blir hela tiden testade l Delande av kod Likartade komponenter kan dela (stora delar) kod som kan beskrivas i gemensam superklass l Överenstämmande gränssnitt Klasser som ärver från gemensam superklass överenstämmer troligare än om dom ärver från separata grenar - 11 -... l Mjukvarukomponenter Arv gör det enkelt att konstruera återanvändbara komponenter l Snabb konstruktion av prototyper Ofta snabbt att återanvända klasser och endast ändra det som skiljer l Polymorfi och frameworks Genom polymorfi och arv är det relativt enkelt att beskriva systemstruktur och beteende på hög nivå vars detaljer sedan kan beskrivas av användarnas konkreta subklasser l Inkapsling av information Ofta tillräckligt att känna till superklassens protokoll och inte detaljer om dess implementation - 12-6

Kostnader för arv l Exekveringshastighet Viss extra kostnad för metoduppslagning l Programstorlek Programbibliotek ger ofta mer binärkod än specialdesignade klasser l Programkomplexitet Kod skriven med djupa arvshierarkier ger ofta komplexa strukturer med svårgripbara programflöden Jo-Jo-problemet: där metoder än i superklasser än i subklasser används om vartannat - 13 - Mekanismer för återanvändning av mjukvara l Ersättbarhet Vi strävar efter att skriva programvara där vissa komponenter kan ersättas av andra utan att påverka några andra delar av systemet l Är-en eller har-en Ofta användbar tumregel: l använd arv då en komponent är-en (specialisering) av någon annan en tandemcykel är-en cykel, en bil är-ett fordon, en student är-en person l använd komposition då en komponent har-en annan komponent som en av sina delar en bil har-em motor, en människa har-en vän l Arv av kod eller arv av beteende Arv av gemensam klass bör väljas då kod och struktur delas Ett gränssnitt bör delas då specifikation av beteende men inte den egentliga koden delas - 14-7

Komposition eller arv l Klassen Vector ser förenklat ut på följande sätt: class Vector{ public boolean isempty() {... public in size() {... public addelement(object value) {... public Object lastelement() {... public Object removeelementat(int index) {...... l Nu kan vi konstruera en stack genom att utnyttja Vector med 1) komposition eller 2) arv - 15 -...komposition... class Stack{ private Vector thedata; public Stack() {thedata = new Vector; public boolean isempty() {return thedata.isempty(); public boolean push(object v) {thedata.addelement(v); public boolean peek() {return thedata.lastelement(); public Object pop(){ Object result = thedata.lastelement; thedata.removeelement(thedata.size() - 1); return result; - 16-8

...arv class Stack extends Vector{ public boolean push(object v) {addelement(v); public boolean peek() {return lastelement(); public Object pop(){ Object result = lastelement; thedata.removeelement(size() - 1); return result; - 17 - Arv eller komposition? l Arv ger implicit (eller explicit) antagande om ersättbarhet Subklasser antas vara subtyper Detta "antagande" gäller inte för komposition l Komposition är enklare än arv Komposition anger mer tydligt vilka operationer som kan tillämpas på en viss klass l Vid arv är subklassernas mängd av operationer en supermängd av superklassens mängd av operationer Programmeraren måste undersöka vilka superklassen för att ta reda på vilka operationer som är legala för subklassen l Arv ger kortare beskrivningar än komposition l Arv förhindrar inte manipulation av den nya strukturen via ("illegala") operationer i superklassen - 18-9

... l Komposition döljer implementationsdetaljer bättre än arv Det är enkelt att ersätta en viss struktur med en annan l En stack kan använda en vektor, byta till en länkad lista eller använda sig av en databas l Vid arv har subklasser tillgång till alla icke privata fält i superklassen medan man vid komposition endast har tillgång till publika fält l Arv låter oss använda den nya abstraktionen som argument i en polymorf funktion - 19 -... l Vid arv får vi kortare kod än vid komposition. Därmed blir koden mer översiktlig. Å andra sidan är gränssnittet mer tydligt vid komposition Vid arv måste man fråga sig: Vilka delar av den ärvda koden är tänkt att användas? Vilka delar är nödvändiga eller riskabla att initiera respektive förändra? l En implementation med arv har en liten fördel i exekveringstid Ett extra funktionsanrop behövs vid komposition - 20-10

Polymorfa variabler l l l l l l Polymorf från grekiskans poly = många och morf = form En polymorf variabel är en som kan vara deklarerad att hålla ett värde av viss typ men som i verkligheten håller ett värde av en annan typ Ren polymorfi Då en metod kan appliceras på argument av olika typer Överlagring (eller ad hoc polymorfi) En metod med visst namn kan ta olika typer av argument Överskrivning En metod med ett visst namn kan skrivas om (eller skrivas över) i en subklass Abstrakt metod En abstrakt metod är en metod vars signatur är deklarerad i en superklass men implementationen görs i (konkreta) subklasser - 21 - Överlagring l Överlagring och omvandling Vissa överlagrade metoder gör också omvandlingar mellan olika typer av objekt Typexempel aritmetiska operationer (+, -, *, /) där tex en int omvandlas till en float om en float ingår (int x float -> float) l Överlagring mellan eller inom klasser Metod med visst namn kan finnas i flera klasser Flera metoder med samma namn kan finnas i en viss klass l Parmeteröverlagring Olika metoder med samma namn i en viss klass är tillåtna så länge som parametrarna skiljer i antal eller typ - 22-11

Överskrivning l Ersätta Koden i superklassen ersätts med kod i subklassen Detta görs genom att metoder med samma namn och argumenttyper som i superklassen definieras om i subklassem l Förändra Koden från superklassen kombineras med kod från subklassen Detta görs genom att metod ersätts men att superklassens metod anropas l i Java mha super.metod(...) alternativt i konstruktörer super(..) - 23 - Abstrakta metoder och klasser l En klass kan deklareras abstrakt Då kan inga instanser av klassen skapas l En klass kan deklarera en eller flera av sina metoder som abstrakta Då blir också klassen automatiskt abstrakt l Inga instanser av klassen kan därför skapas En subklass blir också abstrakt till dess att alla abstrakta metoder fått en definition l Tex om metoderna m1() och m2() deklarerats abstrakta i klassen A men subklassen B endast implementerar m1() så är B också abstrakt Om en klass C deklareras som subklass till B och implementerar m2() så blir C konkret och kan instansieras - 24-12

Exempel: abstrakt klass abstract class GraphicObject{ int x, y;... void moveto(int newx, int newy) {... abstract void draw(); class Circle extends GraphicObject { void draw() {... class Rectangle extends GraphicObject { void draw() {... - 25 - Exempel: interface public interface Sleeper { public void wakeup(); public long ONE_SECOND = 1000; public long ONE_MINUTE = 60000; Konstanter nås via Interfacenamn.konstant tex Sleeper.One_Second public class GUIClock extends Applet implements Sleeper {... public void wakeup() { repaint(); clock.letmesleepfor(this, ONE_MINUTE); - 26-13

Exempel: abstrakt klass och vektorer public abstract class Shape { public abstract double area(); public abstract double circumference(); class Circle extends Shape { proteected double r; protected static final double PI = 3.14; public Circle() {this(1.0); public Circle(double r) {this.r = r; public double area( {return PI * r * r; public double circumference () {return 2 * PI * r; class Rectangle extends Shape { proteected double w, h; protected static final double PI = 3.14; public Rectangle (){this(0.0, 0.0); public Rectangle (double w, double h) {this.w = w; this.h = h; public double area() {return w * h; public double circumference() {return 2 * (w + h); - 27 -... l Så kan vi skapa en vektor av Shapes Shapes[] shapes = new Shape[3]; shapes[0] = new Circle(2.0); shapes[1] = new Rectangle(1.0, 2.0); shapes[2] = new Rectangle(10.0, 20.0); double totalarea = 0; for(int i = 0; i < shapes.length; i++) total_area += shapes[i].area(); - 28-14

..med interface med följande definitioner... public interface Drawable{ public void setcolor(color c); public void setposition(point p); public void draw(window dw); Rectangle public DrawableRectangle extends Rectangle implements Drawable{ private Color c; private Point pos; public void setcolor(color c) {this.c = c; public void setposition(point p) {pos = p; public void draw(window dw) {dw.drawrect(pos.x, pos.y, height, width); - 29 -... så kan vi konstruera en vektor av interface (Givet att vi också konstruerat en DrawableCircle och en DrawableSquare på motsvarande sätt) Drawable[] drawables = new Drawable[3]; drawables[0] = new DrawableCircle(2.0); drawables[1] = new DrawableSquare(20.0); drawables[2] = new DrawableRectangle(10.0, 20.0); for(int i = 0; i < drawables.length; i++) {drawables[i].setposition(i * 10.0, i * 5.0); drawables[i].draw(mywindow); - 30-15