Presentation laddar. Vänta.

Presentation laddar. Vänta.

Arv.

Liknande presentationer


En presentation över ämnet: "Arv."— Presentationens avskrift:

1 Arv

2 Generalisering/Specialisering: Arv
Klasser kan organiseras i hierarkier. En subklass ”ärver” samtliga egenskaper (attribut och operationer) från sin superklass Abstrakta superklasser används enbart för att kunna skapa subklasser med gemensamma egenskaper G/S med polymorfism En subklass kan ”överskugga” metoden för en ärvd operation, dvs ha en egen metod (kod) för samma operation (tjänst)

3 Klasshierarkier Generella klasser Applikationsspecifika klasser
utskriftsenhet däggdjur moderklasser katt hund marsvin plotter skrivare tax golden schäfer matris laser bläck Applikationsspecifika klasser

4 Arv Objekt kan uppvisa likheter med varandra även om de inte tillhör samma klass Då innehåller dessa klasser delvis identiska beskrivningar

5 Arv Fordon Bil Lastbil Flygplan Tåg class Fordon {}
class Bil extends Fordon {} class Lastbil extends Fordon {} class Tåg extends Fordon {} class Flygplan extends Fordon {}

6 Arv Person födelsedag : DateTime namn : string telefon : string
Telefon(value : string) Namn () : string Födelsedag () : DateTime DagarTillNästaFödelsedag () : int Student inskrivningsår : int betaldKåravgift : bool Student(födelsedag : DateTime, namn : string, telefon : string, år : int, betalt : bool) Inskrivningsår() : int Inskrivningsår(value : int) betaldKåravgift() : bool betaldKåravgift(betalt : bool)

7 Specialisering - generalisering
Person Superklass Subklass Student Lärare Kan läsas som ”är ett slags” ( ”is a” )

8 Klassbibliotek C#: using Klassbibliotek
Applikationsspecifika utvidgningar

9 superklass Varje klass K i C# (utom klassen Object) är en utvidgning av åtminstone en bestämd klass, som kallas den omedelbara superklassen till K. Att en klass är en omedelbar utvidgning av en annan klass anges med kolon : Anger vi inget arv ärver vi i C# ändå alltid från klassen Object.

10 Enkelt arv En klass har vid enkelt arv högst en omedelbar superklass
En klass får ha godtyckligt antal subklasser superklass subklass subklass subklass

11 Enkelt arv Subklassen har alla egenskaper som superklassen har och eventuellt fler Arv av alla attribut, operationer och associationer Cykel märke modell beräknaLivslängdKvar() Växelcykel

12 Arv med tillägg (utvidgning)
Cykel märke modell beräknaLivslängdKvar() Man kan lägga till attribut och/eller operationer Växelcykel antalväxlar beräknaDrevlivslängd() nytt attribut ny operation

13 Abstrakta klasser Konto saldo : double Saldo () : double LöneKonto
SparKonto kredit : double LoneKonto(saldo : double, kredit : double) Kredit() : double

14 Abstrakta klasser Om varje instans ur klassen T skall vara en instans ur en subklass, så är klassen T en abstrakt klass En klass som saknar objekt Fångar det som är gemensamt i flera klasser Gemensamma attribut, operationer och relationer Deklaration av metoder (tala om att de finns men de är ej implementerade) Konto saldo: Money Kursiv stil = abstrakt klass LöneKonto SparKonto

15 Interface Endast operationer, interface kan inte ha några metoder
ISkrivbart «interface» ILäsbart Endast operationer, interface kan inte ha några metoder Måste implementera egna metoder för interfacets operationer Ett interface kan liknas vid en abstrakt klass, med enbart abstrakta operationer, dvs utan metoder Skriv () Läs () Dokument Skriv () Läs ()

16 Exempel: interface interface ISkrivbart { public void Skriv(); } interface ILäsbart { public void Läs(); } class Dokument : ISkrivbart, ILäsbart { public void Skriv() // Kod för att skriva } public void Läs() // Kod för att läsa I C# finns interface. I C++ används istället abstrakta klasser med ”virtuella” metoder!

17 Interface Interface och objekt
Alla objekt som implementerar ett ”interface” är också instanser av detta interface. Instanser av ett interface kan inte skapas som sådana, utan kan endast skapas som instanser av en klass som implementerat interfacet ... IList c = new ArrayList(); «interface» IList För att förenkla förståelsen av ”interface” kan vi tänka på dem som ”abstrakta klasser”, där vi endast angett vilka metoder som skall finnas, men utan att ange någon implementation för dessa metoder. ArrayList

18 Generalisering/specialisering
Interface Generalisering/specialisering Även interface kan organiseras i hierarkier. Ett subinterface ärver samtliga operationer från sitt superinterface «interface» ICollection interface IList : ICollection { ... } «interface» IList «interface» IDictionary ArrayList SortedList

19 this, base vid anrop av konstruktor
I en konstruktor kan vi anropa en annan konstruktor för samma klass (this), eller en konstruktor för den omedelbara överklassen (base) i en s.k. “initieringslista”. class B : A { int b; int c; public B (int x, int y, int z) : base(x) b = y; c = z; } public B (int x, int y) : this(x, y, 0) {} class A { int a; public A (int x) a = x; }

20 base vid anrop av överklassens metoder
Andra metoder i överklassen än konstruktorn kan vi anropa var som helst inom en metod. För att nå överskuggade metoder i överklassen använder vi base. class A { int a; public int f () return a; } class B : A { int b; public int f () int x = base.f(); return x + b; } I många OO-språk används istället för base nyckelordet super

21 Multipelt arv Fördelar Nackdelar Speglar verkligheten bättre
Minimal redundans Flexibelt Nackdelar Kan öka komplexiteten Namnkonflikter Stöds ej av alla programspråk (exempelvis inte av C# eller Java) Radio Klocka frekvens : int frekvens : int KlockRadio Vilken frekvens ärvs?

22 Exempel: multipelt arv
class Klocka { int frekvens } class Radio { int frekvens } OBS! Exemplet är från C++, går inte i C# class KlockRadio : Klocka, Radio { } Hur detta i verkligheten fungerar är kompilatorberoende! I C# är multipelt arv inte tillåtet!

23 En vanlig lösning i C#: komposition
class Klocka { int frekvens } class KlockRadio { private Klocka k = new Klocka(); private Radio r = new Radio(); public int KlockFrekvens get { return k.frekvens; } set { k.frekvens = value; } } public int RadioFrekvens get { return r.frekvens; } set { r.frekvens = value; } class Radio { int frekvens }

24 Ett exempel till: Multipelt arv
Ägare Kanslist Person ÄgarPerson KanslistPerson ÄgarKanslistPerson

25 Exempel: Anpassa till enkelt arv
Person Roll 1 1..2 Ägare Kanslist Använd en abstrakt rollklass och en association

26 Exempel: enkelt arv class Roll { } class Aegare : Roll { }
class Kanslist : Roll { } class Person { Roll[] roller = new Roll[2]; roller[0] = new Aegare(); roller[1] = new Kanslist(); }


Ladda ner ppt "Arv."

Liknande presentationer


Google-annonser