Middle
Milyen elv alapján csoportosítják és választják el a módszereket az interfészekben?
sobes.tech MI
Válasz az MI-től
Az interfészekben lévő metódusokat a viselkedés kohéziója (cohesion) és az egyértelmű szerződés elve szerint csoportosítják és választják szét.
- Viselkedés kohéziója: Azok a metódusok, amelyek egy egységes műveletkészletet képviselnek egy entitással vagy hasonló cselekvést hajtanak végre, egy interfészbe kerülnek. Ez javítja a kód olvashatóságát, megkönnyíti az interfész céljának megértését és növeli újrafelhasználhatóságát.
- Egyértelmű szerződés: Az interfész egy nyilvánvaló szerződést ír le, amelyet a megvalósító osztályoknak teljesíteniük kell. Minden metódus az interfészben ennek a szerződésnek a része. A metódusokat különböző interfészek között osztják szét, ha különböző viselkedési aspektusokat képviselnek, vagy ha azok megvalósítása függetlenül változhat. Például, a
Readableinterfész tartalmazhat metódusokat az adatok olvasására, míg aWritableaz írásra. Egy osztály megvalósíthat egy vagy mindkét interfészt a képességei szerint.
Ez a megközelítés támogatja a SOLID elveket, különösen:
- Egyszeri felelősség elve: Az interfésznek csak egy oka lehet a változásra — a viselkedéskészlet módosítása, amit leír.
- Interfész szegregáció elve: A kliensek nem függhetnek olyan interfészektől, amelyeket nem használnak. A nagyobb interfészek kisebb, fókuszált interfészekre való bontása lehetővé teszi, hogy az osztályok csak azokat az interfészeket valósítsák meg, amelyekre valóban szükségük van.
Példa:
Tegyük fel, van egy entitásunk, amely menthető és betölthető. Ahelyett, hogy egy Persistable interfész lenne két metódussal save() és load(), jobb, ha két külön interfészt hozunk létre:
// Menthető entitások interfésze
interface Savable
{
public function save(): void;
}
// Betölthető entitások interfésze
interface Loadable
{
public function load(): void;
}
Egy menthető és betölthető osztály mindkét interfészt megvalósítja:
// Mindkét interfészt megvalósító osztály
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Mentés logikája
}
public function load(): void
{
// Betöltés logikája
}
}
Csak mentésre szoruló osztály csak a Savable-t valósítja meg:
// Csak a `Savable` interfészt megvalósító osztály
class TempData implements Savable
{
public function save(): void
{
// Ideiglenes adatok mentésének logikája
}
}
Ez lehetővé teszi az osztályok és azok függőségeinek rugalmasabb tervezését.