Design for Change: Kopplung und Zusammenhalt in objektorientierten Systemen

Kopplung und Kohäsion sind zwei häufig missverstandene Begriffe in der Softwareentwicklung. Mit diesen Begriffen wird die qualitative Analyse der Modularität in einem System angegeben. Sie helfen uns, die Entwurfskomplexität objektorientierter Systeme zu identifizieren und zu messen.

Gute Kenntnisse über beide sind jedoch erforderlich, um Systeme zu erstellen, die skalierbar und verwaltbar sind und im Laufe der Zeit erweitert werden können. In diesem Beitrag werde ich beide diskutieren; Ich werde Codebeispiele in meinen zukünftigen Beiträgen zu diesem Thema präsentieren.

Wie unterscheiden sich Kohäsion und Kopplung? Wie hängen Kohäsion und Kopplung von Konzepten mit guten oder schlechten Software-Designs zusammen? Bevor wir uns mit Zusammenhalt und Kopplung befassen und wie sie sich auf Software-Designs auswirken, wollen wir verstehen, was jedes dieser Konzepte ist und welche Typen es hat.

Kupplung

Die Kopplung kann definiert werden als der Grad der gegenseitigen Abhängigkeit zwischen Softwaremodulen und wie eng sie miteinander verbunden sind. Im Wesentlichen zeigt die Kopplung die Stärke der Vernetzung zwischen Softwaremodulen an. Wenn diese Kopplung hoch ist, können wir annehmen, dass die Softwaremodule voneinander abhängig sind, dh sie können ohne die anderen nicht funktionieren. Es gibt verschiedene Dimensionen der Kopplung:

  • Inhaltskopplung - Dies ist eine Art der Kopplung, bei der ein bestimmtes Modul auf den Inhalt eines anderen Moduls zugreifen oder diesen ändern kann. Wenn eine Komponente Parameter zur Steuerung der Aktivität einer anderen Komponente übergibt, besteht im Wesentlichen eine Steuerkopplung zwischen den beiden Komponenten.
  • Gemeinsame Kopplung - Dies ist eine Art der Kopplung, bei der mehrere Module Zugriff auf gemeinsam genutzte globale Daten haben
  • Stempelkopplung - Dies ist eine Art der Kopplung, bei der die Datenstruktur verwendet wird, um Informationen von einer Komponente im System an eine andere zu übergeben
  • Steuerkopplung - Dies ist eine Art der Kopplung, bei der ein Modul den Ausführungsfluss eines anderen Moduls ändern kann
  • Datenkopplung - Bei dieser Art der Kopplung interagieren zwei Module, indem sie Daten als Parameter austauschen oder übergeben

Zusammenhalt

Kohäsion bezeichnet den Grad der Intra-Abhängigkeit zwischen den Elementen eines Softwaremoduls. Mit anderen Worten, Kohäsion ist ein Maß dafür, inwieweit die Verantwortlichkeiten eines einzelnen Moduls oder einer Komponente eine sinnvolle Einheit bilden. Es gibt folgende Arten des Zusammenhalts:

  • Zufälliger Zusammenhalt - Dies ist ein ungeplanter zufälliger Zusammenhalt, der möglicherweise durch das Aufteilen eines Moduls in kleinere Module verursacht wird.
  • Logischer Zusammenhalt - Dies ist eine Art von Zusammenhalt, bei der mehrere logisch zusammenhängende Funktionen oder Datenelemente in derselben Komponente platziert werden
  • Zeitliche Kohäsion - Dies ist eine Art von Kohäsion, bei der Elemente eines Moduls so gruppiert werden, dass sie zum gleichen Zeitpunkt verarbeitet werden. Ein Beispiel könnte eine Komponente sein, mit der eine Reihe von Objekten initialisiert wird.
  • Prozedurale Kohäsion - Dies ist eine Art von Kohäsion, bei der die Funktionen in einer Komponente so gruppiert werden, dass sie nacheinander ausgeführt werden können und prozedural kohäsiv sind
  • Kommunikationskohäsion - Bei dieser Art der Kohäsion werden die Elemente eines Moduls logisch so gruppiert, dass sie nacheinander ausgeführt werden und mit denselben Daten arbeiten
  • Sequentielle Kohäsion - Bei dieser Art der Kohäsion werden die Elemente eines Moduls so gruppiert, dass die Ausgabe eines Moduls zur Eingabe der nächsten wird. Sie werden alle sequentiell ausgeführt. Wenn die Ausgabe eines Teils einer Komponente die Eingabe eines anderen Teils ist, sagen wir im Wesentlichen, dass die Komponente eine sequentielle Kohäsion aufweist.
  • Funktionale Kohäsion - Dies ist die beste und am meisten bevorzugte Art der Kohäsion, bei der der Kohäsionsgrad am höchsten ist. Bei dieser Art der Kohäsion werden die Elemente eines Moduls funktional zu einer logischen Einheit zusammengefasst und arbeiten als logische Einheit zusammen - dies fördert auch die Flexibilität und Wiederverwendbarkeit.

Die besten Praktiken

Eine enge Kupplung erhöht die Wartungskosten, da dies schwierig ist und Änderungen an einer Komponente alle anderen daran angeschlossenen Komponenten betreffen würden. Das Umgestalten von Code wird daher schwierig, da Sie alle anderen Komponenten in der verbundenen Kette umgestalten müssten, damit die Funktionalität nicht beeinträchtigt wird. Dieser Vorgang ist umständlich und erfordert viel Aufwand und Zeit. 

Sie sollten Klassen entwerfen, die weniger Instanzvariablen enthalten, dh Ihr Klassendesign ist "gut", wenn es eine kleine Anzahl von Instanzvariablen enthält. Im Idealfall sollte jede der Methoden in Ihrer Klasse eine oder mehrere dieser Instanzvariablen bearbeiten. Theoretisch ist eine Klasse maximal kohäsiv, wenn jede der Instanzvariablen der Klasse von jeder der Methoden dieser Klasse verwendet oder manipuliert wird. Wenn die Kohäsion in der Klasse hoch ist, sind die Methoden und die Datenelemente der Klasse voneinander abhängig und arbeiten als eine einzige logische Einheit zusammen. In der Realität ist es jedoch nicht möglich, solche Klassen zu entwerfen, oder ich würde eher sagen, es ist nicht ratsam, Klassen zu entwerfen, die maximal zusammenhängend sind.