Middle
რა არის კოესია და კავშირი პროგრამირებაში?
sobes.tech AI
პასუხი AI-სგან
Կոահեզիա (Cohesion) — դա չափանիշ է այն մասին, թե որքան սերտորեն կապված են տարրերը մոդուլի (класа, ֆունկցիա) ներսում: Բարձր կոահեզիա նշանակում է, որ մոդուլի տարրերը կենտրոնացած են մեկ գործառույթի կամ կոնցեպցիայի վրա: Լավ նախագծված մոդուլ ունի բարձր կոահեզիա:
Կոահեզիայի մակարդակների օրինակներ (ցածրից բարձր):
- Անհատական (Coincidental): տարրերը պատահականորեն կապված են, առանց տրամաբանական կապի:
- Հոգնակի (Logical): տարրերը իրականացնում են տրամաբանական կապակցված գործողությունների հավաք, բայց ընտրությունը կատարվում է արտաքին կոդով:
- Ժամային (Temporal): տարրերը կապված են այն բանի համար, որ նրանք կատարվում են նույն ժամանակ:
- Պրոցեսային (Procedural): տարրերը հետևում են կատարման ընթացակարգին:
- Հաղորդակցական (Communicational): տարրերը աշխատում են նույն տվյալների հետ:
- Հետևական (Sequential): մեկ տարրից ելքը հանդիսանում է մյուսի մուտքը:
- Ֆունկցիոնալ (Functional): բոլոր տարրերը նպաստում են մեկ հստակ սահմանված գործառույթի կատարմանը:
Կապ (Coupling) — դա կախվածության չափն է տարբեր մոդուլների միջև: Նվազող կապը նշանակում է, որ մոդուլները հարաբերականորեն անկախ են: Կապի նվազեցումը դարձնում է համակարգը ավելի ճկուն, հեշտ սպասարկվող և թեստավորվող:
Կապի մակարդակների օրինակներ (բարձրից ցածր):
- Բովանդակության (Content): Մի մոդուլ ուղղակիորեն մուտք է գործում մյուսի ներքին տվյալներին կամ իրագործմանը:
- Ընդհանուր (Common): Մոդուլները օգտագործում են ընդհանուր գլոբալ տվյալների տարածք:
- Բարելավման (Control): Մի մոդուլ փոխանցում է կառավարման նշան, որը որոշում է մյուս մոդուլի վարքագիծը:
- Ստամպի (Stamp): Կողմնակի տվյալների փոխանցում (օբյեկտներ, կառուցվածքներ), բայց մոդուլը օգտագործում է միայն դրանց մասը:
- Տվյալների (Data): Պարզ տվյալների փոխանցում որպես պարամետրեր:
- Հաղորդագրությունների (Message): Մոդուլները փոխանակում են հաղորդագրություններ (օրինակ, իրադարձությունների, ինտերֆեյսների միջոցով): Սա ամենաաղքատ ձևն է կապի:
Լավ դիզայնի նպատակն է՝ բարձր կոահեզիա (մոդուլների ներսում) և ցածր կապ (մոդուլների միջև):
<?php
// Բարձր կոահեզիայի օրինակ (Ֆունկցիոնալ կոահեզիա)
// Այս դասը կենտրոնացած է միայն օգտվողների մշակման վրա
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);
}
}
// Նվազ կոահեզիայի օրինակ (Տվյալների կապ)
// 'processOrder' կախված է միայն փոխանցված տվյալներից ($orderId, $amount)
class OrderProcessor {
public function processOrder(int $orderId, float $amount): bool {
// Պատվերի մշակման տրամաբանություն...
// Անկախ է այլ դասերի իրականացումից,
// միայն կախված է մուտքային տվյալներից:
echo "Processing order ID $orderId with amount $amount\n";
return true;
}
}
// Օրինակ, որտեղ UserManager և OrderProcessor-ը չունեն ուժեղ կախվածություն միմյանցից:
// Դրանք կարող են օգտագործվել անկախ կամ միասին, բայց նրանց ներսի փոփոխությունները
// մեծապես չեն ազդում միմյանց վրա:
?>