Middle
Proqramlaşdırmada əlaqəlilik və bağlanma nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Kohezivlik (Cohesion) — bu modul daxilində elementlərin nə qədər sıx bağlı olduğunu ölçən bir göstəricidir. Yüksək kohezivlik, modul elementlərinin tək bir vəzifə və ya konsept üzərində fokuslandığını göstərir. Yaxşı dizayn olunmuş modul yüksək kohezivliyə malikdir.
Kohezivlik səviyyələrinin nümunələri (aşağıdan yüksəkə doğru):
- Təsadüfi (Coincidental): Elementlər təsadüfi əlaqəlidir, məntiqi əlaqə yoxdur.
- Məntiqi (Logical): Elementlər məntiqi əlaqəli bir sıra əməliyyat həyata keçirir, lakin seçim xarici kod tərəfindən edilir.
- Zamanlı (Temporal): Elementlər eyni zamanda icra olunur.
- Prosedural (Procedural): Elementlər icra prosedurunu izləyir.
- Əlaqəli (Communicational): Elementlər eyni məlumatlar üzərində işləyir.
- Silsiləli (Sequential): Bir elementin çıxışı digərinin girişidir.
- Funksional (Functional): Bütün elementlər aydın şəkildə müəyyən edilmiş bir funksiyanın həyata keçirilməsinə kömək edir.
Qoşulma (Coupling) — müxtəlif modullar arasındakı asılılıq dərəcəsidir. Aşağı qoşulma, modulların nisbətən müstəqil olduğunu göstərir. Qoşulmanı azaltmaq, sistemi daha çevik, baxıma asan və test edilə bilən edir.
Qoşulma səviyyələrinin nümunələri (yüksəkdən aşağıya doğru):
- Məzmun (Content): Bir modul, digər modulun daxili məlumatlarına və ya tətbiqinə birbaşa çıxış edir.
- Ümumi (Common): Modullar ümumi qlobal məlumat sahəsindən istifadə edir.
- İdarəetmə (Control): Bir modul, digər modulun davranışını müəyyən edən idarə bayrağı ötürür.
- Stamplama (Stamp): Birgə ötürülən mürəkkəb məlumatlar (obyektlər, strukturlar), lakin modul yalnız bir hissəsini istifadə edir.
- Məlumatlar (Data): Sadə məlumatların parametr kimi ötürülməsi.
- Mesajlar (Message): Modullar mesaj mübadiləsi edir (məsələn, hadisələr və ya interfeyslər vasitəsilə). Bu, ən zəif qoşulma formasıdır.
Yaxşı dizaynın məqsədi: yüksək kohesivlik (modullar daxilində) və aşağı qoşulma (modullar arasında).
<?php
// Yüksək kohesivlik nümunəsi (Funksional kohesivlik)
// Bu sinif yalnız istifadəçilərin idarə olunmasına yönəlib
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);
}
}
// Aşağı qoşulma nümunəsi (Məlumat qoşulması)
// 'processOrder' yalnız ötürülən məlumatlara ($orderId, $amount) bağlıdır
class OrderProcessor {
public function processOrder(int $orderId, float $amount): bool {
// Sifarişin işlənməsi loqikası...
// Bir digər sinfin tətbiqindən birbaşa asılı deyil,
// yalnız giriş məlumatlarından asılıdır.
echo "Sifariş ID $orderId işlənir, məbləğ: $amount\n";
return true;
}
}
// UserManager və OrderProcessor-in bir-birinə güclü asılı olmadığı nümunə.
// Onlar müstəqil və ya birlikdə istifadə oluna bilər, lakin daxili dəyişiklikləri
// bir-birinə çox təsir etmir.
?>