Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avDan Pettersson
1
2003-12-02Lennart 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
2003-12-02Lennart 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
2003-12-02Lennart 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
2003-12-02Lennart 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
2003-12-02Lennart 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
2003-12-02Lennart 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
2003-12-02Lennart 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
2003-12-02Lennart 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
2003-12-02Lennart 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].
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.