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
// Тек сакталуучу класс
class TempData implements Savable
{
    public function save(): void
    {
        // Уақыттык маалыматтарды сактоо логикасы
    }
}

Бул ыкма класс жана алардын көзкарандылыгын ийкемдүү долбоорлоого мүмкүндүк берет.