Sobes.tech
Middle

Mi az összetartozás és a kapcsolódás a programozásban?

sobes.tech MI

Válasz az MI-től

Koherencia (Cohesion) – ez a mérőszám arra, hogy mennyire szorosan kapcsolódnak az elemek egy modulon belül (osztály, függvény). A magas koherencia azt jelenti, hogy a modul elemei egyetlen feladatra vagy fogalomra összpontosítanak. Egy jól megtervezett modul magas koherenciával rendelkezik.

Példák a koherenciaszintekre (az alacsonytól a magasig):

  • Véletlenszerű (Coincidental): Az elemek véletlenszerűen kapcsolódnak, nincs logikus összefüggés.
  • Logikai (Logical): Az elemek egy logikailag összefüggő műveletsorozatot hajtanak végre, de a választást külső kód végzi.
  • Időbeli (Temporal): Az elemek azzal kapcsolódnak, hogy ugyanabban az időben futnak.
  • Eljárási (Procedural): Az elemek végrehajtási eljárást követnek.
  • Kommunikációs (Communicational): Az elemek ugyanazokat az adatokat használják.
  • Szekvenciális (Sequential): Egy elem kimenete bemenet egy másiknak.
  • Funkcionális (Functional): Minden elem hozzájárul egy egyértelműen meghatározott funkció végrehajtásához.

A kapcsolódás (Coupling) a különböző modulok közötti függőség mértéke. Az alacsony kapcsolódás azt jelenti, hogy a modulok viszonylag függetlenek egymástól. A kapcsolódás csökkentése rugalmasabb, karbantarthatóbb és tesztelhetőbb rendszert eredményez.

Példák a kapcsolódási szintekre (a magastól az alacsonyig):

  • Tartalom szerint (Content): Egy modul közvetlenül hozzáfér a másik belső adataihoz vagy megvalósításához.
  • Közös (Common): A modulok közös globális adatterületet használnak.
  • Vezérlés szerint (Control): Egy modul átad egy vezérlőjelzőt, amely meghatározza a másik viselkedését.
  • Stamp szerint (Stamp): Átadás összetett adatoknak (objektumok, struktúrák), de a modul csak részüket használja.
  • Adatok szerint (Data): Egyszerű adatok átadása paraméterként.
  • Üzenetek szerint (Message): A modulok üzeneteket cserélnek (pl. eseményeken, interfészeken keresztül). Ez a leggyengébb kapcsolódási forma.

A jó tervezés célja: magas koherencia (a modulokon belül) és alacsony kapcsolódás (a modulok között).

<?php

// Magas koherencia példája (Funkcionális Koherencia)
// Ez az osztály csak a felhasználók kezelésére fókuszál
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);
    }
}

// Alacsony kapcsolódás példája (Data Coupling)
// A 'processOrder' csak a bemeneti adatoktól függ ($orderId, $amount)
class OrderProcessor {
    public function processOrder(int $orderId, float $amount): bool {
        // Rendelés feldolgozási logika...
        // Nem függ közvetlenül más osztályok megvalósításától,
        // csak a bemeneti adatoktól.
        echo "Processing order ID $orderId with amount $amount\n";
        return true;
    }
}

// Példa arra, hogy a UserManager és az OrderProcessor nem erősen függ egymástól.
// Függetlenül vagy együtt is használhatók, de belső változtatásaik
// nem befolyásolják egymást jelentősen.

?>