1 / 26

Arv

Arv. 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

kuri
Download Presentation

Arv

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 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 Person(födelsedag : DateTime, namn : string, telefon : 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. Om varje instans ur klassen T skall vara en instans ur en subklass, så är klassen T en abstraktklass 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) Abstrakta klasser Konto saldo: Money Kursiv stil = abstrakt klass LöneKonto SparKonto

  15. Interface «interface» 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. 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 SortedList ArrayList

  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. 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) Multipelt arv 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. Person Ägare Kanslist ÄgarPerson KanslistPerson ÄgarKanslistPerson Ett exempel till: Multipelt arv

  25. Person Ägare Kanslist Roll Exempel: Anpassa till enkelt arv 1 1..2 • 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(); }

More Related