Auf was sollte ich achten wenn ich mit mehreren Klassen arbeite?



  • Hi, ich wollte euch fragen, auf was sollte ich achten, wenn man mit vielen Klassen arbeite?



  • Trollantwort:
    Dass alle Klassen unterschiedliche Namen haben.

    Ernstgemeinte Antwort:
    Die Frage ist so vage formuliert, dass man hier darauf nicht sinnvoll antworten kann. Zu Objektorientiertem Design gibt des etliche Bücher, die sich auf mehreren hundert Seiten damit beschäftigen.
    Aber als Daumenregel kann man das hier annehmen:
    Wenn du etwas benennen kannst und das Benannte mit bestimmten Eigeschaften verbindest, dann kann man daraus eine Klasse machen. Oft stellt man dabei fest, dass Klassen (oder besser Objekte) aus mehreren anderen Objekten zusammengesetzt sind. Jedes Objekt sollte also nur die Eigenschaften besitzen, die wirklich nur diesem Objekt zugeordnet sind.



  • Eine wichtige Regel:
    Jede Klasse sollte genau einen Job/ein Thema haben. Dieser Job kann sein ein paar Vorgänge hintereinander auszuführen bzw. zusammenzuknoten. Das ist OK. Nur dann sollten diese Vorgänge selbst nicht auch in der "zusammenzuknoten"-Klasse implementiert sein.

    Beispiel: Für ein "find in files" Tool musst du

    • Die Liste der Files ermitteln in denen gesucht werden soll
    • Diese Files Lesen
    • In den gelesenen Daten suchen

    Das könnte man in 3 Klassen aufteilen. Und dann entweder eine freie Funktion oder eine 4. Klasse machen die alles zusammenknotet.



  • Nur ein zusätzlicher Gedanke; ein tragendes Element in der objektorientierten Programmierung ist die Vererbung. Man sollte u.a. darauf achten zu unterscheiden, dass es zur "Vererbung" auch die "Aggregation" gibt, also nicht alles sollte "vererbt" werden.
    Z.B. kann ein "Maurer" und ein "Elektriker" von einem "Menschen" abgeleitet sein. Ist aber nicht sinnvoll, da das nur Eigenschaften sind. Diese können zwar auch in Klassen abgebildet werden, sollten dann aber über "Aggregation" mit der angedachten Klasse "Mensch" verbunden werden. Denn Menschen können "Maurer" UND "Elektriker" sein. Kurz, "ist ein …" bedeutet nicht immer "Ableitung" in Unterklassen.



  • @Helmut-Jakoby sagte in Auf was sollte ich achten wenn ich mit mehreren Klassen arbeite?:

    Nur ein zusätzlicher Gedanke; ein tragendes Element in der objektorientierten Programmierung ist die Vererbung. Man sollte u.a. darauf achten zu unterscheiden, dass es zur "Vererbung" auch die "Aggregation" gibt, also nicht alles sollte "vererbt" werden.
    Z.B. kann ein "Maurer" und ein "Elektriker" von einem "Menschen" abgeleitet sein. Ist aber nicht sinnvoll, da das nur Eigenschaften sind. Diese können zwar auch in Klassen abgebildet werden, sollten dann aber über "Aggregation" mit der angedachten Klasse "Mensch" verbunden werden. Denn Menschen können "Maurer" UND "Elektriker" sein. Kurz, "ist ein …" bedeutet nicht immer "Ableitung" in Unterklassen.

    Äääääääh, wie bidde?
    Das sind Sachen, die würde ich auch nicht über Aggregation, sondern über Mehrfachvererbung abbilden. Menschen "bestehen" nicht aus Maurern oder Elektrikern, da finde ich Vererbung schon ganz passend.



  • @DocShoe sagte in Auf was sollte ich achten wenn ich mit mehreren Klassen arbeite?:

    Das sind Sachen, die würde ich auch nicht über Aggregation, sondern über Mehrfachvererbung abbilden.

    Mehrfachvererbung ist die Wurzel allen übels. Ok, nicht ganz so schlimm. Aber ich finde sowas verwirrend.

    Außerdem: ein Mensch kann im Laufe seines Lebens einen Beruf wie Elektriker oder Maurer erlernen. Jetzt mach 100 Berufe. Und dann musst du in deinem Fall also für alle Kombinationen aller Berufe mehrfachvererbte Klassen erstellen? Das ergibt keinen Sinn. mensch.erlene_maurer() gibt bei dir dann ein neues Objekt zurück von anderer Klasse?



  • @DocShoe Tja, so gehen halt die Meinungen ab und zu auseinander. Ich vermeide halt gerne Mehrfachvererbung. Ich habe auch nicht gemeint, eine Klasse "Maurer" zu etablieren, sondern eher so was wie Tätigkeitsklassen. Und Aggregation ist ggf. zu weit gefasst, besser wäre Assoziation.



  • Na jut, vielleicht ist das Beispiel mit der Mehrfachvererbung hier unpassend, weil "Mensch" kein statischer Typ ist und durchaus mehrere Berufe erlernen kann.
    Man könnte das Erlernen eines Berufs durch das Zuweisen von Fertigkeiten abbilden, damit könnten dann auch Menschen mauern, obwohl sie nie eine Ausbildung als Maurer gemacht haben. Ein Mensch hätte dann eine Liste von Fertigkeiten, die als Komposition implementiert werden könnte.



  • Jetzt haben wir ja alle zusammen; Vererbung, Assoziation, Aggregation und Komposition. Und die Auswahl sollte gut gewählt sein 😉


  • Mod

    Bitte konkrete Problemstellungen oder Diskussionspunkte praesentieren. Siehe hier: https://www.c-plusplus.net/forum/topic/200753/du-brauchst-hilfe

    Wie Du siehst, hast Du eine Vielzahl an Antworten erhalten, die entweder einen schlechten Ersatz zu einem Lehrbuch/Tutorial darstellen, oder gar nicht auf das spezifischere Problem eingehen, dem Du dich ausgesetzt siehst.

    Deshalb schliesse ich hier mit dem Vermerk, dass Du ggf. einen neuen Thread unter Beachtung der oben erwaehnten Regeln aufmachen kannst.


Log in to reply