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
{
// Ժամանակավոր տվյալների պահպանման լոգիկա
}
}
Այսպիսով՝ ավելի ճկուն կերպով նախագծում ենք դասերը և դրանց կախվածությունները։