Bisher haben wir in dieser Serie die objektorientierte Programmierung im Allgemeinen und das OOP-Prinzip der Kohäsion besprochen. In diesem Artikel betrachten wir das Prinzip von Kupplung und wie es bei der Spieleentwicklung hilft.
Hinweis: Obwohl dieses Tutorial mit Java geschrieben wurde, sollten Sie in der Lage sein, in fast jeder Spieleentwicklungsumgebung dieselben Techniken und Konzepte anzuwenden.
Kopplung ist das Prinzip der "Trennung von Anliegen". Dies bedeutet, dass ein Objekt den Status oder das Verhalten eines anderen Objekts nicht direkt ändert oder ändert.
Kopplung betrachtet die Beziehung zwischen Objekten und wie eng sie miteinander verbunden sind. Ein Beziehungsdiagramm ist eine großartige Möglichkeit, die Verbindungen zwischen Objekten zu visualisieren. In einem solchen Diagramm repräsentieren Kästchen Objekte und Pfeile stellen eine Verbindung zwischen zwei Objekten dar, bei denen ein Objekt ein anderes Objekt direkt beeinflussen kann.
Ein gutes Beispiel für die Kopplung sind HTML und CSS. Vor CSS wurde HTML sowohl für das Markup als auch für die Präsentation verwendet. Dies führte zu aufgeblähtem Code, der schwer zu ändern und zu warten war. Mit dem Aufkommen von CSS wurde HTML nur noch für Markup verwendet und CSS übernahm die Präsentation. Dies machte den Code ziemlich sauber und leicht änderbar. Die Anliegen der Darstellung und des Markups wurden getrennt.
Von Objekten, die unabhängig voneinander sind und die den Zustand anderer Objekte nicht direkt ändern, spricht man von locker verbunden. Durch lose Kopplung kann der Code flexibler, veränderbarer und einfacher zu handhaben sein.
Es wird gesagt, dass Objekte, die auf anderen Objekten basieren und die Zustände anderer Objekte modifizieren können, sein sollen eng verbunden. Durch die enge Kopplung entstehen Situationen, in denen das Ändern des Codes eines Objekts auch das Ändern des Codes anderer Objekte erfordert (auch als Ripple-Effekt bezeichnet). Eng gekoppelter Code ist auch schwieriger wiederzuverwenden, da er nicht getrennt werden kann.
Ein häufiger Satz, den Sie hören, ist "Streben nach niedriger Kopplung und hoher Kohäsion". Dieser Satz ist eine hilfreiche Erinnerung daran, dass wir nach Code suchen sollten, der Aufgaben voneinander trennt und sich nicht stark auf einander stützt. Daher ist eine niedrige (oder lose) Kupplung im Allgemeinen gut, während eine hohe (oder feste) Kupplung im Allgemeinen schlecht ist.
Schauen wir uns zunächst die Objekte von Asteroids an und wie sie miteinander verbunden sind. Denken Sie daran, dass es sich bei den Objekten um ein Schiff, einen Asteroiden, eine fliegende Untertasse und eine Kugel handelt. Wie sind diese Objekte miteinander verbunden oder verbunden??
In Asteroiden kann ein Schiff eine Kugel abfeuern, eine Kugel kann einen Asteroiden und eine fliegende Untertasse treffen, und ein Asteroid und eine fliegende Untertasse können das Schiff treffen. Unser Beziehungsdiagramm sieht dann folgendermaßen aus:
Wie Sie sehen, sind die Objekte alle ziemlich gut miteinander verbunden. Aus diesem Grund müssen wir vorsichtig sein, wie wir den Code schreiben, ansonsten werden wir zu einem eng gekoppelten System führen. Nehmen wir zum Beispiel das Schiff, das eine Kugel abfeuert. Wenn das Schiff ein Geschossobjekt erstellen würde, seine Position im Auge behalten und den Asteroiden ändern sollte, wenn das Geschoss aufschlägt, wäre unser System sehr eng gekoppelt.
Stattdessen sollte das Schiff ein Aufzählungsobjekt erstellen, aber machen Sie sich danach keine Sorgen. Eine andere Klasse würde dafür verantwortlich sein, die Position der Kugel zu verfolgen und was passiert, wenn eine Kugel einen Asteroiden trifft. Mit einer Zwischenklasse zwischen unseren Beziehungen würde das Diagramm wie folgt aussehen:
Dieses Beziehungsdiagramm sieht viel besser aus und erzeugt ein sehr lose gekoppeltes System. Wenn wir in diesem System ein Objekt wie einen Meteor hinzufügen würden, könnten wir dies leicht tun, ohne die Funktionsweise des Schiffs oder der Geschossobjekte ändern zu müssen - wir würden einfach unsere Zwischenklasse für alles sorgen lassen.
Da es in Tetris nur ein Objekt gibt, das Tetrimino, ist die Kopplung kein Problem, da keine Beziehungen zu anderen Objekten bestehen können.
Für Pac-Man kann eine enge Kopplung auftreten, wenn Pac-Man ein Kraftpellet isst. Wenn ein Kraftpellet verzehrt wird, kann Pac-Man Geister essen und der Zustand des Geistes ändert sich in essbar
. Wenn das Pac-Man-Objekt beim Verzehr eines Kraftpellets nachverfolgen und dann den Änderungszustand jedes Geistes einleiten würde, wäre das System eng gekoppelt.
Wieder ist eine andere Klasse erforderlich, um diese Informationen zu verfolgen und zu verarbeiten, damit unsere Objekte lose miteinander verbunden werden können. Nachfolgend ein Beispiel, wie eine zwischengeschaltete Klasse Pac-Man beim Essen eines Kraftpellets aufspüren könnte.
/ ** * Intermediary-Klasse, die Spielereignisse verfolgt * / public class Game … if (Pac-Man.eats (Power_Pellet)) Ghosts.changeState (); …
Kopplung ist das Prinzip der Reduzierung der direkten Auswirkungen von Objekten auf Zustände und Verhalten anderer Objekte. Die Kopplung hilft beim Erstellen von Code, der einfacher zu lesen und zu ändern ist.
Im nächsten Schnelltipp werden wir das Prinzip von besprechen Verkapselung und warum hilft es bei der Erstellung von wartungsfähigem Code. Folgen Sie uns auf Twitter, Facebook oder Google+, um über die neuesten Beiträge auf dem Laufenden zu bleiben.