Etiketler

, , , ,


Abstract Class vs Interface (Soyut Sınıf – Arayüz)


Soyut sınıflar ve arayüzler , kendilerinden türetilen alt sınıflara ortak alanları (fields) ve üyeleri (members) sunarlar.Tanımlanış amaçları her ne kadar benzerde olsa yapıları ve kullanım şekilleri açısından farklılıkları vardır.

 

Arayüzler sadece özelliklerin (property) ve metodların tanımlamalarını içerirken, Soyut sınıflarda alanlar(fields) ve üyelerin (methods ve properties) tanımlamaların yanı sıra işlevlerinede yer verilebilir. Tabiki soyut sınıfın kullanılış amacına uygun olarak tanımlanacak soyut(abstract) metotların işlevlerinin tanımlanması gereksiz olacaktır. Çünkü bu metotlar alt sınıflarca override edilerek kullanılması uygundur.
 

 

Soyut sınıfları “abstract” anahtar sözcüğünü kullanarak tanımlarız.
 
abstract public class Tasitlar{}

Tasitlar sınıfında alanlar ,özellikler ve metotlar kullanabiliriz. Bu metotlardan bazılarını, taşıtlar sınıfından türettiğimiz Araba, Kamyon, Otobus gibi alt sınıflarda sadece alt sınıflarda tanımlanmak üzere (abstract ve virtual) yaratırız, bazılarını da ana sınıfta tanımlandığı gibi kullanırız.
 

 

Soyut sınıfların bir örneklemi (instance) direk yaratılamaz. Bunu önlemek için abstract sözcüğü ile sınıfı tanımlarız. Soyut sınıfta tanımlanan tanımları kullanmak için o sınıftan türettiğimiz alt sınıflardan yaralanırız. Ana sınıfta tanımladığımız metodu abstract anahtar sözcüğü ile kullandığımızda, metot içersine işlevini tarnımlamamıza ihtiyac yoktur, eğer virtual anahtar sözcüğü ile tanımlarsak metodun işlevini ana sınıfa ekleyebiliriz. Virtual ile tanımladığımız metot alt sınıflar tarafından da kullanılabilir, fakat bu durumda o bir abstract metot olmayacak.  
 
Soyut sınıf : Bazı metotları işlevleriyle tanımlanmış bazı metotları da kendisini extend eden sınıfa bırakmış olan sınıflara denir.
Örneğin küp ve küre için : kütle = hacim x yoğunluk olarak hesaplanır. Ancak hacim küp ve küre için farklı formüllerle hesaplanır. Kütleyi soyut sınıfın bir metotu olarak tanımlarız. Bu metot soyut sınıfın kendisinde işlevleriyle tanımlanmıştır. Hacim için abstract bir metot tanımlarız, implementasyonu alt sınıflarında gerçekleştirilmek üzere ana sınıfta yapmayız. 
 

Bir biriyle benzer işler gören sınıfların ortak özellikleri soyut sınıfta toplanır ve alt sınıflar sınıflar tarafından türetilir. 
Soyut sınıflar sadece ve sadece başka sınıflar kendileri extend etsin diye yaratılmıştır. Tek başlarına kullanamazlar.
Arayüz mantıksal olarak ilişkili soyut üyelerin(abstract members) bulunduğu tanımlamadır. İçerdiği üyeler (metot ve özellikler) sadece ve sadece tanımlamalardan oluşur.   

Arayüzler başka sınıflar için rehberdir.

Arayüzdeki tüm üyeler public’tir ve başka bir  erişim belirteci (public, private, protected,…) kullanılamaz. “Interface” anahtar sözcüğüyle tanımlanırlar. Ancak başka bir arayüzden türetilebilirler. 
 
Arayüz: Bir sınıfta olması gereken metot ve özellikleri tanımlayan yapılardır. Sadece neyin yapılacağını gösterir, nasıl yapılacağına dair bilgi içermezler.
 

Arayüz ve soyut sınıflar içerdikleri tanımlarla alt sınıflarının yapısı hakkında belirleyici ve sabitleyici işleve sabittir.Bu özellikleriyle bir çok tasarım desenine temel olmaktadır. Arayüzden türetilen bir sınıf arayüzün içerdiği tüm üyeleride içermek zorundadır.

Özetle

 • Bir sınıf en fazla bir tane soyut sınıftan türetilebilirken (inherits) , birden fazla arayüzden gerçekleştirilebilir (implements) . Örneğin bir otomobil Tasit soyut sınıfının genel özelliklerini almak için ondan türetilebilirken, kasa tipinin sedan, coupe olmasını bu özellikleri belirten ayrı arayüzlerden gerçekleştirebilir.
• Arayüzler sınıflara çoklu kalıtım desteği verirler. • Soyut sınıfın erişim belirteçleri herhangi bir belirteç olabilirken, arayüzün sadece public olabilir. Oda varsayılan olrak geleceğinden, açık olarak public olarak dahi belirtilemez.
• Soyut sınıfta metotlar implementasyonlarını içerebilirken, Arayüzlerde sadece ana tanımlamaları olur, implementasyon içeremezler.