Kalıtım ve Polimorfizm Mantığını Kavramak için C# Örnekleme

Kalıtım ve Polimorfizm Mantığını Kavramak için C# Örnekleme

Kalıtım ve polimorfizm mantığını kavramak için C# örneklemeyle öğrenin Bu makalede C# programlama dili ile kalıtım, polimorfizm ve obje yönelimli programlama kavramlarına ait örnekler veriyoruz Detaylı bir öğrenme için okumaya devam edin

Kalıtım ve Polimorfizm Mantığını Kavramak için C# Örnekleme

Bir programlama dilinde kalıtım ve polimorfizm kavramlarını anlamak, o dilde yazılan uygulamaların daha iyi tasarlanması ve daha az kod yazılması için önemlidir. C# gibi modern bir nesne yönelimli programlama dili kullanarak kalıtım ve polimorfizm örnekleri vermek, konunun daha iyi anlaşılmasını sağlayabilir.

Bu makalede, C# dilinde kalıtım ve polimorfizm kavramlarının anlaşılması için örnekler verilecektir. Kalıtım, bir sınıfın başka bir sınıftan özelliklerini veya özelliklerinin bir kısmını devraldığı bir programlama kavramıdır. Öte yandan, polimorfizm, bir nesnenin farklı şekillerde davranabilmesini sağlayan bir programlama kavramıdır.


Kalıtım Nedir?

Kalıtım, C# programlama dilinde sınıflar arasında özelliklerin ve metodların paylaşımını sağlayan bir kavramdır. Bir sınıfın başka bir sınıftan özelliklerini veya özelliklerinin bir kısmını devralmasıdır. Bu sayede tekrarlayan kodların önüne geçilir ve daha temiz bir kod yazımı sağlanır.

Örneğin, bir araba sınıfı ve bu sınıftan türetilen bir otomobil ve kamyonet sınıfı düşünelim. Araba sınıfı, marka, model, yıl gibi ortak olan özellikleri içerebilirken, otomobil sınıfı buna ek olarak kapı sayısı, kamyonet sınıfı ise kasa tipi gibi özellikleri içerebilir. Bu sayede aynı özelliklerin tekrar tekrar tanımlanması yerine, araba sınıfından devralınarak kod daha az satırla yazılabilir ve daha düzenli hale getirilebilir.


Polimorfizm Nedir?

Polimorfizm, programlama dillerinde oldukça önemli bir kavramdır. Bu kavram, bir nesnenin farklı şekillerde davranabilmesine izin verir ve bu sayede kodun daha esnek hale gelmesini sağlar. Bir başka deyişle, aynı sınıfta veya alt sınıflarda bulunan farklı nesnelerin farklı faaliyetlerde bulunabilmesini ifade eder. Polimorfizm, programların yeniden kullanılabilirliğini ve bakımını kolaylaştırır.

Polimorfizmin bir diğer alt dalı olan çok biçimlilik, uygulama geliştiricileri için oldukça önemli bir konudur. Birden fazla sınıfın bir arada kullanılması gerektiğinde çok biçimlilik kullanılır. Çok biçimlilik, sınıfların aynı arayüzleri kullanarak birbiriyle etkileşim kurabilmesine izin verir. Bu da kodun daha anlaşılır ve temiz olmasını sağlar.

Polimorfizm kavramının bir diğer önemli alt dalı ise dinamik bağlama olarak adlandırılır. Bu kavram, programlama dilinin çalışma zamanında hangi yöntemin çağrılacağını belirleyerek, kodun daha esnek hale gelmesini sağlar. Dinamik bağlama sayesinde nesne yönelimli programlama dillerinde kodun yeniden kullanılabilirliği artar.

Son olarak, polimorfizmin bir diğer alt dalı olan sanal yöntemler, sınıflar arasında metodların nasıl paylaşılabileceğini belirleyen bir programlama kavramıdır. Bu kavram, sınıfların aynı arayüzleri kullanarak birbiriyle etkileşim kurabilmesine izin verir. Bu da kodun yeniden kullanılabilirliği ve bakımını kolaylaştırır.


Çok Biçimlilik Nedir?

Çok biçimlilik, nesnel programlama konseptinde, bir nesnenin farklı yöntemleri farklı şekillerde işlemesi anlamına gelir. Bu, aynı metodun farklı parametreler alarak farklı yollarla çalışmasına izin verir. Çok biçimlilik, birçok farklı şekilde gerçekleştirilebilir.

