Frelsning 10 Objektorientering Objektorientering och abstrakta datatyper Dynamisk

Föreläsning 10: Objektorientering • • Objektorientering och abstrakta datatyper Dynamisk bindning Singel mot multipelt arv Smalltalk 2002 -12 -03 F. Drewes, Inst. f. datavetenskap 1

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 imperativa språk och funktionsapplikation i funktionella språk • Datatyper kallas klasser, deras dataelement instanser och underprogram metoder 2002 -12 -03 F. Drewes, Inst. f. datavetenskap 2

OO och ADT: er Objektorientering kan ses som ett försök att generalisera ADT-konceptet med syfte på att undvika dess problem. • 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 2002 -12 -03 F. Drewes, Inst. f. datavetenskap 3

OO och ADT: er (2) Objektorientering försöker undvika ADT-problemen med hjälp av konceptet arv (eng. inheritance). • 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 2002 -12 -03 F. Drewes, Inst. f. datavetenskap 4

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

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") class instance record VMT instansvariabel 1. . . instansvariabel m virtuell metodtabell metod 1. . . metod n Bara en kopia behövs Formatet är statiskt för varje klass 2002 -12 -03 F. Drewes, Inst. f. datavetenskap 6

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) Problem som multipelt arv medför: Ø namnkollision (vilket x menas om flera ärvs? ) Ø diamantformat arv fördubblar variabler och metoder A B B' C Ø invecklade relationer mellan klasser låg läsbarhet 2002 -12 -03 F. Drewes, Inst. f. datavetenskap 7

Avslutningsvis lite småprat fakultet, rekursiv fac self > 0 if. True: [ self * (self - 1) fac] if. False: [ 1]. fac | result i | result i 1. [i < self] while. True: [i i + 1. result * i ]. result. fakultet, while-loop fakultet, for-loop fac | result 1. 2 to: self do: [: i | result * i]. result. 2002 -12 -03 F. Drewes, Inst. f. datavetenskap 8
- Slides: 8