Dafür gibt es ja schon die class helper
Dafür sind die da? Das man Klassen Methoden hinzufügen kann? Ah, gut zu wissen. Dann hätten sie ja doch einen Sinn...
Dafür gibt es ja schon die class helper
pluto hat geschrieben:Das ist der Punkt. Es werden Methoden und Eigenschaften Vererbt, die vielleicht NIE genutzt werden.
pluto hat geschrieben:pluto hat geschrieben:Das ist der Punkt. Es werden Methoden und Eigenschaften Vererbt, die vielleicht NIE genutzt werden.m.fuchs hat geschrieben:1.) Warum ist das schlimm?
Nun, damit ist das nicht mehr OOP Konform(so wie ich es verstanden habe), sonst ist das natürlich kein Problem, wenn man es nicht als Problem ansieht.
pluto hat geschrieben:m.fuchs hat geschrieben:2.) Wenn du das nicht möchtest: leite halt nicht ab und schreib selbst.
Gute Idee. In Objekt Pascal gibt es bisher kaum eine Möglichkeit nicht von einer Klasse abzuleiten um die OOP nutzen zu können.
pluto hat geschrieben:Schau dir mal den Klassenbaum von der LCL an. Lazarus kann das ja inzwischen Visualisieren.
- Wie viele Schichten gibt es?
- Wie viele Klassen gibt es?
Die Fragen sind natürlich nur Rhetorisch gemeint.
pluto hat geschrieben:Ich mache noch mal ein Beispiel, warum die Vererbung nicht Sinnvoll ist: Ich würde gerne die Klasse "TLSocket" von LNet erweitern um ein Beliebiges Feld. Sagen wir "Data". Data soll nun von TObject sein. Nun könnte ich einfach von TLSocket ableiten und ein Feld Data hinzufügen, kein Problem.
Bisher konnte ich noch nicht herausfinden, welche Methode ich von LNET anpassen muss, damit meine abgeleitete Klasse erstellt wird und eben nicht TLSocket.
pluto hat geschrieben:Bisher habe ich aber noch keine Beispiele gesehen, warum die Vererbung Sinnvoll ist. Wie gesagt: Ich kenne die Vererbung und nutze sie.
pluto hat geschrieben:Wenn du das als Problem siehst, bitte: Wenn ein Projekt aus sehr vielen Klassen besteht, wie behält man da die Übersicht?
pluto hat geschrieben:Außerdem sehe ich bei der Vererbung auch, dass Problem, dass man Datentypen von einem Feld nicht ändern kann. Z.B. das Feld Value, könnte in KlasseA ein Integer sein und in KlasseB ein String. Sowas würde nur über Variant gehen oder über ein passenden Klassen Modell, welches aber etwas übertrieben wäre.
pluto hat geschrieben:Die Sichtbarkeit von einer z.b. Methode kann nur in einer Richtung beeinflusst werden.
pluto hat geschrieben:Selten gibt es mehrfach Vererbung, wenn man sie braucht, heißt es: Schlechte Klassenstruktur.
pluto hat geschrieben:Wir verwenden immer noch die Grundstruktur, aber sie wurde angepasst. An neue Erkenntnisse.
pluto hat geschrieben:Versteht mich bitte nicht Falsch, ich möchte euch nicht von meinen Ansichten um jeden Preis überzeugen, aber ich möchte auch nicht das das als Blödsinn oder Quatsch abgetan wird.
Jeder soll das glauben was er möchte, Programmier Sprachen sind zwar keine Religionen, aber es gibt Religionsfreiheit(soweit ich weiß)
Verstehe ich nicht. Wieso vererbst Du dann? Es zwingt Dich doch niemand ...
Es gibt da dieses Beispiel mit dem Kreis und der Ellipse - mit der blödsinnigen Begründung, ein Kreis müsse von der Ellipse erben weil er auch eine sei.
Ein Kreis ist dadurch definiert, dass alle Punkte denselben Abstand zum Mittelpunkt haben. Also ist er schon mal keine Ellipse. Beides sind Grafikobjekte, können also von der tGrafikclass abgeleitet werden. Du KANNST den Kreis von einer Ellipse erben lassen - das ist dann ziemlich blöd von Dir.
Nein, das hast du falsch verstanden. In OOP gibt es keine Forderung dass nur genutzter Code existieren soll. Das wäre eine Forderung des Clean Code. Gilt aber auch dort nur für selbst geschriebenen Code und nicht für genutzte Bibliotheken.
Es geht im Bereich der Klassen sogar gar nicht. Minimum ist alles von TObject abgeleitet. Das ist aber nicht schlimm, denn das enthält den für die Verwaltung von Klassen und Objekten notwendigen Code. Den brauchst du also immer.
Betrachte eine Ableitung von TObject als nicht verschwendeten Code.
Die Frage hat auch nicht viel mit dem Thema zu tun. Das ist als wenn ich sage, dass Betriebssysteme alle schlecht sind weil WIndows so kacke ist.
Du kannst doch nicht eine riesige Klassenbibliothek die sich erstens an einer anderen Bibliothek orientieren muss und zweitens auch noch eine Reihe von Betriebssystemen und GUI abdecken muss als Beispiel für das Scheitern eines Programmierparadigmas daher nehmen.
Und wieder machst du dein Scheitern bei der Nutzung einer Bibliothek (verursacht durch fehlendes Verständnis dieser Bibliothek?) zu einem generellen OOP-Problem. Ist da wirklich OOP daran schuld? Wohl eher nicht.
Ich glaube beide Sätze widersprechen sich ein bisschen.
Das regelt die Architektur. Ist übrigens völlig egal ob OOP oder was anderes. Je größer eine Projekt, desto eher der Verlust der Kontrolle darüber.
Ich sehe an Autos das Problem, dass sie keine Fahrräder sind. Dabei sind doch beides einfach nur Verkehrsmittel.
DU schreibst weiter oben, dass du leicht den Überblick verlierst. Und dann forderst du Mehrfachvererbung und (an anderer Stelle) zirkuläre Units? Damit wird es doch noch unübersichtlicher.
Du sollst auch gerne daran glauben und niemand wird dich zwingen OOP mit Freepascal zu nutzen. Oder dass du bei dieser Sprache bleiben musst. Alternativen sind ja da.
Und wenn du damit besser klar kommst ist das doch wunderbar. Das ist nämlich auch ein Auswahlkriterium für Sprachen/Paradigmen. Derjenige der damit arbeitet muss sich damit auch wohlfühlen.
Aber trotzdem werde ich weiterhin antworten und die Probleme in der Argumentation gegen OOP benennen. Das macht eine Diskussion ja aus.
pluto hat geschrieben:Verstehe ich nicht. Wieso vererbst Du dann? Es zwingt Dich doch niemand ...
Doch, wenn sie in der Klasse, von der ich Erbe vorhanden sind. Erbe ich sie, ob ich will oder nicht will...Es gibt da dieses Beispiel mit dem Kreis und der Ellipse - mit der blödsinnigen Begründung, ein Kreis müsse von der Ellipse erben weil er auch eine sei.
So blöd ist es nicht, beides ist nun mal Rund.Ein Kreis ist dadurch definiert, dass alle Punkte denselben Abstand zum Mittelpunkt haben. Also ist er schon mal keine Ellipse. Beides sind Grafikobjekte, können also von der tGrafikclass abgeleitet werden. Du KANNST den Kreis von einer Ellipse erben lassen - das ist dann ziemlich blöd von Dir.
Vielleicht. Genau das ist das Problem dabei... Das gleiche mit dem Quadrat und dem Rechteck.
Beides hat ecken, also muss es eine Gemeinsame klasse geben.
Niesi hat geschrieben:eine Ellipse zeichnet sich dadurch aus, dass NICHT alle Punkte denselben Abstand zum Mittelpunkt haben. Sie ist auch nicht rund, sie ist oval. Das Problem ist, dass nicht logisch und präzise an die Sachen rangegangen wird...
Einfach zu behaupten, die OOP sei wegen der Vererbung gescheitert, ohne einen einzigen wirklichen Grund zu nennen, halte ich für sehr dünn - sind ein wenig wie die Trauben, an die der Fuchs nicht rankommt.
Woher ich diese Überlegung nehme? Sieh Dir mal Deinen Kommentar zum Kreisbeispiel an: ein Kreis ist dadurch definiert, dass alle Punkte denselben Abstand zum Mittelpunkt haben. Dein Kommentar: "Ein bisschen ist er aber auch Ellipse, beide sind nun mal Rund."
Lieber Michael: eine Ellipse zeichnet sich dadurch aus, dass NICHT alle Punkte denselben Abstand zum Mittelpunkt haben. Sie ist auch nicht rund, sie ist oval. Das Problem ist, dass nicht logisch und präzise an die Sachen rangegangen wird.
Auch beim Quadrat: ein Quadrat hat vier rechte Winkel und vier gleich lange Seiten - wenn eine Geometrie vier rechte Winkel und zwei verschiedene Seitenlängen hat, dann ist es kein Quadrat. Und kein Wesen dieses Universums kann mich dazu zwingen, einen Kreis von einer Ellipse abzuleiten. Genau wie beim Quadrat: niemand MUSS es von einem Rechteck ableiten!
Und hör bitte auf, dauernd beleidigt zu sein: wenn Du diskutieren möchtest, musst Du bereit sein, andere Meinungen zu akzeptieren und allenfalls durch Argumente zu entkräften. Sonst macht das keinen Sinn.
Oder zu logisch. In der Mathematik wird nunmal abgeleitet: Der Kreis ist eine Sonderform der Ellipse, bei der beide Halbachsen gleich lang sind. Oder: Das Quadrat ist eine Sonderform des Rechtecks, bei dem alle Seiten gleich lang sind. Das Rechteck ist eine Sonderform des Parallelogramms, bei dem alle Winkel rechte Winkel sind. Das Parallelogramm ist eine Sonderform des Vierecks, bei dem gegenüberliegende Seiten gleich lang sind. Das Viereck hat vier Seiten und vier Winkel.
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.
pluto hat geschrieben:Das regelt die Architektur. Ist übrigens völlig egal ob OOP oder was anderes. Je größer eine Projekt, desto eher der Verlust der Kontrolle darüber.
Ah und dann kommt da wohl noch die Dokumention hinzu und UML Diagramme und der gleichen...
Das gehört alles zur Architektur. Ich vermute, dass so gut wie alle Probleme auf die du gestoßen bist eben nicht mit Nachteilen von OOP zusammenhängen, sondern mit einem Strukturproblem deiner Architektur.
Aber du kannst ja gerne noch deinen neuen Thread aufmachen, vielleicht mit einem konkreten Beispiel, dann kann man das eventuell etwas einfacher aufdröseln.
Aber du kannst ja gerne noch deinen neuen Thread aufmachen, vielleicht mit einem konkreten Beispiel, dann kann man das eventuell etwas einfacher aufdröseln.
Ich überlege es mir, in Anbetracht, wie sich dieser Thread Entwickelt hat... Als Beispiel würde ich das mit dem "Kreis" und dem "Quadrat" nehmen.
Ich denke, das Problem ist, dass die OOP Verfechter versuchen alles in OOP zu pressen.
Ich hab mal ein Terminal mit Qt5 und Qt Creator unter C++ umgesetzt. Da musste man für jeden Mist Slots und Verbindungen erzeugen, selbst wenn dann nur ein Widget verwendet wurde um den Status der RS232 Leitungen anzuzeigen. Das ganze prozedural unter PureBasic war deutlich entspannter. Das ganze halb OOP unter Pascal - mit Widgets in OOP, der RS232 prozedural - war auch deutlich entspannter.
Man sollte einfach nicht alles auf Krampf in OOP pressen.
pluto hat geschrieben:Um mal ein Zitat von StarGate zu bringen: Wir können auf diese Eben nicht mehr Denken(welche Folge?),
Thor: "Die Asgard haben versucht, sie aufzuhalten. Ihr habt uns klar gemacht, dass ihre Schwäche durch eine weniger hoch entwickelte Methode entdeckt wurde. Wir können auf dieser Ebene nicht mehr denken."
Folge: Nemesis Teil 2
Thor: "Die Asgard haben versucht, sie aufzuhalten. Ihr habt uns klar gemacht, dass ihre Schwäche durch eine weniger hoch entwickelte Methode entdeckt wurde. Wir können auf dieser Ebene nicht mehr denken."