Nesne tabanlı programlamada sınıf hiyerarşisi oluşturulurken, bazen en tepede bulunan sınıf türünden nesneler programcılar için anlamlı olmayabilir. Hiyerarşinin en tepesinde bulunan sınıfın kendisinden türetilecek olan alt sınıflar için ortak bir arayüz (interface) görevi yapması istenebilir. Bunun için çözüm olarak oluşturulan metotlara ve sınıflara soyut metot (abstract method) ya da soyut sınıf (abstract class) denir. Soyut sınıflar büyük projelerde kullanılırlar ve kalıtım özelliğini kullanarak kod tekrarını azaltırlar. Soyut sınıflar diğer sınıflara taban olmak için kullanılırlar. Nesne türetemezler. Önlerine “abstract” sözcüğü yazılarak soyutlaştırılırlar. Önlerine "virtual" yazılmaz çünkü “abstract” sözcüğü uygulanan tüm sınıf ve metotlar zaten sanaldır.
Kullanırken dikkat edilmesi gerekenler:
• Soyut sınıflar “abstract” türünden nesneler tanımlamazlar.
• Soyut sınıflar içerilerinde soyut olmayan metotlar da barındırabilir ancak soyut metotlar sadece soyut sınıflar içerisinde bildirilebilir.
• Soyut metotlar türeyen sınıfta mutlaka bildirilmelidir.
• Soyut metotlar override edilmek zorundadırlar, aksi takdirde derleyici hatası alınır.
• “Static” metotlar soyut olarak tanımlanamazlar.
• Soyut sınıflar “private” olarak tanımlanamazlar ama “public” ve “protected” olarak tanımlanabilirler.
• Soyut sınıflar “sealed” anahtar sözcüğü ile ifade edilemezler.
Soyut sınıf ve arayüz arasındaki farklar ve benzerlikler:
• Arayüz içerisindeki tüm öğelerin “public” olması gerekirken soyut sınıflarda tüm öğelerin “public” olması zorunlu değildir.
• Bir sınıf sadece bir soyut sınıftan miras olarak tanımlanabilir ancak birçok arayüz tarafından bildirilebilir.
• Soyut sınıf ve arayüz için yazılacak olan soyut metotların gövdeleri bulunmaz.
• Soyut sınıflar çoklu ortamı desteklemezler ancak arayüz destekler.
• Soyut sınıflar kullanım hızı açısından arayüzden daha avantajlıdır.
• Soyut bir sınıfın tüm metotları soyut yapılırsa arayüz olarak kullanılabilir.
Hiç yorum yok:
Yorum Gönder