Ist die Klassische OOP gescheitert?

Für Dinge zum Forum, Kritik, Verbesserungsvorschläge, Umfragen und ähnliches.
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7114
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?

Beitrag von pluto »

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.
MFG
Michael Springwald

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 109
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Windows 10 Lazarus 2.0.6

Re: Ist die Klassische OOP gescheitert?

Beitrag von Niesi »

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 ...

pluto
Lazarusforum e. V.
Beiträge: 7114
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?

Beitrag von pluto »

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?
MFG
Michael Springwald

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 109
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Windows 10 Lazarus 2.0.6

Re: Ist die Klassische OOP gescheitert?

Beitrag von Niesi »

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 ...

pluto
Lazarusforum e. V.
Beiträge: 7114
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?

Beitrag von pluto »

ich habe doch gar nicht geschrieben, dass Du beleidigst.
Ich habe Dich darum gebeten, nicht beleidigt zu sein.

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.
MFG
Michael Springwald

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 109
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Windows 10 Lazarus 2.0.6

Re: Ist die Klassische OOP gescheitert?

Beitrag von Niesi »

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?



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 ...

pluto
Lazarusforum e. V.
Beiträge: 7114
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?

Beitrag von pluto »

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?
MFG
Michael Springwald

wp_xyz
Beiträge: 3308
Registriert: Fr 8. Apr 2011, 09:01

Re: Ist die Klassische OOP gescheitert?

Beitrag von wp_xyz »

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?

Bin kein Mathematiker, aber pluto hat recht: https://de.wikipedia.org/wiki/Ellipse - Bild rechts oben

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2284
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Ist die Klassische OOP gescheitert?

Beitrag von m.fuchs »

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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Timm Thaler
Beiträge: 1087
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?

Beitrag von Timm Thaler »

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.


Weil eine Ellipse eben nicht die Sonderform eines Kreises, sondern ein Kreis die Sonderform einer Ellipse ist.

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.

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 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.

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.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2284
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Ist die Klassische OOP gescheitert?

Beitrag von m.fuchs »

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.

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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

kupferstecher
Beiträge: 273
Registriert: Do 17. Nov 2016, 11:52

Re: Ist die Klassische OOP gescheitert?

Beitrag von kupferstecher »

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.


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;

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2284
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Ist die Klassische OOP gescheitert?

Beitrag von m.fuchs »

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.

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. :)
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

martin_frb
Beiträge: 485
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?

Beitrag von martin_frb »

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.


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)

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.

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 109
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Windows 10 Lazarus 2.0.6

Re: Ist die Klassische OOP gescheitert?

Beitrag von Niesi »

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.


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. :roll:
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

Antworten