Ladda ner presentationen
Presentation laddar. Vänta.
Publicerades avIda Sandström
1
2002-12-03F. Drewes, Inst. f. datavetenskap1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning Singel mot multipelt arv Smalltalk
2
2002-12-03F. Drewes, Inst. f. datavetenskap2 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
2002-12-03F. Drewes, Inst. f. datavetenskap3 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
2002-12-03F. Drewes, Inst. f. datavetenskap4 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
2002-12-03F. Drewes, Inst. f. datavetenskap5 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
2002-12-03F. Drewes, Inst. f. datavetenskap6 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
2002-12-03F. Drewes, Inst. f. datavetenskap7 Singel mot multipelt arv Singel 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 ett 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
2002-12-03F. Drewes, Inst. f. datavetenskap8 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.