Bir yöntemin farklı şekillerde çalışabilmesiyle ilgili olarak, C # içinde, iki ana türü vardır: statik bağlama ve dinamik bağlama. Statik bağlama, derleme zamanında yapılırken, dinamik bağlama çalışma zamanında yapılır. Bu iki bağlama türü arasındaki en büyük fark, dinamik bağlamanın çalışma zamanındaki bağlama olduğu ve hangi yöntemin hangi nesne için çağrılacağına karar verdiğidir.

Çok biçimlilik, istendiği takdirde, C # içinde sanal yöntemler kullanılarak gerçekleştirilebilir. Bir sanal yöntem, bir alt sınıf içinde yazılan hiçbir kodu değiştirmez, ancak ovulabilir. Bunun anlamı, bir alt sınıf, ana sınıfın bir yöntemini alabilir ve onu yeniden tanımlayabilir. Yine de, bu alt sınıf aynı zamanda sanal ana yöntemi de çağırabilir. Bu da, alt sınıfların ana sınıfların işlevselliğini devralmasına, ancak belirli gereksinimleri karşılamak için değişiklik yapmasına izin verir.

Statik Bağlama Dinamik Bağlama
Birçok farklı sınıfta bulunan benzer kodun yeniden kullanılmasına olanak tanır. Bağlama işlemi çalışma zamanında yapılır.
Kod, derleme zamanında belirlenir. Kod, çalışma zamanında belirlenir.
Daha hızlıdır. Daha yavaştır, ancak daha esnek ve özelleştirilebilirdir.

Özetlemek gerekirse, çok biçimlilik, nesnel programlamada önemli bir kavramdır. Bu kavram, bir nesnenin birden fazla şekilde farklı davranışlar sergilemesine izin verir. Bu, programların daha özelleştirilmiş ve genel amaçlı olmasını sağlar. C # içinde, bu konsept, birçok şekilde gerçekleştirilebilir, ancak polimorfizmin iki ana türüyle, statik bağlama ve dinamik bağlama ile en belirgin şekilde gösterilir.


Dinamik Bağlama Nedir?

Dinamik bağlama, bir polimorfizm türüdür ve bir nesnenin çalışma zamanında hangi yöntemin çağrılacağını belirler. Bu, sınfılarda yer alan yöntemlerin, alt sınıflarda değiştirilmesi durumunda kullanışlı bir işlem olabilir. Dinamik bağlamada, bir nesne belirli bir yöntemi çağırdığında, hangi yöntemi kullanacakları çalışma zamanında kararlaştırılır. Bu, özellikle alt sınıfların belirli yöntemleri üzerinde çalışma gerektirir.

Örneğin, bir temel sınıf oluşturulduktan sonra, türetilmiş class’lar ile bu sınıf üzerinde oynama yapmak ve diğer sınıflar ile bu sınıfı kullanmak mümkündür. Ancak, sınıfın geçersiz kılan örneği türetilmiş bir class'ta kullanıldığında dinamik bağlama gerçekleşir ve çağrılacak olan yöntem, ilgili türetilmiş sınıfın belirleyeceği şekilde belirlenir.


Statik Bağlama Nedir?

Statik bağlama, polimorfizmin bir türüdür ve bir nesnenin derleme zamanında hangi yöntemin çağrılacağını belirler. Bu, yöntemin nesne tipine göre değil, kodun derlenme zamanındaki tipine göre belirlenir. Bu nedenle, Statik bağlamada, belirli bir yöntemin çağrılacağı kesin olarak bilinir ve çalışma zamanında değiştirilemez.

Bir örnek vermek gerekirse, C#’da aynı isimde birden fazla yöntem olabilir (overloading). Ancak, bu yöntemlerin parametre sayısı ve/veya tipi farklı olmalıdır. Statik bağlama, hangi yöntemin çağrılacağını kodun derlenme zamanında belirlediği için, aynı isimdeki farklı yöntemler arasında seçim yapar.

Statik bağlamanın kullanımı, özellikle başlangıç seviyesindeki programcılar tarafından tercih edilir. Çünkü, çalışma zamanında hiçbir belirsizlik yoktur ve performans daha hızlıdır. Ancak, statik bağlama kullanıldığında, aynı isimde ve parametre sayısı/ tipi aynı olan farklı yöntemlerde kaynak kodu değiştirme şansı yoktur.


