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.
Ist die Klassische OOP gescheitert?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Ist die Klassische OOP gescheitert?
MFG
Michael Springwald
Michael Springwald
- Niesi
- Lazarusforum e. V.
- Beiträge: 600
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Ist die Klassische OOP gescheitert?
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.
Genauso beim Rechteck: das Rechteck erbt vom Quadrat die rechten Winkel und die Seitenlänge, eine weitere Seitenlänge kommt dazu.
Das Problem ist doch, wie die programmierende Person da rangeht - logisch durchdacht oder eben nicht.
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Ist die Klassische OOP gescheitert?
Ein kreis mit einem zweiten Radius? Ich bin zwar kein Mathematiker, aber gibt es sowas? Wie nennt sich sowas denn?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.
MFG
Michael Springwald
Michael Springwald
- Niesi
- Lazarusforum e. V.
- Beiträge: 600
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Ist die Klassische OOP gescheitert?
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.
Hallo Michael,
ich habe doch gar nicht geschrieben, dass Du beleidigst.
Ich habe Dich darum gebeten, nicht beleidigt zu sein.
Beste Grüße
Harald
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Ist die Klassische OOP gescheitert?
Wo ist da der unterschied? Ich habe immer versucht möglich höflich zu Antworten, auch wenn das nicht immer leicht fällt, wenn man sowas ließt wie: Das ist doch Blödsinn oder das ist Quatsch oder da jammert wieder. Alles Aussagen, die ich hier in diesem Thread gelesen habe.ich habe doch gar nicht geschrieben, dass Du beleidigst.
Ich habe Dich darum gebeten, nicht beleidigt zu sein.
MFG
Michael Springwald
Michael Springwald
- Niesi
- Lazarusforum e. V.
- Beiträge: 600
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Ist die Klassische OOP gescheitert?
pluto hat geschrieben:Ein kreis mit einem zweiten Radius? Ich bin zwar kein Mathematiker, aber gibt es sowas? Wie nennt sich sowas denn?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.
Ellipse.
Ich gebe aber zu, dass ich es vielleicht nicht vollkommen korrekt formuliert habe.
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?
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: Ist die Klassische OOP gescheitert?
Nein, dass passt irgendwie nicht, würde ich mal behaupten... was sagen die Mathematiker unter uns dazu?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?
MFG
Michael Springwald
Michael Springwald
Re: Ist die Klassische OOP gescheitert?
Bin kein Mathematiker, aber pluto hat recht: https://de.wikipedia.org/wiki/Ellipse - Bild rechts obenpluto hat geschrieben:Nein, dass passt irgendwie nicht, würde ich mal behaupten... was sagen die Mathematiker unter uns dazu?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?
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2825
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Ist die Klassische OOP gescheitert?
Jetzt mal ehrlich: wen interessiert es denn was ein Mathematiker denkt an dieser Stelle?
Es gibt keine allgemeingültige Regel wie und von wem Kreis und Ellipse abgeleitet werden. Es kommt immer auf die praktische Aufgabenstellung an.
Von daher kann diese akademische Diskussion bis ins Allerletzte diskutiert werden. Für die Praxis in der Softwareentwicklung ist das nicht relevant.
Es gibt keine allgemeingültige Regel wie und von wem Kreis und Ellipse abgeleitet werden. Es kommt immer auf die praktische Aufgabenstellung an.
Von daher kann diese akademische Diskussion bis ins Allerletzte diskutiert werden. Für die Praxis in der Softwareentwicklung ist das nicht relevant.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Ist die Klassische OOP gescheitert?
Weil eine Ellipse eben nicht die Sonderform eines Kreises, sondern ein Kreis die Sonderform einer Ellipse ist.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.
Mathematisch ist das auch unsinnig: Um eine (vielleicht noch gedrehte) Ellipse zu zeichnen brauche ich andere Formeln als für einen Kreis. Also kann ich nicht einfach eine Kreisfunktion nehmen und für eine Ellipse erweitern. Ich kann eine Ellipsenfunktion nehmen, r1=r2 und alpha=0 setzen und damit einen Kreis zeichnen.
Und dann? Ein Rhomboeder: Zwei Winkel kommen zum Quadrat dazu. Ein Parallelogram: Vererbe ich das jetzt vom Quadrat (zwei Winkel dazu) oder vom Rhomboeder (eine Seite dazu)? Ein Trapez: Eine weitere Seitenlänge kommt dazu. Oder eine Höhe und Winkel. Ein Viereck: Zwei Seiten kommen dazu. Oder zwei Winkel.Niesi hat geschrieben:Genauso beim Rechteck: das Rechteck erbt vom Quadrat die rechten Winkel und die Seitenlänge, eine weitere Seitenlänge kommt dazu.
Und schwubs habe ich um ein einfaches Viereck zu definieren 4 Vererbungsebenen... Dein Ernst?
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.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2825
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Ist die Klassische OOP gescheitert?
Man schießt sich dann mit OOP ins Knie, wenn man ahnungslos drauflosprogrammiert und nicht versteht wie es funktioniert. Aber das ist auch ohne OOP der Fall.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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
- kupferstecher
- Beiträge: 436
- Registriert: Do 17. Nov 2016, 11:52
Re: Ist die Klassische OOP gescheitert?
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 abgleiteten Klassen in veschiedenen Units verteilt sind.
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 abgleiteten Klassen in veschiedenen Units verteilt sind.
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;
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2825
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Ist die Klassische OOP gescheitert?
Das kann in der Tat verwirren. Passiert mir übrigens nicht, da ich fast immer nur Interfaces benutze. Da komme ich dann beim Klick auf die Methode zu gar keiner Implementierung.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.

Tatsächlich sollte das einen Entwickler auch nicht stören. GetValue wird ja nur in einer Schicht aufgerufen, die über der Klasse liegt in der die Methode implementiert wird. In dieser Schichte sollte aber (sofern alles korrekt getrennt wurde) völlig unerheblich sein, wie diese Implementierung aussieht.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 588
- Registriert: Mi 25. Mär 2009, 21:12
- OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
- CPU-Target: mostly 32 bit
Re: Ist die Klassische OOP gescheitert?
Das ist kein Problem der OOP. Sondern ein Problem der IDE. Und ein Problem jedes Quellcode mit mehr als ein paar 1000 Zeilen. (egal welche Sprache/Konzept)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.
Die IDE kennt ja alle Möglichkeiten ("Find Identifier References"). Die IDE könnte die zur Wahl anbieten.
Die IDE könnte sich auch merken, wenn man vorher bereits in einer abgeleiteten Klasse war, und weiter navigiert.
Muss nur jemand implementieren. Freiwillige gesucht.
In der prozeduralen Programmierung gibt es pointer auf Funktionen. Da kann man auch nicht sehen wo das Programm wirklich hin springen wird.
Und bei anderen Programmierkonzepten gibt es auch solche Punkte.
- Niesi
- Lazarusforum e. V.
- Beiträge: 600
- Registriert: So 26. Jun 2016, 19:44
- OS, Lazarus, FPC: Linux Mint Cinnamon, Laz 4.1 Fpc 3.2.3 und allerlei mit FpcUpDeLuxe
- Kontaktdaten:
Re: Ist die Klassische OOP gescheitert?
Gerade diese sehr einfachen Beispiele machen doch sehr eindrucksvoll deutlich, dass nicht die OOP und nicht die Vererbung in der OOP gescheitert sind: gescheitert sind die Leute, die das Konzept nicht richtig verstehen können oder wollen. Und auch noch stolz darauf 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.

Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...