Middle
Kas ir saskaņotība un sasaistība programmēšanā?
sobes.tech AI
Atbilde no AI
Sasaistība (Cohesion) ir mērs tam, cik cieši ir saistīti elementi moduļa iekšienē (klasē, funkcijā). Augsta sasaistība nozīmē, ka moduļa elementi ir koncentrēti uz viena uzdevuma vai koncepcijas izpildi. Labas dizaina moduļa ir augsta sasaistība.
Piemēri sasaistības līmeņiem (no zemas uz augstu):
- Gadījuma (Coincidental): Elementi ir nejauši saistīti, nav loģiskas saistības.
- Loģiska (Logical): Elementi veic loģiski saistītas darbības, bet izvēle tiek veikta ārējā kodā.
- Laika (Temporal): Elementi ir saistīti ar to, ka tie tiek veikti vienlaikus.
- Procedurāla (Procedural): Elementi seko izpildes procedūrai.
- Komunikācijas (Communicational): Elementi strādā ar vieniem un tiem pašiem datiem.
- Secīgā (Sequential): Viena elementa izvads ir cita elementa ievads.
- Funkcionāla (Functional): Visi elementi veicina viena skaidri definēta funkcijas izpildi.
Savienojamība (Coupling) ir mērs atkarībai starp dažādiem moduļiem. Zema savienojamība nozīmē, ka moduļi ir relatīvi neatkarīgi. Samazinot savienojamību, sistēma kļūst elastīgāka, uzturama un testējama.
Piemēri savienojamības līmeņiem (no augstas uz zemu):
- Satura (Content): Viens modulis tieši piekļūst cita moduļa iekšējiem datiem vai realizācijai.
- Kopīga (Common): Moduļi izmanto kopīgu globālo datu apgabalu.
- Vadības (Control): Viens modulis nodod vadības karogu, kas nosaka citas moduļa darbību.
- Stamp (Stamp): Datu pārraide ar strukturētām datu objektiem, bet modulis izmanto tikai daļu no tiem.
- Datu (Data): Vienkāršu datu pārraide kā parametri.
- Ziņojumu (Message): Moduļi apmainās ar ziņojumiem (piemēram, caur notikumiem, interfeisiem). Tā ir visvājākā savienojamības forma.
Laba dizaina mērķis: augsta sasaistība (iekš moduļiem) un zema savienojamība (starp moduļiem).
<?php
// Augstas sasaistības piemērs (Functional Cohesion)
// Šī klase ir koncentrēta tikai uz lietotāju apstrādi
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);
}
}
// Zemas savienojamības piemērs (Datu savienojamība)
// 'processOrder' ir atkarīgs tikai no nodotajiem datiem ($orderId, $amount)
class OrderProcessor {
public function processOrder(int $orderId, float $amount): bool {
// Pasūtījuma apstrādes loģika...
// Tieši neietekmē citu klases realizāciju,
// tikai no ievades datiem.
echo "Apstrādā pasūtījumu ID $orderId ar summu $amount\n";
return true;
}
}
// Piemērs, kur UserManager un OrderProcessor nav cieši saistīti.
// Tos var izmantot neatkarīgi vai kopā, bet to iekšējās izmaiņas
// neietekmē viens otru.
?>