Ist die Klassische OOP gescheitert?

Für Dinge zum Forum, Kritik, Verbesserungsvorschläge, Umfragen und ähnliches.
Antworten
Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2261
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 »

pluto hat geschrieben:
Beim Debuggen springt man in die richtige Methode. Das erfolgt nämlich zur Laufzeit.

Wenn der Debugger richtig Funktioniert. Ich habe ihn abgeschaltet, da ich damit mehr Probleme hatte, als ein Praktischen nutzen.

Mit anderem Worten (ist nicht böse gemeint): Du kommst mit einem wichtigen Hilfsmittel nicht klar und schaltest es ab. Jetzt könnte ja dein Beitrag kommen: Ist der Debugger gescheitert?
Warum versuchst du nicht das Problem mit dem Verständnis zu lösen, anstatt das Problem zu umschiffen?
Kann es sein, dass deine Schwierigkeiten mit der Vererbung auf dem gleichen Problem beruhen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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

Mit anderem Worten (ist nicht böse gemeint): Du kommst mit einem wichtigen Hilfsmittel nicht klar und schaltest es ab. Jetzt könnte ja dein Beitrag kommen: Ist der Debugger gescheitert?

Nein, ich nutzte dieses Tool einfach nicht. Jedenfalls wenn, dann sehr selten. So, wichtig finde ich dieses Hilfsmittel überhaupt nicht. mit Writeln an den richtigen stellen komme ich sehr schnell zum Ziel. So habe ich schon fast jedes Problem finden und lösen können. Sogar Probleme, die scheinbar zufällig zwischendurch auftreten.

Warum versuchst du nicht das Problem mit dem Verständnis zu lösen, anstatt das Problem zu umschiffen?
Kann es sein, dass deine Schwierigkeiten mit der Vererbung auf dem gleichen Problem beruhen?

Warum denkt ihr alle, dass ich ein Problem mit der Vererbung habe bzw. mit der OOP(so wie ihr es immer schreibt)? Nur weil ich mit dem Thema angefangen habe? Nur weil ich ein Thema zur Diskussion anfange, heißt das nicht unbedingt das ich damit ein Problem habe. Wenn ich damit ein Problem hätte, würde ich es auch als Problem Kennzeichnen und eine oder mehrer frage dazu stellen.

Ich gebe ja zu, dass ich den Titel hätte anders wählen müssen.
Es war ja nicht mal meine "Meinung", dazu fällt mir auch wieder ein Passenden Zitat von StarTrek ein(Zum Thema Zeitreisen, mal sehen ob jemand errät, welche StarTrek Serie ich meine, eine die nicht zu bekannt ist, aufjedenfall). Ich habe davon ja nur gehört. und finden tue ich zum Thema im Internet bisher auch nicht viel.

Ich selbst finde die OOP Praktisch, aber alles hat zwei Seiten. Somit gibt es natürlich auch eine "Unpraktische" Seite. Alle Beispiele die ich bisher liefere, dazu meinst du, dass sind keine geeigneten Beispielen. Hier geht es mir um das Grundprinzip der Vererbung. Bei der Vererbung geht es darum, Gemeinsamkeiten zu finden und in einzelne Klassen zu Kapseln und von den dann wieder abzuleiten. Das geht aber nicht IMMER, wie wir ja an Hand verschiedener Beispiele bereits festgestellt haben.

Ich habe vorhin gelesen, bei Java kann man z.b. verbieten, dass von der Klasse abgeleitet werden kann und man kann verbieten das eine Methode überschrieben werden kann.
Dazu fallen mir bisher keine Anwendungsmöglichkeiten ein. Warum ich das, haben möchte.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7092
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 eben diese Seite gefunden:
https://www.philipphauer.de/study/se/de ... orator.php

Decorator Pattern, wurde ja schon auf einem Lazarus Forum treffen vorgestellt und ich habe mir auch noch mal die Präsentation angeschaut zum Thema.
Ich finde das ist eine gute Alternative zum Vererben, wenn sie sich Anwenden lässt.
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:Ich habe eben diese Seite gefunden:
https://www.philipphauer.de/study/se/de ... orator.php

Decorator Pattern, wurde ja schon auf einem Lazarus Forum treffen vorgestellt und ich habe mir auch noch mal die Präsentation angeschaut zum Thema.
Ich finde das ist eine gute Alternative zum Vererben, wenn sie sich Anwenden lässt.


