chair of software engineering einführung in die programmierung prof. dr. bertrand meyer lektion 14:...
TRANSCRIPT
![Page 1: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/1.jpg)
Chair of Software Engineering
Einführung in die Programmierung
Prof. Dr. Bertrand Meyer
Lektion 14: Mehrfachvererbung
![Page 2: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/2.jpg)
2
Abstraktionen kombinieren
Gegeben sind die Klassen
EISENBAHNWAGEN, RESTAURANT
Wie würden Sie eine Klasse SPEISEWAGEN implementieren?
![Page 3: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/3.jpg)
3
Beispiele von Mehrfachvererbungen
Separate Abstraktionen kombinieren:
Restaurant, Eisenbahnwagen Taschenrechner, Uhr Flugzeug, Vermögenswert Zuhause, Fahrzeug Tram, Bus
![Page 4: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/4.jpg)
4
Warnung
Vergessen Sie alles, was Sie gehört haben!Mehrfachvererbung ist nicht das Werk des
TeufelsMehrfachvererbung schadet ihren Zähnen nicht
(Auch wenn Microsoft Word sie scheinbar nicht mag:
)
![Page 5: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/5.jpg)
5
Dies ist wiederholte Vererbung, nicht Mehrfachvererbung
A
D
B C
A
D
Nicht der allgemeine Fall
(Obwohl es häufig vorkommt; warum?)
![Page 6: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/6.jpg)
6
Implizite wiederholte Vererbung
In Eiffel, vierfache Vererbung verursacht wiederholte Vererbung:
CB
D
ANY
![Page 7: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/7.jpg)
7
Noch eine Warnung
Dieser Teil der Vorlesung orientiert sich an Eiffel
Java und C# Mechanismen (Einfachvererbung von Klassen, Mehrfachvererbung von Schnittstellen) werden aber auch behandelt
C++ hat unterstützt ebenfalls Mehrfachvererbung, aber ich werde nicht versuchen, diese zu beschreiben.
![Page 8: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/8.jpg)
8
Zusammengesetzte Figuren
![Page 9: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/9.jpg)
9
![Page 10: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/10.jpg)
10
Mehrfachvererbung: Zusammengesetzte Figuren
Eine zusammengesetzte Figur
Einfache Figuren
![Page 11: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/11.jpg)
11
Den Begriff der zusammengesetzten Figur definieren
COMPOSITE_FIGURE
center
displayhiderotatemove…
countitembeforeafter…putremove…
FIGURELIST
[FIGURE ]
![Page 12: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/12.jpg)
12
In der allgemeinen Struktur
COMPOSITE_FIGURE
FIGURELIST
[FIGURE ]
OPEN_FIGURE
CLOSED_FIGURE
SEGMENT POLYLINE POLYGON ELLIPSE
RECTANGLE
SQUARE
CIRCLE
TRIANGLE
perimeter+
perimeter*
perimeter++
diagonal
perimeter++
perimeter++
perimeter+
![Page 13: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/13.jpg)
13
(Erinnerung) Mit polymorphen Datenstrukturen arbeiten
bilder: LIST [FIGURE]…
across bilder as c loop
c item display
end Dynamische Binden
(POLYGON) (CIRCLE) (POLYGON)(CIRCLE) (ELLIPSE)
(aus Lektion 11)
![Page 14: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/14.jpg)
14
(Erinnerung) Definition: Polymorphie, angepasst
Eine Bindung (Zuweisung oder Argumentübergabe) ist polymorph, falls ihre Zielvariable und der Quellausdruck verschiedene Typen haben.
Eine Entität oder ein Ausdruck ist polymorph, falls sie/er zur Laufzeit — in Folge einer polymorphen Bindung — zu einem Objekt eines anderen Typs gebunden werden.
Eine Container-Datenstruktur ist polymorph, falls sie Referenzen zu Objekten verschiedener Typen enthalten kann.
Polymorphie ist die Existenz dieser Möglichkeiten.
(aus Lektion 11)
![Page 15: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/15.jpg)
15
Eine zusammengesetzte Figur als Liste
c
c.item
countindex1
![Page 16: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/16.jpg)
16
Zusammengesetzte Figuren
class COMPOSITE_FIGURE inheritFIGURE
LIST [FIGURE]feature
display-- Jede einzelne Figur der Reihenfolge-- nach anzeigen.
doacross Current as c loop
c.item.display
endend... Ähnlich für move, rotate etc. ...
end
Benötigt dynamisches
Binden
![Page 17: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/17.jpg)
17
Eine Abstraktionsebene höher gehen
Eine einfachere Form der Prozeduren display, move etc. kann durch den Gebrauch von Iteratoren erreicht werden.
Benutzen Sie dafür Agenten
Wir werden diese in ein paar Wochen behandeln (aber Sie dürfen das Kapitel gerne schon im Voraus lesen)
![Page 18: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/18.jpg)
18
Mehrfachvererbung: Abstraktionen kombinieren
COMPARABLE NUMERIC
STRING COMPLEX
INTEGER
REAL
<, <=, >, >=, …
+, –, *, / …(totale
Ordnungs-beziehung)
(kommutativer Ring)
![Page 19: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/19.jpg)
19
Die Lösung von Java und C#
Keine Mehrfachvererbung für Klassen
“Interface”: Nur Spezifikationen (aber ohne Verträge) Ähnlich wie komplett aufgeschobene Klassen
(ohne wirksame Features)
Eine Klasse kann: Von höchstens einer Klasse erben Von beliebig vielen Schnittstellen erben
![Page 20: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/20.jpg)
20
Mehrfachvererbung: Abstraktionen kombinieren
COMPARABLE NUMERIC
STRING COMPLEX
INTEGER
REAL
<, <=, >, >=, …
+, –, *, / …(totale
Ordnungs-beziehung)
(kommutativer Ring)
![Page 21: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/21.jpg)
21
Wie schreiben wir die Klasse COMPARABLE?
deferred class COMPARABLE feature
end
less alias "<" (x : COMPARABLE [G ]): BOOLEANdeferredend
less_equal alias "<=" (x : COMPARABLE [G ]): BOOLEAN
doResult := (Current < x or (Current ~
x))endgreater alias ">" (x : COMPARABLE [G ]): BOOLEANdo Result := (x < Current) end
greater_equal alias ">=" (x : COMPARABLE [G ]): BOOLEAN
do Result := (x <= Current) end
![Page 22: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/22.jpg)
22
Die Moral dieses Beispiels
Typisches Beispiel für ein lückenhaftes Programm
Wir brauchen das volle Spektrum von vollständig abstrakten (aufgeschobenen) Klasse bis zu komplett implementierten Klassen
Mehrfachvererbung hilft uns, Abstraktionen zu kombinieren
![Page 23: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/23.jpg)
23
Ein typisches Beispiel aus der Eiffel-Bibliothek
class ARRAYED_LIST [G ] inheritLIST [G ] ARRAY [G ]
feature… Implementiere LIST -Features mit ARRAY-
Features …end
For example: i_th (i : INTEGER ): G
-- Element mit Index`i’. do Result := item (i ) end
Feature von ARRAY
![Page 24: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/24.jpg)
24
Man könnte auch Delegation benutzen…
class ARRAYED_LIST [G ] inheritLIST [G ]
featurerep : ARRAY [G ]… Implementiere LIST –Features mit ARRAY-
Features, auf rep angewendet…
endBeispiel:
i_th (i : INTEGER ): G-- Element mit Index
`i’.do
Result := rep item (i)end
![Page 25: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/25.jpg)
25
Nicht-konforme Vererbung
classARRAYED_LIST [G ]
inheritLIST [G ]
ARRAY [G ]
feature… Implementiere LIST -Features mit ARRAY-
Features …end
inherit {NONE
}
ARRAYLIST
ARRAYED_LIST
Nicht-konforme Vererbung
![Page 26: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/26.jpg)
26
Mehrfachvererbung: Namenskonflikte
f
C
f A B
?
![Page 27: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/27.jpg)
27
Namenskonflikte auflösen
f
rename f as A_f C
f A B
A_f, f
class C inheritA rename f as A_f
endB
…
![Page 28: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/28.jpg)
28
Konsequenzen des Umbenennens
a1 : Ab1 : Bc1 : C...
c1.fc1.A_f
a1.fb1.f
rename f as A_f
C
f A B
A_f, f
f
Ungültig: a1.A_f b1.A_f
![Page 29: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/29.jpg)
29
Redefinition und Umbenennen
Redefinition ändert das Feature und behält seinen NamenUmbenennen behält das Feature und ändert seinen Namen
Es ist möglich beide zu kombinieren:
class B inheritA
rename f as A_fredefine A_fend
…
![Page 30: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/30.jpg)
30
Noch eine Anwendung von Umbenennungen
Eine (lokal) bessere Terminologie ermöglichen.Beispiel: child (TREE ); subwindow (WINDOW)
![Page 31: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/31.jpg)
31
Umbenennungen, um die Terminologie zu verbessern
‘‘Graphische’’ Features: height, width, x, y,change_height, change_width, move...‘‘Hierarchische’’ Features: superwindow, subwindows, change_subwindow, add_subwindow...
class WINDOW inheritRECTANGLETREE [WINDOW]
renameparent as superwindow,children as subwindows,add_child as add_subwindow…
endfeature
...end
ABER: Siehe Stilregeln betreffend
einheitlichen Featurenamen
![Page 32: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/32.jpg)
32
Sind alle Namenskonflikte schlecht?
Ein Namenskonflikt muss beseitigt werden, es sei denn, er geschieht:
Durch wiederholte Vererbung (d.h. kein wirklicher Konflikt)
Zwischen Features, von denen höchstens eines wirksam ist.(d.h. die übrigen sind aufgeschoben)
![Page 33: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/33.jpg)
33
Features verschmelzen
A B C
D
f +f * f *
* aufgeschoben
+ wirksam
![Page 34: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/34.jpg)
34
Features verschmelzen: Mit verschiedenen Namen
A B C
D
h +g * f *
* aufgeschoben
+ wirksam Umbenennung
g f h f
classD
inheritA
rename
g as f
end
B
C
rename
h as f
end
feature...
end
![Page 35: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/35.jpg)
35
Features verschmelzen: wirksame Features
A B C
D
f +
f + f +
* aufgeschoben
+ wirksam-- undefiniert
f --f --
![Page 36: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/36.jpg)
36
Undefinition
deferred classT
inheritS
undefine f end
feature
...
end
![Page 37: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/37.jpg)
37
Verschmelzen durch Undefinition
classD
inheritA
undefine f end
B
undefine f end
C
feature...
end
A B C
D
f +
f + f +
f --f --
* aufgeschoben
+ wirksam-- undefiniert
![Page 38: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/38.jpg)
38
Verschmelzen von Features mit unterschiedlichen Namen
A B C
D
h +
f + g +
f --
f --
classD
inheritA
undefine f
end
Brename
g as f undefine
f end
Crename
h as f end
feature ... end
h f
g f
![Page 39: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/39.jpg)
39
Akzeptable Namenskonflikte
Wenn geerbte Features alle den gleichen Namen haben, besteht kein schädlicher Namenskonflikt, falls:
Sie alle eine kompatible Signatur haben Maximal eines von ihnen wirksam ist
Die Semantik eines solchen Falls: Alle Features zu einem verschmelzen Falls es ein wirksames Feature gibt, wird dessen
Implementierung übernommen
![Page 40: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/40.jpg)
40
Verschmelzung von Features: wirksame Features
a1: A b1: B c1: C d1: Da1.g b1.f c1.h d1.f
A B C
D
g+
f+ h+
g f h ff- f-
![Page 41: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/41.jpg)
41
Ein Spezialfall der Mehrfachvererbung
Mehrfachvererbung ermöglicht einer Klasse, zwei oder mehrere Vorfahren zu haben
Beispiel: ASSISTENT erbt von DOZENT und STUDENT
DOZENT STUDENT
ASSISTENT
UNIVERSITÄTS_ANGEHÖRIGER id
Dieses Beispiel bedingt wiederholte Vererbung: eine Klasse ist ein Nachkomme einer anderen Klasse in mehr als einer Art (durch mehr als einen Pfad)
????
????
![Page 42: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/42.jpg)
42
Indirekt und direkt wiederholte Vererbung
A
D
B C
A
D
Auch als «Diamant des Todes» bekannt
![Page 43: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/43.jpg)
43
Mehrfachvererbung ist auch wiederholte Vererbung
Ein typischer Fall:
copy ++
is_equal ++
copy
is_equal
??
copy C_copyis_equal C_is_equal
CLIST
D
ANY
![Page 44: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/44.jpg)
44
Akzeptable Namenskonflikte
Wenn geerbte Features alle den gleichen Namen haben, besteht kein schädlicher Namenskonflikt, falls:
Sie alle eine kompatible Signatur haben Maximal eines von ihnen wirksam ist
Die Semantik eines solchen Falls: Alle Features zu einem verschmelzen Falls es ein wirksames Feature gibt, wird dessen
Implementierung übernommen
![Page 45: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/45.jpg)
45
Teilen und Abgleichung
Features, wie z.B. f, die auf ihren Vererbungspfaden nicht umbenannt wurden, werden geteilt (shared).Features, wie z.B. g, die unter unterschiedlichem Namen geerbt werden, werden vervielfältigt (replicated).
A
B C
D
fg
g g_b
g g_c
![Page 46: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/46.jpg)
46
Wann ist ein Namenskonflikt akzeptabel?
(Konflikt zwischen n direkten oder geerbten Features derselben Klasse. Alle Features haben denselben Namen)
Sie müssen alle kompatible Signaturen haben.
Falls mehr als eines wirksam ist, müssen diese alle vom gleichen Vorfahren (durch wiederholte Vererbung) abstammen.
![Page 47: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/47.jpg)
47
Der Bedarf nach „select“
Eine mögliche Doppeldeutigkeit entsteht durch Polymorphie und dynamisches Binden:
a1 : ANYd1 : D
…
a1 := d1
a1.copy (…)
copy ++
is_equal ++
copy C_copyis_equal C_is_equal
CLIST
D
copy
is_equal ANY
![Page 48: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/48.jpg)
48
Die Doppeldeutigkeit auflösen
classD
inheritLIST [T ]
selectcopy, is_equal
end
Crename
copy as C_copy, is_equal as C_is_equal,
...end
![Page 49: Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lektion 14: Mehrfachvererbung](https://reader036.vdocuments.pub/reader036/viewer/2022062312/55204d7349795902118c6aea/html5/thumbnails/49.jpg)
49
Was wir gesehen haben
Einige Spielchen, die man mit Vererbung spielen kann: Mehrfachvererbung Verschmelzen von Features Wiederholte Vererbung