Ich hasse es zu sagen, es kommt darauf an, aber es kommt darauf an.
Wenn Sie jedes einzelne Auto in der Welt modellieren müssen und Methoden haben, auf die Sie zurückgreifen können (wie "Reifen wechseln", was für jedes Modell sehr unterschiedlich ist), dann gehen Sie eine Menge aufgeblähter Klassen zu haben, weil deine reale Welt auch aufgebläht ist.
Wenn Sie nur eine Datenbank mit Bildern von archetypischen Autos haben möchten, und Sie nicht Auto, ob es ein Bild von der Instanz Ihres Nachbarn oder der Instanz Ihrer Schwester ist, dann können Sie die unterste Schicht fallen lassen. "2009 VW CC" könnte durchaus eine Instanz sein, obwohl man sich vorstellen kann, dass es sich auch um eine Klasse in einem anderen Modell handelt.
Alternativ können Sie es vielleicht auch nicht zu einer echten Unterklasse machen. Eine einfache Referenz könnte ausreichen. Zum Beispiel kennt eine Versicherungsgesellschaft eine große Liste von Automodellen und Jahren, aber die Entwickler schreiben nicht jeweils eine Unterklasse. Stattdessen haben sie eine Datenbank von Automodellen, wobei eine Reihe 2009 VW CC darstellen kann. Wenn Sie Ihr Auto versichern, erstellen Sie eine Instanz von "Insured Car" mit einem Verweis auf die Instanz "2009 VW CC".
Dies folgt nicht genau der "Vererbung für eine 'ist-a' Beziehung verwenden", aber die Operationen auf allen Arten von Autos sind identisch - es sind nur die Parameter (zB Versicherungspreis pro Jahr), die sich ändern, und neue Automodelle werden in der Datenbank gespeichert, nicht im Code.
Eine Annahme hier ist, dass Sie die Unterschiede zwischen den Differenzmodellen als bloße Parameter zu den gleichen Methoden am Auto modellieren können.
(Nebenbei: Als das iPhone anfing, über die Websites von Telefongesellschaften verfügbar zu werden, bemerkte ich, dass es ihre Klassenmodelle brach - ihre Websites schienen mit Dutzenden von Marken und Modellen von Telefon auf einer Seite umzugehen - vermutlich mit einem einfachen Datenbank von Telefonen und ihren Funktionen - und brauchte dann eine spezielle Seite, um mit den iPhone-Modellen umzugehen, vermutlich, weil neue spezielle Methoden in ihren Klassen benötigt wurden, um einige Aspekte des iPhone-Verkaufs zu unterstützen.Automatische Verkaufschreibtische würden sagen: Drücken Sie 1, um ein Telefon zu kaufen Drücken Sie 2, um ein iPhone zu kaufen. ")
Ich beabsichtige nicht, jede Instanz eines Autos (oder irgendeines anderen Produkts) zu modellieren, aber ich möchte einen Weg bereitstellen, dies in meiner Anwendung zu tun. Zum Beispiel, wenn ein Produkt in einer limitierten Auflage veröffentlicht wird oder ausreichend einzigartig/angepasst ist. –
Dann ist vielleicht ein hybrides Modell angebracht. Standard_Car erbt von Car und hat einen Verweis auf eine Datenbank verschiedener Modelle, die es unterstützt. Custom_Car erbt von Car und hat selbst Unterklassen für jeden Autotyp, die beide unterschiedlich genug und wichtig genug sind, um den teuren Schritt der Modellierung im Code zu durchlaufen. Das Auto Ihres Nachbarn kann abhängig von seiner Neuheit eine Instanz von Standard_Car oder eine der benutzerdefinierten Unterklassen von Auto sein. – Oddthinking