Vorstellen kann ich mir zur Lösung eines solchen Problems eine Klasse, die zum BEISPIEL über eine ObjectList verfügt und dort die verlangten "Gerichte" miteinander zur Laufzeit kombiniert und deren Bestellung, Zubereitung, Auslieferung und Bezahlung dann abarbeitet. Es können dann nicht nur Basisgericht und Beilage kombiniert werden, sondern beliebig viele Beilagen, Nachspeisen, Getränke usw., was es so gibt.

Da möchte ich mir jetzt kein Beispiel schreiben, dann müsste ich meine eigenen Sachen liegenlassen ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Vorstellen kann ich mir zur Lösung eines solchen Problems eine Klasse, die zum BEISPIEL über eine ObjectList verfügt und dort die verlangten "Gerichte" miteinander zur Laufzeit kombiniert und deren Bestellung, Zubereitung, Auslieferung und Bezahlung dann abarbeitet. Es können dann nicht nur Basisgericht und Beilage kombiniert werden, sondern beliebig viele Beilagen, Nachspeisen, Getränke usw., was es so gibt.

Richtig. Dieses Beispiel dort, habe ich auch schon in anderen Varianten gesehen, ich frage mich, warum die "Leute" gleich wieder übertreiben?

Ich finde, ein Gericht kann doch durchaus aus mehreren Komponenten bestehen z.b.
- Welche Gemüse Sorten?
- Soßen?
- Fleisch/Fisch/Wurst?

es könnte eine Klasse "Kartoffel" geben und weitere Klassen "Tomaten" und soweiter. So kann man schnell weitere Möglichkeiten hinzufügen.

Diese Klassen werden dann in einer Liste gespeichert und zu einem Gericht Kombiniert. Wobei, diese "Grundklassen" wie Kartoffel oder Tomaten erben von der Klasse Lebensmittel z.b. ab. Diese könnte Eigenschaften wie: Preis? Herkunft? Wo gekauft? und soweiter haben, menge? Somit kann man sehr schnell und bequem auch ein Preis ermitteln. Wenn in der "Gericht" Klasse z.b. der gesamt Preis abgefragt werden soll, können die einzelnen Preise relativ leicht umgerechnet werden.

vielleicht mache ich dazu mal schnell ein Beispiel Projekt...
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:
Vorstellen kann ich mir zur Lösung eines solchen Problems eine Klasse, die zum BEISPIEL über eine ObjectList verfügt und dort die verlangten "Gerichte" miteinander zur Laufzeit kombiniert und deren Bestellung, Zubereitung, Auslieferung und Bezahlung dann abarbeitet. Es können dann nicht nur Basisgericht und Beilage kombiniert werden, sondern beliebig viele Beilagen, Nachspeisen, Getränke usw., was es so gibt.

Richtig. Dieses Beispiel dort, habe ich auch schon in anderen Varianten gesehen, ich frage mich, warum die "Leute" gleich wieder übertreiben?

Ich finde, ein Gericht kann doch durchaus aus mehreren Komponenten bestehen z.b.
- Welche Gemüse Sorten?
- Soßen?
- Fleisch/Fisch/Wurst?

es könnte eine Klasse "Kartoffel" geben und weitere Klassen "Tomaten" und soweiter. So kann man schnell weitere Möglichkeiten hinzufügen.

Diese Klassen werden dann in einer Liste gespeichert und zu einem Gericht Kombiniert. Wobei, diese "Grundklassen" wie Kartoffel oder Tomaten erben von der Klasse Lebensmittel z.b. ab. Diese könnte Eigenschaften wie: Preis? Herkunft? Wo gekauft? und soweiter haben, menge? Somit kann man sehr schnell und bequem auch ein Preis ermitteln. Wenn in der "Gericht" Klasse z.b. der gesamt Preis abgefragt werden soll, können die einzelnen Preise relativ leicht umgerechnet werden.

vielleicht mache ich dazu mal schnell ein Beispiel Projekt...


Exakt so sehe ich das auch. Eigentlich ein sehr gutes Beispiel dafür, dass OOP mit Vererbung großartig sein kann ... 8)
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Exakt so sehe ich das auch. Eigentlich ein sehr gutes Beispiel dafür, dass OOP mit Vererbung großartig sein kann ...

Mir geht es gar nicht darum, für oder gegen ein Konzept zu sein, mir geht es vorallen darum, Gründe zu kennen, warum dies so gemacht wird und nicht anders.

