Middle
İnterfeyslərdə metodlar hansı prinsipə əsasən qruplaşdırılır və ayrılır?
sobes.tech Süni İntellekt
AI-dan cavab
İnterfeyslərdəki metodlar davranışın uyğunluğu (cohesion) və açıq müqavilə prinsipinə görə qruplaşdırılır və ayrılır.
- Davranışın uyğunluğu: Bir varlıq ilə əlaqəli unikal əməliyyatlar toplusunu və ya oxşar mənaya malik hərəkətləri həyata keçirən metodlar, bir interfeysə daxil edilir. Bu, kodun oxunuşunu yaxşılaşdırır, interfeysin məqsədini anlamağı asanlaşdırır və onun yenidən istifadə imkanını artırır.
- Açıq müqavilə: İnterfeys, onu həyata keçirən sinflərin əməl etməli olduğu açıq bir müqaviləni təsvir edir. İnterfeysdeki hər bir metod bu müqavilənin bir hissəsidir. Metodlar, əgər onlar müxtəlif davranış aspektlərini təmsil edirsə və ya onların həyata keçirilməsi müstəqil şəkildə dəyişə bilərsə, müxtəlif interfeyslər arasında bölünür. Məsələn,
Readableinterfeysi məlumatların oxunması üçün metodlar ehtiva edə bilər,Writableisə yazma üçün. Bir sinif, imkanlarına görə, bu interfeyslərdən birini və ya hər ikisini həyata keçirə bilər.
Bu yanaşma SOLID prinsiplərini, xüsusən:
- Yeganə məsuliyyət prinsipi: İnterfeys, yalnız bir dəyişiklik səbəbi olan — onun təsvir etdiyi davranışların toplusunun dəyişməsidir.
- İnterfeysların ayrılması prinsipi: Müştərilər, istifadə etmədikləri interfeyslərdən asılı olmamalıdır. Böyük interfeyslərin kiçik və fokuslanmış interfeyslərə bölünməsi, siniflərin yalnız ehtiyac duyduğu interfeysləri həyata keçirməsinə imkan verir.
Nümunə:
Tutaq ki, bizim saxlaya və yükləyə bilən bir varlığımız var. Bir Persistable interfeysi ilə iki metod save() və load() yerinə, iki ayrı interfeys yaratmaq daha yaxşıdır:
// Saxlanıla bilən varlıqlar üçün interfeys
interface Savable
{
public function save(): void;
}
// Yüklənə bilən varlıqlar üçün interfeys
interface Loadable
{
public function load(): void;
}
Həm saxlanıla bilən, həm də yüklənə bilən sinif hər iki interfeysi həyata keçirir:
// Hər iki interfeysi həyata keçirən sinif
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Yadda saxlamanın loqikası
}
public function load(): void
{
// Yükləmə loqikası
}
}
Yalnız saxlanılan sinif isə yalnız Savable-i həyata keçirir:
// Yalnız `Savable` interfeysini həyata keçirən sinif
class TempData implements Savable
{
public function save(): void
{
// Müvəqqəti məlumatların yadda saxlanması loqikası
}
}
Bu, sinfləri və onların asılılıqlarını daha çevik şəkildə layihələndirməyə imkan verir.