Objektorientierte Programmierung in der Schule
-
Sitze grade vor dem PC in der Schule, und in Delphi sollen wir nun folgende Klassenhierachie implementieren:
Quadrat / \ / \ Würfel Rechteck / / Quader
Ein Rechteck ist also ein Quadrat und ein Quader ist ein Rechteck, ein Würfel ist ein Quadrat. Lustig, nicht
? Wenn jemand mal einen Link zum Thema Vererbung hat der ihm nahe bringt, das Vererbung eine ist ein Beziehung ist, dann her damit...
-
Hi Lars ...
ich hoffe der Link kann dir helfen .... habe ihn bei google gefunden.
http://www.willemer.de/informatik/cpp/cpperben.htm
dann habe ich da noch :
http://www.uni-muenster.de/ZIV/Mitarbeiter/ReinhardMersch/C++Kurs-SS03-T3.3.html
und nochhttp://www.mathematik.uni-marburg.de/~cpp/mehrvererbung/
ich hoffe es hilft dir!
ciao
-
hmpf leider falsche Sprache....
Delphi bzw. Object Pascal kennt keine Mehrfachvererbung
-
-
C++ spezifisches kommt nicht so gut, darauf geht er nicht ein. Er hält meine Lösungen immer für viel zu kompliziert (wenn ich z.B. bei Listenoperationen lieber ein Dummyelement benutze anstatt umständlichen Lösungen bei drei getrennt behandelten Sonderbedingungen)
-
Zeus schrieb:
http://www.delphi-treff.de/content/tutorials/oopkurs/index.php4?kat=1
Wenn ich ihm ein Tutorial unter die Nase halte wäre das ein wenig anmaßend als Schüler
-
Don't confuse is-a and has-a relations. Inheritance implies an is-a relation. A should only inherit from B if anythign that can be done to B can also be done to A (i.e. if A is-a B).
If A has some charactersitics of B but ot all, A should use an instance of B, probably by incorporating it in itself: A has-a B. This results in using delegation rather than inheritance.
-
Ich weiss nicht, was du hast, das Modell selbst ist doch in Ordnung?
-
Zeus schrieb:
Ich weiss nicht, was du hast, das Modell selbst ist doch in Ordnung?
Nein, es hat nichts mit sinnvoller Objektorientierung gemein.
Beispiel:
Du hast eine Procedure die ein Quadrat erwartet, du kannst ihr aber alles geben, ein Rechteck, ein Würfel oder ein Quader, weil das ja alles Quadrate sind...
-
Ein Objekt kapselt seine Daten und seine Methoden.
d.h. das Objekt selbst muss sich selbst berechnen.
gibst ne Methode Fläche in Quadrat.
kann man sie Überlagern in Rechteck, Quader, Würfel (bzw sollte man auch).
-
Vererbung ist nicht dazu da um Coderedudanzen zu vermeiden.
-
Wenn du B von A erben läßt, dann ist B ein A. Ein Quader ist kein Quadrat
-
Vererbung ist nicht dazu da um Coderedudanzen zu vermeiden.
Hab ich das gesagt?
-
Ja hast du, du hast gesagt die Art der Vererbung wäre ok, weil sie ja alle die Flächenberechnung gemein haben.
-
Grad auch dadurch das erste Problem aufgetreten.
Das Quadrat hatte noch eine Prozedur setArea, man konnt ja von der Fläche auf die Seite zurückschließen. Beim Rechteck gehts nun nicht mehr. Aber was soll man nun mit der virtuellen Prozedur anfangen? Da sieht man schon, dass das absolut nciht sinnvoll ist.
-
Leider kann ich fast kein Stück Delphi!
class Quadrat{ int a; Quadrat(int a){ this.a = a; } int flache(){ return a*a; } } class Wuerfel extends Quadrat{ Wuerfel(int a){ super(a); } int flache(){ return 6*a*a; } } class Rechteck extends Quadrat{ int b; Rechteck(int a, int b){ super(a); this.b = b; } int flache(){ return a*b; } } class Quader extends Rechteck{ int c; Quader(int a, int b, int c){ super(a, b); this.c = c; } int flache(){ return 2*a*b+2*a*c+2*b*c; } } public class vererbung { public static void main(String[] args) { System.out.println(new Quadrat(2).flache()); System.out.println(new Wuerfel(2).flache()); System.out.println(new Rechteck(2,3).flache()); System.out.println(new Quader(2,3,4).flache()); } }
-
@Zeus: *LOL* berechne mal die Fläche von 'nem Würfel. Erst denken, dann schreiben!
-
Warum soll man nicht die (Ober-)Fläche von nem Würfel berechnen können, du Held?
-
ich hab den fehler schon berichtigt das stand a*a*a anstelle von 6*a*a
und da Volumen != Fläche ist - naja ich darf wohl auch paar Bugs Programmieren.
-
Wenn jemand mal einen Link zum Thema Vererbung hat der ihm nahe bringt, das Vererbung eine ist ein Beziehung ist, dann her damit...
Also das sollte in *jedem* Buch über OOD/OOP drinstehen.
Vielleicht hilft dir Barbara Liskovs "Substitution Principle". Schön erklärt von Uncle Bob: http://www.objectmentor.com/resources/articles/lsp.pdf