Für mich sieht es fast so aus, dass es für die meisten nur 0 und 1 gibt. Man dafür sein oder da gegen und was ist mit dazwischen?
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2261
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 »

pluto hat geschrieben:Bei der Vererbung geht es darum, Gemeinsamkeiten zu finden und in einzelne Klassen zu Kapseln und von den dann wieder abzuleiten.

Nein, darum geht es bei der Vererbung nicht. Und deswegen weiß ich: du hast das Prinzip nicht verstanden und hast deshalb Probleme damit.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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

Nein, darum geht es bei der Vererbung nicht. Und deswegen weiß ich: du hast das Prinzip nicht verstanden und hast deshalb Probleme damit.

Ach, dass wäre mir jetzt neu, dass es genau darum nicht geht. In vielen Tutorials lese ich das aber genau so. Das es darum geht Gemeinsamkeiten zu finden und daraus dann eine Klasse zu erstellen um diesen Code nur einmal zu erstellen.

Um was geht es denn bei der Vererbung deiner Meinung nach?
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2261
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 »

Dann liest du das falsch heraus oder die falschen Tutorials. Bei der Vererbung geht es um die Spezialisierung einer Klasse (Vererbung nach unten) oder Generalisierung (nach oben gesehen).
Allein die Tatsache, dass sich zwei Klassen ähneln oder gleiche Eigenschaften besitzen, macht sie noch nicht zu Verwandten.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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

Dann liest du das falsch heraus oder die falschen Tutorials. Bei der Vererbung geht es um die Spezialisierung einer Klasse (Vererbung nach unten) oder Generalisierung (nach oben gesehen).
Allein die Tatsache, dass sich zwei Klassen ähneln oder gleiche Eigenschaften besitzen, macht sie noch nicht zu Verwandten.

Das ist Richtig. Aber wenn ich jetzt Vererbe, habe ich "Verwandte".

Nehmen wir als Beispiel eine GUI. Wir erstellen eine Basis Klasse:
TPLComponent
- Name

TPLVisuallComponent(TPLComponent)
- Left und Top
- Widht und Height
- Visibley
- Weitere Eigenschaften

TPLLabel(TPLVisuallComponent)
- Caption
...

Alle zwei Klassen sind Kompatibel zu TPLComponent. TPLVisuallComponent kümmert sich jetzt um Sichtbare Komponenten. Alle Sichtbaren Komponenten haben nun Gemeinsam, dass
sie eine Position auf der Zeichen Fläche haben, sie haben auch eine Größe und sie können Sichtbar sein oder "Unsichtbar" und natürlich gibt es zahlreiche weitere Eigenschaften.

Also habe ich hier nach Gemeinsamkeiten gesucht und sie in einer Basis Klasse gepackt. Die Basis Klasse nennt sich TPLVisuallComponent.
das TPLLabel erbt nun von TPLVisuallComponent und ist somit eine Sichtbare "Komponente".

An welcher stelle habe ich nun die Vererbung nicht Verstanden?

Ich kenne vielleicht nicht alle Aspekte und kann auch nicht mit vielen Fachbegriffe um mich werfen, aber ich kann die Vererbung Anwenden und verstehe sie Grundlegend.

Ich kann dir auch noch eine reihe andere Beispiel zeigen, wo es deutlich wird, dass ein Wichtiger Aspekt der Vererbung dadrin besteht, Gemeinsamkeiten zu finden und in einzelne Klassen zu packen. Es gibt hierbei natürlich noch mehr Aspekte. Die Sichtbarkeit der einzelne "Felder" habe ich hier nicht beachtet. Genauso wenig wie Events.
MFG
Michael Springwald

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2261
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 »

pluto hat geschrieben:Ich kann dir auch noch eine reihe andere Beispiel zeigen, wo es deutlich wird, dass ein Wichtiger Aspekt der Vererbung dadrin besteht, Gemeinsamkeiten zu finden und in einzelne Klassen zu packen.

Nein besteht es nicht. Dein Beispiel zeigt eine Spezialisierung, da passt es. Aber Gemeinsamkeiten reichen nicht aus.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

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

Nein besteht es nicht. Dein Beispiel zeigt eine Spezialisierung, da passt es. Aber Gemeinsamkeiten reichen nicht aus.

