Arv GeneraliseringSpecialisering Arv Klasser kan organiseras i hierarkier

  • Slides: 26
Download presentation
Arv

Arv

Generalisering/Specialisering: Arv • Klasser kan organiseras i hierarkier. • En subklass ”ärver” samtliga egenskaper

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

Klasshierarkier däggdjur moderklasser utskriftsenhet katt hund marsvin plotter tax golden schäfer matris Generella klasser

Klasshierarkier däggdjur moderklasser utskriftsenhet katt hund marsvin plotter tax golden schäfer matris Generella klasser skrivare laser bläck Applikationsspecifika klasser Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 3

Arv • Objekt kan uppvisa likheter med varandra även om de inte tillhör samma

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

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

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

Arv Person födelsedag : Date. Time namn : string telefon : string Person(födelsedag :

Arv Person födelsedag : Date. Time namn : string telefon : string Person(födelsedag : Date. Time, namn : string, telefon : string) Telefon() : string Telefon(value : string) Namn () : string Födelsedag () : Date. Time Dagar. Till. Nästa. Födelsedag () : int Student inskrivningsår : int betald. Kåravgift : bool Student(födelsedag : Date. Time, namn : string, telefon : string, år : int, betalt : bool) Inskrivningsår() : int Inskrivningsår(value : int) betald. Kåravgift() : bool betald. Kåravgift(betalt : bool) Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 6

Specialisering - generalisering Person Superklass Subklass Student Lärare Kan läsas som ”är ett slags”

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

Klassbibliotek • C#: using Klassbibliotek Applikationsspecifika utvidgningar Abelli, B. (2004). Programmeringens Grunder – med

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

superklass Varje klass K i C# (utom klassen Object) är en utvidgning av åtminstone

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

Enkelt arv • En klass har vid enkelt arv högst en omedelbar superklass •

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

Enkelt arv • Subklassen har alla egenskaper som superklassen har och eventuellt fler •

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

Arv med tillägg (utvidgning) Cykel • Man kan lägga till attribut och/eller operationer märke

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

Abstrakta klasser Konto saldo : double Saldo () : double Löne. Konto Spar. Konto

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

Abstrakta klasser • Om varje instans ur klassen T skall vara en instans ur

Abstrakta klasser • Om varje instans ur klassen T skall vara en instans ur en subklass, så är klassen T en abstrakt klass Konto saldo: Money Kursiv stil = abstrakt klass • En klass som saknar objekt • Fångar det som är gemensamt i flera klasser Löne. Konto Spar. Konto • Gemensamma attribut, operationer och relationer • Deklaration av metoder (tala om att de finns men de är ej implementerade) Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 14

Interface «interface» ISkrivbart «interface» ILäsbart Skriv () Läs () Dokument Skriv () Läs ()

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

Exempel: interface ISkrivbart { public void Skriv(); } interface ILäsbart { public void Läs();

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

Interface • Interface och objekt • Alla objekt som implementerar ett ”interface” är också

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

Interface • Generalisering/specialisering • Även interface kan organiseras i hierarkier. • Ett subinterface ärver

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 Array. List Sorted. List Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 18

this, base vid anrop av konstruktor I en konstruktor kan vi anropa en annan

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; class A { int a; public B (int x, int y, int z) : base(x) { b = y; c = z; } public A (int x) { a = x; } } public B (int x, int y) : this(x, y, 0) {} } Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 19

base vid anrop av överklassens metoder Andra metoder i överklassen än konstruktorn kan vi

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; class B : A { int b; public int f () { return a; } 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 Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 20

Multipelt arv Radio Klocka frekvens : int Fördelar • Speglar verkligheten bättre • Minimal

Multipelt arv Radio Klocka frekvens : int Fördelar • Speglar verkligheten bättre • Minimal redundans • Flexibelt Nackdelar Klock. Radio • Kan öka komplexiteten • Namnkonflikter Vilken frekvens ärvs? • Stöds ej av alla programspråk (exempelvis inte av C# eller Java) Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 21

Exempel: multipelt arv class Klocka { int frekvens } class Radio { int frekvens

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

En vanlig lösning i C#: komposition class Klocka { int frekvens } class Klock.

En vanlig lösning i C#: komposition class Klocka { int frekvens } class Klock. Radio { private Klocka k = new Klocka(); private Radio r = new Radio(); public int Klock. Frekvens { get { return k. frekvens; } set { k. frekvens = value; } } class Radio { int frekvens } public int Radio. Frekvens { get { return r. frekvens; } set { r. frekvens = value; } } } Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 23

Ett exempel till: Multipelt arv Ägare Kanslist Person Ägar. Kanslist. Person Abelli, B. (2004).

Ett exempel till: Multipelt arv Ägare Kanslist Person Ägar. Kanslist. Person Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 24

Exempel: Anpassa till enkelt arv Person Roll 1 1. . 2 Ägare Kanslist •

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

Exempel: enkelt arv class Roll { } class Aegare : Roll { } class

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