Presentation laddar. Vänta.

Presentation laddar. Vänta.

2003-12-02Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.

Liknande presentationer


En presentation över ämnet: "2003-12-02Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning."— Presentationens avskrift:

1 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning Enkelt arv eller multipelt arv? Smalltalk

2 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 2 Objektorienterad programmering Objektorienterad programmering bygger på grundtanken att det inte är underprogrammen som står i centrum utan dataobjekten. Beräkning sker genom att skicka och reagera på meddelanden. Meddelandena motsvarar underprogramsanrop i impera- tiva språk och funktionsapplikation i funktionella språk Datatyper kallas klasser, deras dataelement instanser och underprogram metoder

3 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 3 OO och ADT:er Informationsmaskering hindrar återanvändning av gemensamma delar i nära relaterade ADT:er Inget stöd för att skapa familjer av ADT:er som är varianter av varandra Om ADT A utökas till ADT B kan det vara ineffektivt att inte kunna referera till implementeringsdetaljer i A Att ADT:er är parvis oberoende leder till ostrukturerade program Objektorientering kan ses som ett försök att generalisera ADT-konceptet med syfte på att undvika dess problem.

4 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 4 OO och ADT:er (2) Subklasser ärver variabler och metoder från superklasser Ärvda metoder kan modifieras och nya kan läggas till Subklassen kan få tillgång till implementeringsdetaljer som annars är maskerade Fördelar  modifiering och det effektiva skapandet av varianter är lätt  program får en träd- eller grafliknande klasstruktur MEN: Samtidigt minskas fördelarna som ADT:er ger Objektorientering försöker undvika ADT-problemen med hjälp av konceptet arv (eng. inheritance).

5 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 5 Dynamisk bindning ger polymorphism var x: shape;// x är av typen shape x = new shape(); x.draw();// någon standardfigur ritas x = new square(); x.draw();// en kvadrat ritas x = new circle(); x.draw();// en cirkel ritas Metodanrop binds dynamiskt till den korrekta metoddefinitionen av respektive underklass. Det ger (en viss typ av) polymorphism. class circle (subklass) method draw() {…} class square (subklass) method draw() {…} class shape (superklass) method draw() {…}

6 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 6 Implementering av dynamisk bindning För varje objekt skapas en tabell ("class instance record") som innehåller alla lokala variabler plus en referens till klassens virtuella metodtabell ("virtual method table") instansvariabel m instansvariabel 1 VMT class instance record metod n metod 1 virtuell metodtabell Formatet är statiskt för varje klass Bara en kopia behövs

7 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 7 Enkelt mot multipelt arv Enkelt arv: Till varje klass finns det max en superklass (  super-/subklassrelationen bildar ett träd) Multipelt arv: En klass tillåts ha flera superklasser (  super-/subklassrelationen bildar en acyklisk graf) A B' C B Problem som multipelt arv medför:  namnkollision (vilket x menas om flera ärvs?)  diamantformat arv fördubblar variabler och metoder  invecklade relationer mellan klasser  låg läsbarhet

8 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 8 Andra designfrågor Renodlad objektparadigm eller blandad? (OO-språk eller stöd för OO? Två typsystem?) Är subklasser också subtyper? (Kan en variabel av föräldratyp alltid ersätta en variabel av subtyp? Kan ”saker” i föräldern gömmas för subklassen?) Hur mycket dynamisk bindning? Allokeras objekt på stack eller heap? Avallokering?

9 Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 9 Avslutningsvis lite småprat fac | result i | result  i  1. [i < self] whileTrue: [i  i + 1. result  result * i ]. ^result. fakultet, while-loop fac | result | result  1. 2 to: self do: [:i | result  result * i]. ^result. fakultet, for-loopfakultet, rekursiv fac self > 0 ifTrue: [^ self * (self - 1) fac] ifFalse: [^ 1].


Ladda ner ppt "2003-12-02Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning."

Liknande presentationer


Google-annonser