Sobes.tech
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-ը չունեն ուժեղ կախվածություն միմյանցից:
// Դրանք կարող են օգտագործվել անկախ կամ միասին, բայց նրանց ներսի փոփոխությունները
// մեծապես չեն ազդում միմյանց վրա:

?>