Ich bin ein relativer Neuling, der in OOP-Begriffen denkt, und habe meinen 'Bauchgefühl' noch nicht gefunden, was den richtigen Weg betrifft. Als eine Übung versuche ich herauszufinden, wo Sie die Linie zwischen verschiedenen Arten von Objekten erstellen würden, indem ich die Getränke auf meinem Schreibtisch als Beispiel benutze.OOP. Objekte auswählen
Angenommen, ich erstelle ein Objekt Drink
, die in Attribute wie volume
und temperature
und Methoden wie pour()
und drink()
, ich bin zu kämpfen, um zu sehen, wo bestimmte Getränke ‚Typen‘ kommen muss.
Sagen, ich habe einen Drink Typen von Tea
, Coffee
oder Juice
, mein erster Instinkt ist die Unterklasse Drink
, da sie Attribute und Methoden gemeinsam haben.
Das Problem wird dann sowohl Tea
und Coffee
Attribute haben wie sugars
und milk
, aber Juice
nicht, während alle drei haben eine variant
(Earl Grey, decaff und orange beziehungsweise).
ähnlich Tea
und Coffee
haben ein addSugar()
Verfahren, während die keinen Sinn für ein Juice
Objekt machen.
Also bedeutet das, dass die Super-Klasse diese Attribute und Methoden haben sollte, auch wenn sie nicht alle Unterklassen benötigen, oder definiere ich sie in den Unterklassen, speziell für Attribute wie variant
, wo Jede Unterklasse hat ihre eigene Liste gültiger Werte?
Aber dann am Ende mit zwei addSugar()
Methoden, auf den Tea
und Coffee
Unterklassen.
Oder vorausgesetzt, dass ich dann am Ende alle Attribute und Methoden auf die Super-Klasse setzen, wie die meisten von mindestens ein paar der Getränke-Typen geteilt werden, frage ich mich, was war der Sinn in Sub-Classing überhaupt?
Ich befürchte, ich versuche nur zu viel zu abstrahieren, aber ich möchte mich nicht in einer Ecke zurückhalten, wenn ich einen neuen Typ hinzufügen möchte, wie Water
-mit variant
still oder glitzernd-die Straße hinunter.
Keine direkte Antwort auf Ihre Frage, aber ich fand es hilfreich: abgesehen von OOP Bücher und Quellen, suchen Sie nach * Refactoring * Material auch (z. B. M. Fowler Refactoring).Sie können konkrete Beispiele für Codesmells und entsprechende Aktionen finden, um sie zu beheben. Einige Beispiele ("Bedingtes Ersetzen durch Polymorphie", "Generalisierungstyp" usw.) zeigen Ihnen einige einfache Best Practices in OOP und können helfen, das Problem im Entwurf in der frühen Phase zu erkennen. – Groo