Sobes.tech
Middle

Was sind Kohäsion und Kopplung in der Programmierung?

sobes.tech KI

Antwort von AI

Kohäsion (Cohesion) ist ein Maß dafür, wie eng die Elemente innerhalb eines Moduls (Klasse, Funktion) verbunden sind. Hohe Kohäsion bedeutet, dass die Elemente des Moduls auf die Ausführung einer einzigen Aufgabe oder eines Konzepts fokussiert sind. Ein gut gestaltetes Modul hat eine hohe Kohäsion.

Beispiele für Kohäsionsstufen (von niedrig bis hoch):

  • Zufällig (Coincidental): Elemente sind zufällig verbunden, ohne logische Verbindung.
  • Logisch (Logical): Elemente führen eine Reihe von logisch verbundenen Aktionen aus, aber die Auswahl erfolgt durch externen Code.
  • Zeitlich (Temporal): Elemente sind dadurch verbunden, dass sie gleichzeitig ausgeführt werden.
  • Prozedural (Procedural): Elemente folgen einem Ausführungsverfahren.
  • Kommunikativ (Communicational): Elemente arbeiten mit denselben Daten.
  • Sequenziell (Sequential): Der Ausgang eines Elements ist der Eingang eines anderen.
  • Funktional (Functional): Alle Elemente tragen zur Ausführung einer klar definierten Funktion bei.

Der Kopplungsgrad (Coupling) ist ein Maß für die Abhängigkeit zwischen verschiedenen Modulen. Niedrige Kopplung bedeutet, dass die Module relativ unabhängig voneinander sind. Die Verringerung der Kopplung macht das System flexibler, wartbarer und testbarer.

Beispiele für Kopplungsgrade (von hoch bis niedrig):

  • Inhaltlich (Content): Ein Modul greift direkt auf die internen Daten oder die Implementierung eines anderen Moduls zu.
  • Gemeinsam (Common): Module verwenden einen gemeinsamen globalen Datenbereich.
  • Steuerung (Control): Ein Modul übergibt eine Steuerungsflagge, die das Verhalten eines anderen Moduls bestimmt.
  • Stempel (Stamp): Übertragung von zusammengesetzten Daten (Objekte, Strukturen), aber das Modul verwendet nur einen Teil davon.
  • Datenbasiert (Data): Übertragung einfacher Daten als Parameter.
  • Nachrichtenbasiert (Message): Module tauschen Nachrichten aus (z.B. über Ereignisse, Schnittstellen). Dies ist die schwächste Form der Kopplung.

Ziel eines guten Designs: hohe Kohäsion (innerhalb der Module) und niedrige Kopplung (zwischen den Modulen).

<?php

// Beispiel für hohe Kohäsion (Funktionale Kohäsion)
// Diese Klasse ist nur auf die Verarbeitung von Benutzern fokussiert
class UserManager {
    private array $users = [];

    public function addUser(string $name): void {
        $this->users[] = $name;
    }

    public function getUsers(): array {
        return $this->users;
    }

    public function deleteUser(string $name): void {
        $this->users = array_filter($this->users, fn($user) => $user !== $name);
    }
}

// Beispiel für geringe Kopplung (Datenkopplung)
// 'processOrder' hängt nur von den übergebenen Daten ($orderId, $amount) ab
class OrderProcessor {
    public function processOrder(int $orderId, float $amount): bool {
        // Bestellverarbeitungslogik...
        // Hängt nicht direkt von der Implementierung anderer Klassen ab,
        // nur von den Eingabedaten.
        echo "Verarbeite Bestellung ID $orderId mit Betrag $amount\n";
        return true;
    }
}

// Beispiel, bei dem UserManager und OrderProcessor keine starke Abhängigkeit voneinander haben.
// Sie können unabhängig oder zusammen verwendet werden, aber ihre internen Änderungen
// beeinflussen sich nicht stark.

?>