In der objektorientierten Programmierung beschreibt Kohäsion, wie gut eine Programmeinheit eine logische Aufgabe oder Einheit abbildet. In einem System mit starker Kohäsion ist jede Programmeinheit (eine Methode, eine Klasse oder ein Modul) verantwortlich für genau eine wohldefinierte Aufgabe oder Einheit.
Starke Kohäsion
Das Single-Responsibility-Prinzip besagt, dass jede Klasse nur genau eine fest definierte Aufgabe zu erfüllen hat. Diese Aufgabe wird durch das Zusammenspiel aller Attribute und Methoden dieser Klasse erfüllt. Das Zusammenspiel der Attribute und Methoden dieser Klasse ist dadurch sehr eng. Man spricht von starker Kohäsion.
Schlechte (schwache) Kohäsion sollte vermieden werden. Sie führt unter anderem dazu, dass gemeinsame Funktionalitäten einer Klasse nicht wiederverwendet werden, sondern mehrfach umgesetzt werden. Code-Duplizierung ist somit ein Zeichen schwacher Kohäsion. Das DRY-Prinzip (don’t repeat yourself ‚Wiederhole dich nicht‘) hilft, diese zu vermeiden.
Arten der Kohäsion
Kohäsion kann als qualitatives Maß für Quelltext betrachtet werden. Dieses Maß kann in Kategorien unterteilt werden, die sich voneinander in der Stärke der Kohäsion unterscheiden. Mögliche Kategorien der Kohäsion von schwacher Kohäsion (zu vermeiden) bis hin zu starker Kohäsion (erstrebenswert) sind:
- Zufällige Kohäsion
- Zufällige Kohäsion liegt dann vor, wenn die Teile eines Moduls logisch und sachlich unzusammenhängend und so nur zufällig zusammen gruppiert sind (Beispiel: Utility-Klassen).
- Logische Kohäsion
- Logische Kohäsion liegt dann vor, wenn die – an sich unterschiedlichen – Teile eines Moduls logisch durch einen Oberbegriff zusammengefasst werden können (Beispiel: Eingaberoutinen für Maus, Tastatur etc.).
- Zeitliche Kohäsion
- Zeitliche Kohäsion liegt dann vor, wenn die Teile eines Moduls nach ihrer gemeinsamen Ausführungszeit gruppiert sind (Beispiel: Initialisierung/Destruktion innerhalb eines Konstruktors/Destruktors).
- Prozedurale Kohäsion
- Prozedurale Kohäsion liegt dann vor, wenn die Teile eines Moduls nach ihrer Ausführungsreihenfolge gruppiert sind (Beispiel: Eine Funktion, die zunächst Zugriffsrechte prüft und anschließend eine Datei öffnet).
- Kommunikative Kohäsion
- Kommunikative Kohäsion liegt dann vor, wenn die Teile eines Moduls auf gemeinsamen Daten operieren.
- Sequentielle Kohäsion
- Sequentielle Kohäsion liegt dann vor, wenn die Ausgabe eines Teiles eines Moduls die Eingabe eines anderen Modulteiles ist.
- Funktionale Kohäsion
- Funktionale Kohäsion liegt dann vor, wenn die Teile eines Moduls alle zur Lösung einer einzelnen, wohldefinierten Aufgabe beisteuern.
- Informationale Kohäsion
- Informationale Kohäsion ist eine Verstärkung des Begriffs der funktionalen Kohäsion. Sie liegt dann vor, wenn zusätzlich zur funktionalen Kohäsion auch kommunikative Kohäsion für ein Modul vorliegt.
Eng verbunden mit dem Begriff der Kohäsion ist der Begriff der Kopplung.