Sobes.tech
Middle

Ի՞նչ սկզբունքով են միավորվում և բաժանվում մեթոդները ինտերֆեյսներում։

sobes.tech AI

Պատասխան AI-ից

Մեթոդները ինտերֆեյսներում միավորվում և բաժանվում են ըստ կապվածության վարքագծի (cohesion) և բացահայտ պայմանագրի սկզբունքների:

  • Վարքագծի կապակցություն: Մեթոդները, որոնք ներկայացնում են միավոր գործողությունների հավաքածու կամ կատարում են նման գործողություններ, միավորվում են մեկ ինտերֆեյսում: Սա բարելավում է կոդի ընթերցելիությունը, հեշտացնում է ինտերֆեյսի նշանակության ըմբռնումը և բարձրացնում նրա վերածնունդը:
  • Բացահայտ պայմանագրի: Ինտերֆեյսը նկարագրում է բացահայտ պայմանագիր, որը պետք է կատարեն այն իրականցնող դասերը: Յուրաքանչյուր մեթոդ ինտերֆեյսում մաս է այդ պայմանագրի: Մեթոդները բաժանվում են տարբեր ինտերֆեյսների միջև, եթե ներկայացնում են տարբեր վարքագծի կողմեր կամ եթե դրանց իրականացմանը կարող է անկախ լինել: Օրինակ, Readable ինտերֆեյսը կարող է պարունակել տվյալների ընթերցման մեթոդներ, իսկ Writable — գրելու համար: Դասը կարող է իրականացնել մեկ կամ երկու այդ ինտերֆեյսները՝ կախված իր հնարավորություններից:

Այս մոտեցումը նպաստում է SOLID սկզբունքներին, մասնավորապես՝

  • Միայնական պատասխանատվության սկզբունք (Single Responsibility Principle): Ինտերֆեյսը ունի մեկ պատճառ փոփոխության՝ այն վարքագծերի փոփոխության, որոնք այն նկարագրում է:
  • Ինտերֆեյսների բաժանման սկզբունք (Interface Segregation Principle): Հաճախորդները չպետք է կախված լինեն այն ինտերֆեյսներից, որոնք նրանք չեն օգտագործում: Մեծ ինտերֆեյսների բաժանումը փոքր և կենտրոնացած մասերի՝ թույլ է տալիս դասերին իրականացնել միայն անհրաժեշտ ինտերֆեյսները:

Օրինակ՝

Նախնականում ենթադրենք, որ ունենք մի էություն, որը կարող է պահպանվել և բեռնվել: Փոխարենը մեկ Persistable ինտերֆեյսի, որը ունի save() և load() մեթոդներ, ավելի լավ է ստեղծել երկու առանձին:

<?php
// Ինտերֆեյս պահպանվող էությունների համար
interface Savable
{
    public function save(): void;
}
<?php
// Ինտերֆեյս բեռնվող էությունների համար
interface Loadable
{
    public function load(): void;
}

Դաս, որը կարող է և պահպանվել և բեռնվել, իրականացնում է երկու ինտերֆեյսներ՝

<?php
// Դաս, որը իրականացնում է երկու ինտերֆեյսներ
class DataObject implements Savable, Loadable
{
    public function save(): void
    {
        // Պահպանման լոգիկա
    }

    public function load(): void
    {
        // Բեռնման լոգիկա
    }
}

Դաս, որը միայն պահպանվում է, իրականացնում է միայն Savable:

<?php
// Դաս, որը իրականացնում է միայն `Savable`
class TempData implements Savable
{
    public function save(): void
    {
        // Ժամանակավոր տվյալների պահպանման լոգիկա
    }
}

Այսպիսով՝ ավելի ճկուն կերպով նախագծում ենք դասերը և դրանց կախվածությունները։