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
{
// Логикаи нигоҳ доштани маълумоти муваққатӣ
}
}
Ин имкон медиҳад, ки тарҳрезии классҳо ва вобастагиҳои онҳо бештар флексибл бошад.