Sanal Yöntemler Nedir?

Sanal yöntemler, sınıflar arasında metodların nasıl paylaşılabileceğini belirleyen bir programlama kavramıdır. Bu yöntemler, kalıtım ve polimorfizmle birlikte çalıştıklarında oldukça güçlü bir araç haline gelirler. Sanal yöntemler aynı zamanda, genellikle bir ana sınıfta tanımlanır ve bu sınıfın alt sınıflarında uyarlanabilir.

Bir sanal yöntem, bir sınıfta tanımlanmış ve alt sınıflardaki özel gereksinimlerinize göre değiştirilebilen bir yöntemdir. Sanal yöntemlerin, alt sınıflarında uyarlanabilmesi, aynı işlevi yapan ancak farklı uygulamaları olabilen kodlar yazmanızı sağlar. Bu özellik sayesinde, programlama dilleri daha verimli ve esnek hale gelir ve yazılım geliştirme işlemi daha hızlı bir şekilde gerçekleştirilebilir.

Bir sanal yöntem, genellikle bir ana sınıfta tanımlanır ve alt sınıflarda uyarlanabilir. Bu sayede, ilgili nesnenin durumuna göre, bir üst sınıfta tanımlanmış olan metodların, dinamik olarak çalışması sağlanabilir. Polimorfizm (çok biçimlilik), sınıflar arasındaki yöntemlerin nasıl kullanabileceği bir kavramdır. Sanal yöntemler, çok biçimliliği sağlamak için kullanılırlar. Bir sınıfı, işlevselliklerine göre ayrı kategorilere ayırabilirsiniz. Bu işlevlerin her biri birbirinden farklı olabilir ve birbiriyle çelişmeyebilir. Sanal yöntemler sayesinde, bir sınıfın işlevselliği, başka bir sınıftan kalıtılabileceği gibi, başka sınıflarda da kullanılabilir.


Kalıtım ve Polimorfizm Örnekleri

Bu bölümde, C# programlama dilinde kalıtım ve polimorfizm işlemlerini gerçekleştirmek için örnekler verilecektir. Örnekler, programlamada sık kullanılan kurumsal metaforları içerir ve kodun anlaşılmasını daha kolay hale getirir.

Kalıtım, bir sınıfın özelliklerini başka bir sınıfa aktarmaya yarayan bir programlama kavramıdır. Bu örnekte, Bir Otobüs sınıfı oluşturulacak ve bu sınıftan ÖğrenciOtobüsü sınıfı türetilecektir. ÖğrenciOtobüsü sınıfı, Otobüs sınıfından tüm özelliklerini miras alacak ve kendi özelliklerini de içerecektir. Aşağıdaki tablo, sınıfların özelliklerini göstermektedir:

Özellik Otobüs Sınıfı ÖğrenciOtobüsü Sınıfı
Marka BMW BMW
Model 2020 2020
Koltuk Sayısı 40 30
Renk Beyaz Sarı

Polimorfizm, bir nesnenin farklı şekillerde davranabilmesini sağlayan bir programlama kavramıdır. Bu örnekte, bir Hayvan sınıfı oluşturulacak ve bu sınıftan türetilen Köpek ve Kedi sınıfları farklı şekillerde hareket edeceklerdir. Köpek sınıfı, Havla() metodunu kullanacak ve Kedi sınıfı, Miyavla() metodunu kullanacak. Aşağıdaki kod örneği, polimorfizmi nasıl kullanabileceğimizi gösterir:

      abstract class Hayvan    {        public abstract void SesCikar();    }     class Kedi : Hayvan    {        public override void SesCikar()        {            Console.WriteLine("Miyavla");        }    }     class Köpek : Hayvan    {        public override void SesCikar()        {            Console.WriteLine("Havla");        }    }     static void Main()    {        Hayvan hayvan = new Kedi();        hayvan.SesCikar();         hayvan = new Köpek();        hayvan.SesCikar();    }  

Bu örnekte, Hayvan sınıfı soyut bir sınıftır ve SesCikar() metodu uygulanamaz. Ancak, Kedi sınıfı ve Köpek sınıfı bu metodu uygularlar ve farklı sonuçlar üretirler. main() metodu içinde, Kedi nesnesi oluşturulur ve SesCikar() metodu çağrılır. Daha sonra, Köpek nesnesi oluşturularak SesCikar() metodu çağrılır. Bu, polimorfizmin farklı şekillerde nasıl kullanılabileceğini gösterir.


