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.
?>