Wo zeichnest du die Linie, um Abstraktionen zu stoppen und vernünftigen Code zu schreiben? Es gibt Unmengen von Beispielen für "Unternehmenscode" wie das "FizzBuzz" -Programm mit Dutzend Dateien ... sogar ein einfaches wie ein RTS-Spiel kann etwa so aussehen:
%Vor%etc ... und es kann sich in einen Albtraum verwandeln. Dies kann zu seinem logischen Extrem gezogen werden, ähnlich wie funktionale Programmierung bis zum Äußersten gezogen werden kann, wo Sie eine Sprache mit nur Variablen, Funktionsanwendung und anonymen Funktionsdefinitionen erstellen können (obwohl ich zugeben muss, dass das etwas eleganter ist) ...
Haben Sie einen vernünftigen Rat zu diesem Thema?
Vielleicht sollte diese Frage sein, wo Abstraktion beginnen soll.
Das von Ihnen zitierte Beispiel ist ein klassisches Beispiel dafür, dass zu wenig darüber nachgedacht wird, was die Objekte tatsächlich sind, da sie alle ziemlich gleich sind - und wahrscheinlich besser als ein einzelnes "GameObject" ausgedrückt werden könnten.
Ich vermeide auch die Unterklassierung nach Objekteigenschaften. Für StaticGameObject und DynamicGameObject mag logica erscheinen, aber wahrscheinlich sind sie besser durch Container platziert - dh zwei Listen eine für statische Objekte und eine für dynamische, so dass andere Logik die Aktionen definieren kann und nicht das Objekt selbst für die Steuerung von etwas außerhalb verantwortlich ist Umfang.
Manchmal ist es schwieriger herauszufinden, was von einer Gruppe von Dingen geteilt wird, die Sie in einem Objekt darstellen wollen - aber es lohnt sich.
Ich glaube, dass die Kriterien aus einer klaren Definition der Abstraktion abgeleitet werden können.
Sie beziehen sich auf die Abstraktion innerhalb des objektorientierten Programmierparadigmas, wo Ihnen die drei Prinzipien zur Verfügung stehen: Abstraktion "-" Kapselung '-' Informationen verstecken oder Sichtbarkeit '.
Abstraktion ist der Prozess der Auswahl, welche Attribute des Objekts für Ihr System relevant sind und welche vollständig ignoriert werden müssen.
Das heißt, das Abstraktionslimit betrifft nicht so sehr die Anzahl von Konzepten, die Sie definieren (Spieler, Waffen, Kugeln, ...), sondern was Sie hineinlegen diese Konzepte.
Es ist im Grunde triage , wo Sie nur aus einem Konzept betrachten, was für die Dienste nützlich ist, die Sie definieren müssen.
Also Ein gutes Kriterium, um mit dem Schreiben von normalem Code zu beginnen, könnten die APIs sein , wie das Eclipse-Programm nahelegt: API zuerst .
In der Tat, "Gute APIs erfordern eine Entwurfsiteration", was bedeutet, dass die Liste der Objekte, die Sie in Ihrer Frage erwähnen, verfeinert wird, da die benötigte API selbst verfeinert wird.
Plus, APIs haben wohldefinierte Komponentengrenzen und -abhängigkeiten (wie in "Core-Player - vs. UI - RenderableObject -"), was bedeutet, dass die sehr detaillierte Liste, die Sie erwähnen, nicht als eine lange endlose Liste angesehen werden kann Konzepte, müssen jedoch in einer funktionalen
Funktion Funktionskomponenten klar gruppiert werden.Da APIs existieren, um die Bedürfnisse von Clients zu erfüllen, werden Sie diese Objekte nur behalten, weil sie für den Client sinnvoll sind. Die anderen Objekte sollten in "internen" Paketen sein und niemals direkt von anderen Teilen Ihrer Anwendung weitergeleitet werden.
In Anbetracht dessen machen @phjr-Ratschläge durchaus Sinn;)
Tags und Links language-agnostic oop