OOP #2 Inheritance , Advanced Class Design (Base/Derived Class)

 Merhabalar

Yazı serimizin ikinci yazısıyla beraberiz.Bu yazımda OOP yaklaşımın en önemli kavramı olan kalıtım(Inheritance) konusunda bahsederek , sınıf kavramını daha ileriye götürmeyi planlıyorum.

Kalıtım; temel de bir sınıftan başka bir sınıf oluşturmamızı sağlayan bir yapıdır.Bu yapı sayesinde sınıflar arası ilişkileri belirleyebilir ve kodlarımızın tekrarlanmasını önleyebiliriz.Gerçek yaşamdan bir örnek vermemiz gerekirse; örneğin bi taşıt sınıfımız olsun bu sınıfı temel bir sınıf olarak belirledik.Dİkkat ederseniz taşıt genel bir tanım içeriyor. Özele inersek araba,kamyonet,tır vs. diyerek devam edebiliriz.Daha sonra araba da genel bir tanım özele inersek spor araba,jeep vs diye devam eder.Bu belirlediğimiz alt kategoriler ayrı birer sınıftır.Yalnız bunları tek tek ayrı olarak tanımlamak anlamsız olur.Çünkü bu kategorilerin hepsi taşıt sınıfının sahip olduğu özellikleri içeriyor.Bu yüzden bu özellikleri baştan yazmıyor taşıt sınıfından kalıtarak elde ediyoruz.Başka bir örneğide şematik olarak görelim.

 

Bir inşaat sınıfı var ve bu sınıf her inşaatın sahip olduğu özelliklere sahip.Peki bu inşaatlar neler olabilir.Ev,hotel,Apartman vb. gibi bir çok inşaat olabilir. En genel tanım ve özellikler inşaat sınıfında, en detaylı ve belirgin özellikler ise alt sınıflarda dağılmış durumda.

Şemadaki ilişkilere baktığınızda görünen ok kısmı temel sınıfı(Base Class) “Building Class” göstermektedir.Diğer sınıflarda türemiş sınıfı(Derived Class) belirtmektedir.İlişki anlamında türemiş sınıflar temel sınıfın sahip olduğu method ve özelliklerin tamamına sahiptirler.Tabi bu erişim seviyelerine de bağlıdır.Dikkat ederseniz constructer ve desrtucter methodlar türemiş yada temel sınıf olması fark etmeden sınıfın kendisine özel olan methodlardır.

Kalıtım “:” karakteri ile sağlanır.Şunuda belitmemiz gerekir.C# çoklu kalıtımı  desteklememektedir.ilerleyen yazılarda bu konuyu da açacağım.Şimdi sözdizimini görelim.

 
public class ClassA
{
     public string a = "";
     private int b = 0;
     protected double c = 1.0;
     internal char d = 'e';
     protected internal object e = "";
}
     
public class ClassB:ClassA
{
         
}
 
public class ClassC :ClassB
{
         
}

Yazılan kodlara ait diagram aşağıdaki gibidir.Burada ki ilişkiler çok öenmli dikkatlice incelemenizi öneririm.

Direct/InDirect Base Class kavramlarına değinelim.Direct Base Class doğrudan temel sınıf yani sınıflar arası ilişkilerdeki en temel sınıfı ifade eder.En tepedeki (ClassA) sınıfdır.InDirect Base Class dolaylı temel sınıftır.Arada kalan sınıfı(ClassB) ifade eder.Bakıldığında CLassB CLassC nin temel sınıfı olduğu açıkca görülmektedir.

Birde iç içe olan sınıflardan (Nested types) söz edelim.Bunu ben de ilk okuduğumda şaşırmıştım hemen denemeye kalkmıştım J.Bir sınıf içerisinde bir çok sınıf oluşturabiliriz.Yalnız dikkat etmelisiniz bu bir Kalıtım değildir.Bunu sınıfları modül yapısına soktuğunuda söyleyebiliriz.

 Nesneleri nasıl oluşturabiliyoruz bakalım.

 
CompanyModule module = new CompanyModule();
CompanyModule.Marketing markt = new CompanyModule.Marketing();
CompanyModule.Product prodct = new CompanyModule.Product();
CompanyModule.Sale sale = new CompanyModule.Sale();

 

Bu yazımdan da bu kadar.Umarım anlatabilmişimdir.

İyi çalışmalar

Kaynak Dosyayı İndirin

Alıntı