Kalıtım Örneği

Bir sınıfın, başka bir sınıftan özelliklerini veya özelliklerinin bir kısmını devraldığı kalıtım mantığını anlamak için bir örnek verelim:

Bir hayvan sınıfı oluşturduğumuzu varsayalım. Bu sınıf, hayvan türlerinin ortak özelliklerini tanımlayan bir sınıf olarak düşünülebilir. Sınıfımızın içinde canlı mı yoksa cansız mı olduğunu belirten bir özellik, kaç bacaklı olduğunu belirten bir özellik ve hayvanın ismini tutan bir özellik olsun.

Şimdi ise bu sınıftan, kuşlar ve köpekler diye iki sınıf türetelim. Her iki sınıf da hayvan sınıfından özelliklerini alacaklar, ancak bazı özellikleri kendilerine özel olarak tanımlayacaklar.

Hayvan Kuş Köpek
Canlı mı yoksa cansız mı olduğu Canlı Canlı
Kaç bacaklı olduğu 2 4
Hayvanın ismi Atmaca Golden Retriever

Bu örnekte, hayvan sınıfı ana sınıf olarak düşünülebilirken, kuş ve köpek sınıfları bu ana sınıftan türetilmiş sınıflardır. Kuş sınıfı, hayvan sınıfının özelliklerini almasına rağmen, kaç bacaklı olduğu özelliğini kendine özgü olarak tanımlamıştır. Benzer şekilde, köpek sınıfı da hayvan sınıfının özelliklerini alsa da kaç bacaklı olduğunu kendine özgü bir şekilde tanımlamıştır.

Bu örnekle birlikte kalıtımın işleyişini anlamak daha kolay hale gelmiştir. Alt sınıfların, üst sınıflardan özelliklerini alarak ama aynı zamanda kendilerine özgü özellikler de tanımlayarak genişletilmesi mümkün hale gelmektedir.


Polimorfizm Örneği

C# programlama dilinde, polimorfizmin bir örneği, bir köpek ve bir kedi sınıfı düşünelim. Her iki sınıfın da özellikleri ve metodları farklı olsun. Ancak, her iki sınıfın da "Ses Çıkarma" metoduna sahip olduğunu varsayalım.

Eğer bir nesne oluşturup, köpek sınıfından bir örneğe atarsak, "Ses Çıkarma" metodunun köpek sesi çıkarması beklenir. Aynı şekilde, bir nesne oluşturup, kedi sınıfından bir örneğe atarsak, "Ses Çıkarma" metodunun kedi sesi çıkarması beklenir.

Bu, bir nesnenin farklı şekillerde davranabilmesinin (polimorfizm) bir örneğidir. Nesne, köpek veya kedi örneği olabilir ve "Ses Çıkarma" metoduna çağrıldığında, nesnenin türüne bağlı olarak farklı davranır.

Bu örnek, C# programlama dilinde dinamik bağlama (dynamic binding) kullanılarak gerçekleştirilebilir. Nesne, çalışma zamanında hangi metodun çağrılacağına karar verir.

  • Köpek sınıfı:
    • Özellikler: Irk, Yaş
    • Metodlar: Ses Çıkarma (köpek sesi)
  • Kedi sınıfı:
    • Özellikler: Tür, Renk
    • Metodlar: Ses Çıkarma (kedi sesi)

Yukarıdaki sınıf örnekleri bir nesne oluşturarak polimorfizm örneği yapılabilir. Örneğin;

Kod Çıktı
                Pet myPet = new Dog();                myPet.MakeSound();                myPet = new Cat();                myPet.MakeSound();            
                Köpek sesi çıkartıyor                Kedi sesi çıkartıyor            

Yukarıdaki kod parçası, Pet sınıfından bir nesne oluşturur ve başlangıçta köpek sınıfına atar. "Ses Çıkarma" metoduna çağrıldığında köpek sesi çıkarır. Daha sonra, aynı nesneye kedi sınıfından bir örnekleme yapılır ve tekrar "Ses Çıkarma" metoduna çağrıldığında kedi sesi çıkarır.