Middle
Interfeyslar ichida metodlar qanday tamoyil asosida birlashtiriladi va ajratiladi?
sobes.tech AI
AIdan javob
Interfeysdagi metodlar xulq-atvorning birligi (cohesion) va aniq shartnoma tamoyili bo'yicha guruhlanadi va ajratiladi.
- Xulq-atvorning birligi: Bir birlik sifatida ifodalangan operatsiyalar to'plamini yoki ma'noda o'xshash harakatlarni bajaradigan metodlar bitta interfeysga birlashtiriladi. Bu kodning o'qilishi yaxshilanadi, interfeysning maqsadini tushunishni osonlashtiradi va uni qayta ishlatish imkoniyatini oshiradi.
- Aniq shartnoma: Interfeys, uni amalga oshiradigan sinflar bajarishi kerak bo'lgan aniq shartnomani tavsiflaydi. Interfeysdagi har bir metod bu shartnomani tashkil etadi. Metodlar, agar ular turli xulq-atvor jihatlarini ifodalasa yoki ularning amalga oshirilishi mustaqil ravishda o'zgarishi mumkin bo'lsa, turli interfeyslar orasida bo'linadi. Masalan,
Readableinterfeysi ma'lumotlarni o'qish uchun metodlarni o'z ichiga olishi mumkin,Writableesa yozish uchun. Bir sinf, imkoniyatlariga qarab, bu interfeyslarning bir yoki ikkisiga ham amal qilishi mumkin.
Ushbu yondashuv SOLID tamoyillarini, ayniqsa:
- Yagona mas'uliyat tamoyili: Interfeys, o'zgartirish uchun yagona sababga ega — u ta'riflagan xulq-atvorlar to'plamini o'zgartirish.
- Interfeyslarni ajratish tamoyili: Mijozlar, foydalanmaydigan interfeyslar bilan bog'lanmasligi kerak. Katta interfeyslarni kichik va diqqatga sazovor interfeyslar bilan bo'lish, sinflarga faqat ular uchun haqiqatan ham kerak bo'lgan interfeyslarni amalga oshirish imkonini beradi.
Misol:
Faraz qilaylik, bizda saqlanishi va yuklanishi mumkin bo'lgan ob'ekt bor. Bitta Persistable interfeys o'rniga, save() va load() metodlariga ega ikkita alohida interfeys yaratish yaxshiroq:
// Saqlanadigan ob'ektlar uchun interfeys
interface Savable
{
public function save(): void;
}
// Yuklanadigan ob'ektlar uchun interfeys
interface Loadable
{
public function load(): void;
}
Saqlanishi va yuklanishi mumkin bo'lgan sinf ikkala interfeysni ham amalga oshiradi:
// Ikkala interfeysni ham amalga oshiradigan sinf
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Saqlash logikasi
}
public function load(): void
{
// Yuklash logikasi
}
}
Faqat saqlanadigan sinf faqat Savable ni amalga oshiradi:
// Faqat `Savable` interfeysini amalga oshiradigan sinf
class TempData implements Savable
{
public function save(): void
{
// Vaqtinchalik ma'lumotlarni saqlash logikasi
}
}
Bu sinflar va ularning bog'liqliklarini yanada moslashuvchan tarzda loyihalash imkonini beradi.