Presentation laddar. Vänta.

Presentation laddar. Vänta.

Arv. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Generalisering/Specialisering: Arv Klasser kan organiseras.

Liknande presentationer


En presentation över ämnet: "Arv. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Generalisering/Specialisering: Arv Klasser kan organiseras."— Presentationens avskrift:

1 Arv

2 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 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 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 33 däggdjur hundkattmarsvin Klasshierarkier goldentaxschäfer utskriftsenhet skrivareplotter lasermatrisbläck Generella klasser Applikationsspecifika klasser moderklasser

4 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 44 Arv Objekt kan uppvisa likheter med varandra även om de inte tillhör samma klass Då innehåller dessa klasser delvis identiska beskrivningar

5 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 55 Arv Fordon LastbilFlygplanTågBil class Fordon {} class Bil extends Fordon {} class Lastbil extends Fordon {} class Tåg extends Fordon {} class Flygplan extends Fordon {}

6 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 66 Person Person(födelsedag : DateTime, namn : string, telefon : string) Telefon() : string Telefon(value : string) Namn () : string Födelsedag () : DateTime DagarTillNästaFödelsedag () : int födelsedag : DateTime namn : string telefon : string Student 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) inskrivningsår : int betaldKåravgift : bool Arv

7 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 77 Specialisering - generalisering Person StudentLärare Kan läsas som ”är ett slags” ( ”is a” ) Superklass Subklass

8 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 88 Klassbibliotek C#: using Klassbibliotek Applikationsspecifika utvidgningar

9 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 99 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. superklass

10 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 10 Enkelt arv En klass har vid enkelt arv högst en omedelbar superklass En klass får ha godtyckligt antal subklasser superklass subklass

11 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 11 Enkelt arv Cykel märke modell beräknaLivslängdKvar() Växelcykel Subklassen har alla egenskaper som superklassen har och eventuellt fler Arv av alla attribut, operationer och associationer

12 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 12 Arv med tillägg (utvidgning) Cykel märke modell beräknaLivslängdKvar() Växelcykel antalväxlar beräknaDrevlivslängd() Man kan lägga till attribut och/eller operationer nytt attribut ny operation

13 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 13 Konto Saldo () : double saldo : double LöneKonto LoneKonto(saldo : double, kredit : double) Kredit() : double kredit : double SparKonto Abstrakta klasser

14 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 14 Abstrakta klasser Konto saldo: Money LöneKontoSparKonto 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) Kursiv stil = abstrakt klass

15 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 15 «interface» ISkrivbart Skriv () Dokument Skriv () Läs () «interface» ILäsbart Läs () Interface 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

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

17 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 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 ArrayList «interface» IList... IList c = new ArrayList();... 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.

18 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 18 Interface Generalisering/specialisering Även interface kan organiseras i hierarkier. Ett subinterface ärver samtliga operationer från sitt superinterface «interface» IList «interface» ICollection «interface» IDictionary SortedList ArrayList interface IList : ICollection {... }

19 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 19 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”. this, base vid anrop av konstruktor class A { int a; public A (int x) { a = x; } 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) {} }

20 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 20 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. base vid anrop av överklassens metoder 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 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 21 Multipelt arv Fördelar 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) frekvens : int KlockRadio Radio frekvens : int Klocka Vilken frekvens ärvs?

22 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Exempel: multipelt arv class Klocka { int frekvens } class KlockRadio : Klocka, Radio { } class Radio { int frekvens } Hur detta i verkligheten fungerar är kompilatorberoende! I C# är multipelt arv inte tillåtet! OBS! Exemplet är från C++, går inte i C#

23 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 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 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 24 Ett exempel till: Multipelt arv PersonÄgareKanslistÄgarPersonKanslistPersonÄgarKanslistPerson

25 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 25 Exempel: Anpassa till enkelt arv Använd en abstrakt rollklass och en association PersonÄgareKanslistRoll

26 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 26 Exempel: enkelt arv class Aegare : Roll { } class Roll { } class Kanslist : Roll { } class Person { Roll[] roller = new Roll[2]; roller[0] = new Aegare(); roller[1] = new Kanslist(); }


Ladda ner ppt "Arv. Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 22 Generalisering/Specialisering: Arv Klasser kan organiseras."

Liknande presentationer


Google-annonser