Ich kenne vieles, z.B.: Stargate, Raumschiff Enterprise, Star Trek, Voyager, Kampfstern Galactica, Alien, Prometheus usw.
Ich kenne die Stargate und die StarTreck Serien, habe sie sogar alle.....Kampfstern Galactica kenne ich nur von Namen her.
Ich kenne vieles, z.B.: Stargate, Raumschiff Enterprise, Star Trek, Voyager, Kampfstern Galactica, Alien, Prometheus usw.
Timm Thaler hat geschrieben:
Das obige Beispiel mit den Zahnrädern ist geradezu ein Paradebeispiel zur Vererbung in der OOP, und da mag Vererbung sinnvoll sein. Kreis / Ellipse oder Vierecke sind auch gern gewählte Beispiele, aber hier zeigt sich, dass es eher kontraproduktiv ist, alles in OOP und Vererbung quetschen zu wollen. Für einen Kreis brauch ich Mittelpunktkoordinaten und Radius. Für eine Ellipse brauche ich Mittelpunkt, Halbachsen, eigentlich noch Winkel der Halbachse. Leite ich den Kreis davon ab, schleppe ich das sinnlos mit rum. Andererseits die Ellipse vom Kreis erweitern ist auch Quatsch, weil was soll ich dann mit dem Radius?
Und dazu kommt noch, dass Vererbung ja nur ein kleiner Teil der OOP ist.
Warum leitest Du die Ellipse nicht vom Kreis ab? Der Kreis hat Mittelpunkt und Radius, die Ellipse erbt das und bekommt den zweiten Radius hinzu. Da macht Erben dann plötzlich Sinn.
pluto hat geschrieben:
Wo, beleidige ich denn? Das Problem ist eher, dass ihr mich beleidigt. Wenn man es genau nimmt und mich als "Dummkopf" da stellt. Nur, weil ich mit diesem Thema angefangen habe.
Wenn ich mir den Thread so anschaue, kann man zu diesem Schluss kommen. Bewusst, jedenfalls beleidige ich niemanden. Aber ich möchte auch nicht als Dummkopf da hingestellt werden.
Wer möchte das schon gerne? Ich habe meine Meinungen und ihr habt eure. Ich kann und möchte euch auch nicht vom Gegenteil überzeugen. Das kam auch völlig falsch rüber.
ich habe doch gar nicht geschrieben, dass Du beleidigst.
Ich habe Dich darum gebeten, nicht beleidigt zu sein.
pluto hat geschrieben:Warum leitest Du die Ellipse nicht vom Kreis ab? Der Kreis hat Mittelpunkt und Radius, die Ellipse erbt das und bekommt den zweiten Radius hinzu. Da macht Erben dann plötzlich Sinn.
Ein kreis mit einem zweiten Radius? Ich bin zwar kein Mathematiker, aber gibt es sowas? Wie nennt sich sowas denn?
Die Ellipsa hat einen Mittelpunkt, den sie vom Kreis erbt, eine Hauptachse, die sie vom Kreis erbt, eine Nebenachse, die hinzu kommt, zwei Brennpunkte, die ebenfalls hinzukommen. Ok?
pluto hat geschrieben:Die Ellipsa hat einen Mittelpunkt, den sie vom Kreis erbt, eine Hauptachse, die sie vom Kreis erbt, eine Nebenachse, die hinzu kommt, zwei Brennpunkte, die ebenfalls hinzukommen. Ok?
Nein, dass passt irgendwie nicht, würde ich mal behaupten... was sagen die Mathematiker unter uns dazu?
Niesi hat geschrieben:Warum leitest Du die Ellipse nicht vom Kreis ab? Der Kreis hat Mittelpunkt und Radius, die Ellipse erbt das und bekommt den zweiten Radius hinzu. Da macht Erben dann plötzlich Sinn.
Niesi hat geschrieben:Genauso beim Rechteck: das Rechteck erbt vom Quadrat die rechten Winkel und die Seitenlänge, eine weitere Seitenlänge kommt dazu.
Timm Thaler hat geschrieben:Nee, gerade dieses akademisch gern verwendete Viereck-Beispiel zeigt doch, wie man sich mit OOP schön selber ins Knie schießen kann und noch stolz drauf ist.
Code: Alles auswählen
Type TEineKlasse = class
class var Items: TList;
Procedure WriteValues;
Function GetValue: Integer; virtual;
end;
Type TEineKlasse2 = class(TEineKlasse)
Function GetValue: Integer; override;
end;
IMPLEMENTATION
procedure TEineKlasse.WriteValues;
var EineKlasse: TEineKlasse;
begin
for pointer(EineKlasse) in Items
do writeln(EineKlasse.GetValue);
end;
function TEineKlasse.GetValue: Integer;
begin
Result:= 0;
end;
function TEineKlasse2.GetValue: Integer;
begin
Result:= 2;
end;
kupferstecher hat geschrieben: Iteriert man nun durch die Liste, wie es in der Procedure "WriteValues" getan wird, dann wird je nach abgeleiteter Klasse eine andere Funktion "GetValue" aufgerufen. An der Stelle im Code wo das geschieht, ist aber nicht sichtbar, welche abgeleiteten Klassen überhaupt im Spiel sind. In Lazarus wird bei Klick auf "GetValue" die Deklaration von GetValue der Basisklasse gezeigt, obwohl die ja von der abgeleiteten Klasse überschrieben wurde.
kupferstecher hat geschrieben:Die Realität ist halt kompliziert. Auch mit dem besten Programmierparadigma ist eine Zeile Code nicht genug um jedes Problem zu lösen.
Die OOP ist schon verdammt praktisch. Ich kann mir GUI-Programmierung ohne OOP ehrlich gesagt gar nicht vorstellen.
Hier aber ein tatsächliches Vererbungsproblem, siehe Code. Bei jedem Anlegen einer Instanz wird diese der Liste "Items" hinzugefügt (nicht Teil des Codes). Iteriert man nun durch die Liste, wie es in der Procedure "WriteValues" getan wird, dann wird je nach abgeleiteter Klasse eine andere Funktion "GetValue" aufgerufen. An der Stelle im Code wo das geschieht, ist aber nicht sichtbar, welche abgeleiteten Klassen überhaupt im Spiel sind. In Lazarus wird bei Klick auf "GetValue" die Deklaration von GetValue der Basisklasse gezeigt, obwohl die ja von der abgeleiteten Klasse überschrieben wurde. Lazarus kann da nichts dafür, es ist ja erst zur Laufzeit bekannt, welche Instanzen in der Liste sind. Aber es macht die Sache trotzdem recht unübersichtlich, insbesondere, wenn die abgeleiteten Klassen in veschiedenen Units verteilt sind.
Timm Thaler hat geschrieben:
Nee, gerade dieses akademisch gern verwendete Viereck-Beispiel zeigt doch, wie man sich mit OOP schön selber ins Knie schießen kann und noch stolz drauf ist.