Middle
Arayüzlerde metodlar hangi ilkeye göre gruplanır ve ayrılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Arayüzlerdeki metodlar, davranışın bütünlüğü (cohesion) ve açık sözleşme ilkelerine göre gruplanır ve ayrılır.
- Davranışın bütünlüğü: Bir varlıkla ilgili tek bir işlem kümesini temsil eden veya anlam açısından benzer işlemler yapan metodlar, tek bir arayüze toplanır. Bu, kodun okunabilirliğini artırır, arayüzün amacını anlamayı kolaylaştırır ve yeniden kullanılabilirliğini yükseltir.
- Açık sözleşme: Arayüz, onu uygulayan sınıfların yerine getirmesi gereken açık bir sözleşmeyi tanımlar. Arayüzdeki her metod bu sözleşmenin bir parçasıdır. Metodlar, farklı davranış yönlerini temsil ediyorsa veya uygulamaları bağımsız olarak değişebiliyorsa, farklı arayüzler arasında bölünürler. Örneğin,
Readablearayüzü veri okuma metodları içerebilir,Writableise yazma metodları içerebilir. Bir sınıf, yeteneklerine bağlı olarak bu arayüzlerin bir veya ikisini de uygulayabilir.
Bu yaklaşım, SOLID ilkelerini destekler, özellikle:
- Tek sorumluluk ilkesi: Arayüz, sadece bir değişiklik nedeni olan, tanımladığı davranışların setinin değişmesidir.
- Arayüzlerin ayrım ilkesi: Müşteriler, kullanmadıkları arayüzlere bağlı olmamalıdır. Büyük arayüzlerin daha küçük ve odaklanmış arayüzlere bölünmesi, sınıfların sadece gerçekten ihtiyaç duydukları arayüzleri uygulamasını sağlar.
Örnek:
Varsayalım ki, kaydedilebilen ve yüklenebilen bir varlığımız var. Tek bir Persistable arayüzü yerine, save() ve load() metodlarına sahip iki ayrı arayüz oluşturmak daha iyidir:
// Kaydedilebilir varlıklar için arayüz
interface Savable
{
public function save(): void;
}
// Yüklenebilir varlıklar için arayüz
interface Loadable
{
public function load(): void;
}
Hem kaydedilebilen hem de yüklenebilen bir sınıf, her iki arayüzü de uygular:
// Her iki arayüzü de uygulayan sınıf
class DataObject implements Savable, Loadable
{
public function save(): void
{
// Kaydetme mantığı
}
public function load(): void
{
// Yükleme mantığı
}
}
Sadece kaydedilen bir sınıf ise, sadece Savable arayüzünü uygular:
// Sadece Savable arayüzünü uygulayan sınıf
class TempData implements Savable
{
public function save(): void
{
// Geçici verilerin kaydedilmesi mantığı
}
}
Bu, sınıfların ve bağımlılıklarının daha esnek tasarlanmasını sağlar.