Kannst du hier Beispiele nennen? Wo es noch bei der Vererbung geht? Ein Wichtiger Punkt ist nun mal Gemeinsamkeiten zu finden.
Daraus wird dann ein Klassen Baum erstellt. Innerhalb des Baumes sind die Klassen Kompatibel zueinander.

Jetzt geht es vielleicht noch darum, die Sichtbarkeit der Felder/Methoden zu Regeln. Dabei meine ich natürlich auch, dass Methoden überschrieben werden können.
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:
Nein besteht es nicht. Dein Beispiel zeigt eine Spezialisierung, da passt es. Aber Gemeinsamkeiten reichen nicht aus.

Kannst du hier Beispiele nennen? Wo es noch bei der Vererbung geht? Ein Wichtiger Punkt ist nun mal Gemeinsamkeiten zu finden.
Daraus wird dann ein Klassen Baum erstellt. Innerhalb des Baumes sind die Klassen Kompatibel zueinander.

Jetzt geht es vielleicht noch darum, die Sichtbarkeit der Felder/Methoden zu Regeln. Dabei meine ich natürlich auch, dass Methoden überschrieben werden können.



Wozu willst Du das erzwingen? Es geht bei der Vererbung darum, sinnvoll Eigenschaften und Methoden von der Klasse zu übernehmen, von der abgeleitet wird. Niemand muss zwanghaft Gemeinsamkeiten suchen und daraus dann Klassen konstruieren - da wäre das Beispiel Kreis und Ellipse wieder gut, aber da habe ich wegen der ganzen Klugscheißerei jetzt echt keinen Bock mehr drauf.

Wenn ich zum Beispiel ein Programm schreibe, welches Zahnräder aus Stahl und aus Kunststoff berechnen können soll, dann werde ich unter Umständen für beide jeweils eine eigene Basisklasse kreieren. Denn zwar sehen sie geometrisch gleich aus, aber die Berechnung, Herstellung und das Material sind so anders, dass eine gemeinsame Basisklasse eventuell nicht schlau wäre. (Mir fällt gerade kein besseres BEISPIEL (<- ACHTUNG, dies ist lediglich ein BEISPIEL) besseres ein, Sorry).

Die Betonung beim Vererben liegt darauf, dass es SINNVOLL sein muss. Es gibt keine Gesetze, keine Regeln, keine zehn Vererbungsgebote in Tontafeln, die in irgendeiner Form vorschreiben, was ich wovon ableite ...
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Wozu willst Du das erzwingen? Es geht bei der Vererbung darum, sinnvoll Eigenschaften und Methoden von der Klasse zu übernehmen, von der abgeleitet wird. Niemand muss zwanghaft Gemeinsamkeiten suchen und daraus dann Klassen konstruieren - da wäre das Beispiel Kreis und Ellipse wieder gut, aber da habe ich wegen der ganzen Klugscheißerei jetzt echt keinen Bock mehr drauf.

Ich habe auf diesen Ton kein Bock mehr. Unterlass diesen Ton einfach.

Ihr könnt es nenne wie ihr wollt: Gemeinsamkeiten suchen, oder Sinnvolle Eigenschaften und Methoden suchen, wo ist da der Unterschied?
Klar geht es bei der Vererbung darum, Sachen von einer anderen Klasse zu übernehmen, davon spreche ich doch die ganze Zeit.

Wenn ich zum Beispiel ein Programm schreibe, welches Zahnräder aus Stahl und aus Kunststoff berechnen können soll, dann werde ich unter Umständen für beide jeweils eine eigene Basisklasse kreieren. Denn zwar sehen sie geometrisch gleich aus, aber die Berechnung, Herstellung und das Material sind so anders, dass eine gemeinsame Basisklasse eventuell nicht schlau wäre. (Mir fällt gerade kein besseres BEISPIEL (<- ACHTUNG, dies ist lediglich ein BEISPIEL) besseres ein, Sorry).

Du kannst, jedoch die Methoden zu Berechnung jedoch überschreiben und die Berechnungen anpassen. Wo ist das Problem?

Die Betonung beim Vererben liegt darauf, dass es SINNVOLL sein muss. Es gibt keine Gesetze, keine Regeln, keine zehn Vererbungsgebote in Tontafeln, die in irgendeiner Form vorschreiben, was ich wovon ableite ...

Klar, gibt es dabei Regeln bzw. Empfehlungen. Es gibt ein Grund Konzept. Klar kann ich es machen wie ich möchte, nur dann ist das kein guter Code.
MFG
Michael Springwald

Antworten