673 Stimmen

Unterschied zwischen Kohäsion und Kopplung

Was ist der Unterschied zwischen Kohäsion und Kopplung?

Wie können Kopplung und Kohäsion zu einer guten oder schlechten Softwaregestaltung führen?

Was sind einige Beispiele, die den Unterschied zwischen den beiden und ihre Auswirkungen auf die Gesamtqualität des Codes verdeutlichen?

3 Stimmen

6 Stimmen

Ich möchte auf diesen Artikel hinweisen: S.O.L.I.D. Softwareentwicklung, ein Schritt nach dem anderen. Grz, Kris.

5 Stimmen

Dies ist der neueste Beitrag zu diesem Thema.

34voto

Cătălin Rădoi Punkte 1623

Die beste Erklärung von Kohäsion stammt aus Uncle Bobs Clean Code:

Klassen sollten nur wenige Instanzvariablen haben. Jede Methode einer Klasse sollte eine oder mehrere dieser Variablen manipulieren. Im Allgemeinen ist eine Methode umso kohärenter für ihre Klasse, je mehr Variablen sie manipuliert. Eine Klasse, in der jede Variable von jeder Methode verwendet wird, ist maximal kohäsiv.

Im Allgemeinen ist es weder ratsam noch möglich, solche maximal kohäsiven Klassen zu erstellen; andererseits möchten wir, dass die Kohäsion hoch ist. Wenn die Kohäsion hoch ist, bedeutet dies, dass die Methoden und Variablen der Klasse voneinander abhängig sind und als logische Einheit zusammenhängen.

Die Strategie, Funktionen klein zu halten und die Parameterlisten kurz zu halten, führt manchmal dazu, dass eine Vielzahl von Instanzvariablen entsteht, die von einem Teil der Methoden verwendet werden. Wenn dies geschieht, deutet dies fast immer darauf hin, dass mindestens eine andere Klasse versucht, aus der größeren Klasse herauszukommen. Sie sollten versuchen, die Variablen und Methoden in zwei oder mehr Klassen aufzuteilen, so dass die neuen Klassen kohärenter sind.

2 Stimmen

Ich stimme zu, dass dies wahrscheinlich die beste Erklärung ist, das ist es, was ich an Onkel Bob mag, dass er die tatsächliche Bedeutung in ein paar Sätzen erklären kann. Wenn Sie diese Definition kennen, können Sie sofort erkennen, was getan werden sollte, um die Kohäsion einer gegebenen Klasse zu erhöhen.

0 Stimmen

Dies ist eine gute Erklärung im spezifischen Kontext des objektorientierten Designs, aber diese Konzepte gelten im Allgemeinen. Andere Antworten und (Blog-Verweise) hier bieten gute Erklärungen im allgemeineren Kontext.

16voto

TheBoyan Punkte 6500

Zusammenhalt in der Softwaretechnik ist das Maß, in dem die Elemente eines bestimmten Moduls zusammengehören. Es ist also ein Maß dafür, wie stark jedes Stück Funktionalität, das durch den Quellcode eines Softwaremoduls ausgedrückt wird, miteinander verbunden ist.

Kopplung in einfachen Worten ist, wie viel ein Komponente (stellen Sie sich wieder eine Klasse vor, obwohl nicht unbedingt) über die inneren Abläufe oder inneren Elemente einer anderen weiß, d. h. wie viel Wissen sie über die andere Komponente hat.

Ich habe einen Blogbeitrag darüber geschrieben, wenn Sie sich etwas genauer mit Beispielen und Zeichnungen beschäftigen möchten. Ich denke, er beantwortet die meisten Ihrer Fragen.

13voto

vkstream Punkte 733

Bildbeschreibung hier eingeben

Kohäsion bezieht sich darauf, wie eine einzelne Klasse entworfen ist. Kohäsion ist das objektorientierte Prinzip, das am engsten damit verbunden ist, sicherzustellen, dass eine Klasse mit einem einzigen, gut fokussierten Zweck entworfen ist. Je fokussierter eine Klasse ist, desto höher ist die Kohäsion dieser Klasse. Die Vorteile einer hohen Kohäsion sind, dass solche Klassen viel einfacher zu warten sind (und seltener geändert werden) als Klassen mit geringer Kohäsion. Ein weiterer Vorteil hoher Kohäsion ist, dass Klassen mit einem gut fokussierten Zweck tendenziell wiederverwendbarer sind als andere Klassen.

Auf dem obigen Bild können wir sehen, dass bei geringer Kohäsion nur eine Klasse dafür verantwortlich ist, viele Aufgaben auszuführen, die nicht gemeinsam sind, was die Wiederverwendbarkeit und Wartungschancen reduziert. Bei hoher Kohäsion gibt es jedoch eine separate Klasse für alle Aufgaben zur Ausführung eines spezifischen Jobs, was zu einer besseren Benutzbarkeit und Wartung führt.

3voto

Premraj Punkte 65511

Bei der Softwareentwicklung sind Kohäsion und Kopplung zwei wichtige Konzepte, die mit der Qualität und der Wartbarkeit des Codes zusammenhängen.

Hohe Kohäsion:

  • Hohe Kohäsion bedeutet, dass alle zugehörigen Elemente miteinander verbunden sein sollten, zum Beispiel Auto, Küche
  • Auto: Alle Elemente eines Autos sind eng miteinander verbunden und arbeiten zusammen für einen einzigen Zweck - das Fahren. Der Motor, die Räder, das Getriebe und andere Komponenten müssen alle koordiniert funktionieren, damit das Auto effektiv arbeiten kann. Dieses hohe Maß an Kohäsion macht das Auto effizient und zuverlässig.
  • Küche: Ebenso zeigt eine Küche auch eine hohe Kohäsion. Geräte, Utensilien und Zutaten tragen alle direkt zum einzigen Zweck der Zubereitung und des Kochens von Speisen bei. Dies macht die Küche effizient und erleichtert den reibungslosen Ablauf.

Niedrige Kopplung:

  • Niedrige Kopplung bedeutet, dass Module nicht sehr eng miteinander verbunden sein sollten, da dies zu Kettenreaktionen führen kann. Zum Beispiel beim Bau von Häusern
  • Bau von Häusern: Die verschiedenen Module, die am Bau eines Hauses beteiligt sind - Fundament, Rahmung, Elektrik, Sanitär - sind gute Beispiele für eine niedrige Kopplung. Sie können unabhängig voneinander mit minimaler Koordination arbeiten, und ein Problem in einem Modul (z.B. ein Rohrbruch) beeinträchtigt nicht zwangsläufig die anderen. Dies macht den Bau effizienter und vermeidet sich fortsetzende Ausfälle.

2voto

Vladimir Punkte 1560

Ich denke, die Unterschiede können wie folgt dargestellt werden:

  • Kohäsion repräsentiert den Grad, in dem ein Teil einer Code-Basis eine logisch zusammenhängende, atomare Einheit bildet.
  • Kopplung repräsentiert den Grad, in dem eine einzelne Einheit unabhängig von anderen ist.
  • Es ist unmöglich, eine vollständige Entkopplung zu erreichen, ohne die Kohäsion zu beeinträchtigen, und umgekehrt.

In diesem Blog-Beitrag schreibe ich detaillierter darüber.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X