İlginizi Çekebilir
featured
  1. Ana Sayfa
  2. C#
  3. C# Kalıtım Nedir?

C# Kalıtım Nedir?

Nesne yönelimli programlama kavramının temel özellikleri arasında yer alan kalıtım (inheritance) kavramını “C# Kalıtım Nedir” başlığı altında ele alarak uçsuz bucaksız bir bilgi öğrenim serüvenine giriş yapacağız.

Temel olarak kapsülleme, miras alma olarak bilinen bu özelliğimiz bizleri projelerimizde ortak kullanım sağlanacak çeşitli özellikleri tekrar tekrar yazmamızı ve kod salatası oluşturmamızı engeller. 👌🏻

C# Kalıtım Nedir?

C# Kalıtım, nesne yönelimli programlamanın en önemli özelliklerinden birisidir. Kalıtım sayesinde sınıf yapılarımız birbirinden türetilebilir. Bir sınıf herhangi bir üst sınıftan türetildiği zaman, türemiş olduğu sınıfın içerisindeki public, default ve protected özellikteki bütün özelliklere sahip olur. Bu yapısına ekstra olarak kendine has özelliklerde barındırabilir.

Yani proje yapılarımızda kalıtım kullanmamız hiyerarşik bir sınıflandırma yapısı kurmamızın imkanını sağlar.

Teorik olarak anlamamış olabiliriz. Bu yüzden bir aklımızda olayın canlanmasını sağlayacak basit bir örnek üzerinden “C# Kalıtım Nedir” sorusunu açıklamaya çalışalım.

Bir çocuk, Annesinin ve Babasının çeşitli özelliklerine sahip bir şekilde dünyaya gelir. Bu sahip olduğu özellikler ya iki çiftin baskın özelliklerinden ve ortak özelliklerinin bütününden geçmektedir. Çekingen olarak sahip olunan özellikler çocuğa aktarılmaz. Bu yapıda aktarılan özellikler public, protected ve default nitelikteki özellikler olurken, aktarılmayan özellikler private olarak tanımlanmış özellikler şeklinde düşünebiliriz. (👨🏻👩🏻‍🦰👶🏻)

C# Kalıtım Kullanımı Nasıl Yapılır?

Teorik olarak öğrendiğimiz bilgiyi kod içerisinde nasıl kullanacağımızı, nelere dikkat etmemiz gerektiğini basit bir şablon üzerinden inceleyelim.

class SuperClass //--> Üst Sınıfımız <--\\
{
    // Kod Satırları
}

class SubClass : SuperClass //--> Alt Sınıfımız <--\\
{
    // Kod Satırları
}
  • Üst sınıf yapımızı normal bir sınıfı nasıl oluşturuyorsak o şekilde oluşturuyoruz ve içerisine kalıtım ile aktarılmasını istediğimiz verilerin erişim belirleyicilerini yukarıda bahsettiğim gibi public, default veya protected olarak tanımlıyoruz. Eğer bazı bilgilerin üst sınıfımıza özel bir yapıda kalmasını istiyorsak bu kavramları private olarak tanımlamamız yeterli olacaktır.
  • Daha sonra oluşturmuş olduğumuz bu üst sınıftan yardım alarak bir alt sınıf oluşturmak istediğimiz zaman ise sınıfımızın isminden sonra iki nokta üst üste (:) koyarak kalıtım yapılacak üst sınıfımızın ismini belirtiyoruz.

Bu işlemi uyguladıktan sonra sınıflarımız arasında hiyerarşik bir ilişki kurulmuş ve kalıtım gerçekleşmiş olacaktır.

C# Kalıtım Faydaları

  • Projelerimizde esneklik ve zaman tasarrufu sağlayan bir yapı oluşturmamıza imkan sağlar.
  • Daha önceden hazırlamış olduğumuz kod parçacıklarını tekrar tekrar oluşturmamızı engelleyen ve alt sınıflarda bu yapıları kullanmamıza imkan sağlar.
  • Gerçekleştirdiğimiz bir değişikliği tekrar tekrar her sınıfta değiştirmek yerine super class (üst sınıf) üzerinde güncelleme yaparak değişikliği gerçekleştirebiliriz.

Kalıtım kavramını teorik olarak tanıdığımızı, nasıl kullanacağımızı ve bize sağlayacağı faydaları öğrendiğimizi düşünüyorum. Bu bilgilerden faydalanarak bitirici vuruşu gerçekleştirecek ve hafızamızda kalıtım konusunun kalıcı bir yer etmesine yardımcı olacak “C# Kalıtım Örnekleri” başlığına geçiş yapabiliriz. 👊🏻

C# Kalıtım Örnekleri

Kalıtım kavramını daha iyi anlayabilmemiz, uygulama konusunda sıkıntı yaşamamız için ilerleyen zamanlarda yapacağımız projelerde kullanabileceğimiz tarzda C# kalıtım örnekleri oluşturmak istiyorum.

Oluşturmak istediğim örnek uygulama üzerinde hayali bir işletmenin çalışanlarının bilgilerini tutacağı ve bu bilgileri çeşitli doğrultularda ekran çıktısı olarak gösterilmesine ve bazı çalışan grupların maaşlarına zam sağlanmasını sağlayacak bir basit algoritma oluşturalım.

Bu isteğimi gerçekleştirmek için uyguladığım aşamalar ise şu şekildedir:

  1. Kayıt, silme ve oluşturulan bilgilerin ekrana yazdırılmasını sağlayacak metotların ve değişkenlerin yer alacağı üst sınıfım olan “EmployeManager” isminde bir super class tanımlayarak örneğime başladım.
  2. Bu sınıfımı oluşturduktan sonra çalışanlarımın bilgisini tutmak için kullanacağım çeşitli değişkenlerin tanımlamasını gerçekleştirdim.
  3. Değişkenlerimi tanımladıktan sonra içlerini dolduracağım ve kullanıcılardan bilgi almak için oluşturduğum metotların tanımlamasına geçiş sağladım.
  4. Son olarak super class içerisinde çalışanların bilgisini ekrana yazdırabileceğim bir metot daha tanımlayarak sınıf yapımı aşağıda göreceğiniz hale getirmiş oldum.
  5. namespace InheritanceApp
    {
        class EmployeManager
        {
            protected string employeName, employeSurname, employeJob, mark = new string('-', 6);
            protected int employeMoney = 3000;
            private string moneyV = "TL";
    
            public string money
            {
                get { return moneyV; }
                set { moneyV = value; }
            }
    
            public void createEmploye(string employeName, string employeSurname, string employeJob)
            {
                this.employeName = employeName;
                this.employeSurname = employeSurname;
                this.employeJob = employeJob;
                if (employeMoney == 0)
                    this.employeMoney = 3000;
            }
    
            public void deleteEmploye()
            {
                this.employeName = null;
                this.employeSurname = null;
                this.employeJob = null;
                this.employeMoney = 0;
                Console.WriteLine(mark+"\n-> Kullanıcı bilgileri sistemden kaldırıldı.\n" + mark);
            }
    
            public void infoEmploye()
            {
                if (employeName != null && employeSurname != null && employeJob != null)
                    Console.WriteLine("{0}\n< C# Kalıtım Örnekleri #1 >\n{1}\n-> Çalışanın İsmi: {2}\n-> Çalışanın Soyadı: {3}\n-> Çalışanın Unvanı: {4}\n-> Çalışanın Maaşı: {5} {6}\n{7}", mark, mark, employeName, employeSurname, employeJob, employeMoney, moneyV, mark);
                else
                    Console.WriteLine("{0}\n-> Henüz kayıtlı bir kullanıcı bilgisi oluşturmadınız.\n{1}", mark, mark);
            }
        }
    }
  6. Üst sınıf yapımı oluşturduktan sonra işletmenin mühendis statüsündeki çalışanlarının kaydını tutmak için kullanacağım “EngineerManager” isminde bir sub class oluşturdum.
  7. Bu sınıfımı oluşturduktan sonra Constructor yapısını kurarak bazı bilgilerin sınıfın kullanılmaya başladığı anda değişmesini sağladım.
  8. Bu işlemden sonra mühendislere ekstra maaş zammı seçenekleri sunacağım ve bu zam bilgilerinin ne kadar olduğunu kullanıcıya gösterebileceğim çeşitli metotların tanımlamasını gerçekleştirdim.
  9. Bu tanımlama işlemlerimden sonra “EngineerManager” sınıf yapım ise aşağıdaki halini almış oldu.

    namespace InheritanceApp
    {
        class EngineerManager : EmployeManager
        {
            private int firstMoney;
            public EngineerManager()
            {
                employeMoney = employeMoney + Convert.ToInt32(employeMoney*1.5);
                firstMoney = employeMoney;
                money = "$";
            }
    
            public void addMoney(int v)
            {
                employeMoney = employeMoney + v;
                addInfo();
            }
            public void addMoney(double v)
            {
                employeMoney = employeMoney + Convert.ToInt32(employeMoney * (v/100));
                addInfo();
            }
    
            private void addInfo()
            {
                Console.WriteLine("-> Zam uygulaması başarılı bir şekilde gerçekleştirildi.\n-> Zam öncesi çalışnanın maaşı {0} {1} iken şu an {2} {3} artış ile {4} değerine ulaşmıştır.\n{5}",firstMoney,money,(employeMoney-firstMoney),money,employeMoney,mark);
            }
        }
    }
  10. İşlemin testlerini gerçekleştirmek için “Main” sınıf yapıma giderek ilgili sınıfların tanımlamasını gerçekleştirdim ve bu sınıfları kullanarak ekran çıktılarının görüntüsünü kontrol ettim.
  11. namespace InheritanceApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                EmployeManager employe = new EmployeManager();
                employe.createEmploye("Mert", "Çağlayan", "Beden İşçisi");
                employe.infoEmploye();
    
                EngineerManager engineer = new EngineerManager();
                engineer.createEmploye("Ömer Faruk", "Yıldız", "İnşaat Mühendisi");
                engineer.infoEmploye();
                engineer.addMoney(12.5);
            }
        }
    }

Kod Çıktısı:

C# Kalıtım Kullanımı
C# Kalıtım Örnekleri #1

Kod çıktısı olarak ilk başta “EmployeManager” sınıfı üzerinde bir kullanıcı kaydının nasıl gözüktüğünü göstermek istedim. İsterseniz birde “EngineerManager” sınıfını kullanarak bir çalışan kaydının nasıl gözüktüğünü ve bu çalışanın maaşına zam uygularsak nasıl bir çıktı ile karşılaşacağımıza bakalım.

C# Kalıtım Nedir
C# Kalıtım Örnekleri #2

Kalıtım konusunu iyice anlayabilmemiz için daha da hayatın içerisinden bir örnek uygulamaya gerçekleştirelim. Bu örneğimiz üzerinde bir bankanın kredi satışı için oluşturmuş olduğu çeşitli sınıf yapıları bulunsun. Bu sınıf yapılarında çeşitli hesaplamalar, indirimler ve ödeme seçeneklerinin imkanı sağlansın. Bu düşünmüş olduğumuz yapıya göre uygulayacağım aşamaları aşağıdaki maddelerden takip edebilirsiniz.

  1. Kredi işlemlerini yöneteceğim genel bir sınıf yapısı olarak “CreditManager” isminde bir üst sınıf oluşturdum.
  2. Oluşturmuş olduğum bu sınıf yapısı içerisine çeşitli değişkenler tanımladım.
  3. Tanımlamış olduğum değişkenlere projenin başlaması ile birlikte bazı atamaların gerçekleşmesini istediğim için Constructor yapı oluşturdum.
  4. Daha sonra kullanıcıların kredi çekmesini sağlayacak ve çekmiş olduğu kredinin bilgilerini göreceği iki adet metot tanımlaması gerçekleştirdim.
  5. Yapmış olduğum bu üç aşamadan sonra “CreditManager” ismindeki sınıf içeriğim aşağıdaki halini almış oldu.

    namespace InheritanceApp
    {
        class CreditManager
        {
            protected string creditName, creditType, mark = new string('-', 6);
            protected double creditValue, creditInterest, creditPaymentMonth,creditLastMoney = 0;
    
            public CreditManager()
            {
                ///---> Default Value <---\\\
                this.creditName = "İhtiyaç Kredisi";
                this.creditType = "Standart";
                this.creditInterest = 0.20;
                this.creditPaymentMonth = 6;
            }
            public double takeCredit(double creditValue)
            {
                this.creditValue = creditValue;
                creditLastMoney += creditValue;
                double creditPayment = (creditLastMoney / creditPaymentMonth);
                for(int i = 0; i< creditPaymentMonth; i++)
                    creditLastMoney += (creditValue * (creditInterest - (i / 1000) + (((creditPayment/1000)*creditPaymentMonth))/1000)- creditPayment*0.7);
                return creditLastMoney = Math.Round(creditLastMoney, 2);
            }
            
            public void creditInfo()
            {
                Console.WriteLine("{0}\n < Kredi Bilgileriniz > \n{1}\n-> Kredi İsmi: {2}\n-> Kredi Tipi: {3}\n-> Kredi Çektiğiniz Tutar: {4} TL\n-> Kredi Faiz Oranı: % {5}   -> Kredi Vadesi: {6} Ay\n-> Ödenecek Tutar: {7} TL\n{8}"
                    ,mark,mark,creditName,creditType,creditValue,(creditInterest*100),creditPaymentMonth,creditLastMoney,mark);
    
            }
        }
    }
  6. Daha sonra “FarmCreditManager” isminde bir alt sınıf oluşturarak “CreditManager” sınıfından kalıtım ile türetildiğini belirten tanımlamamı gerçekleştirdim.
  7. Bu tanımlama işleminden sonra Constructor bir yapı oluşturarak değişkenlerin değerlerini düzenledim.
  8. Düzenleme işlemimden sonra bir indirimli kredi olması için kafamdan uydurmuş olduğum bir hesaplama yöntemi ile kredi tutarına indirim gerçekleştiren bir metot tanımladım.
  9. Bu tanımlama işlemlerimden sonra ilgili sınıf yapım aşağıdaki halini almış oldu.

    namespace InheritanceApp
    {
        class FarmerCreditManager : CreditManager
        {
            public FarmerCreditManager()
            {
                this.creditName = "Çiftci Kredisi";
                this.creditType = "İndirimli Destek";
                this.creditInterest = 0.12;
                this.creditPaymentMonth = 12;
            }
    
            public void creditDisc()
            {
                creditLastMoney = takeCredit(creditValue)-(creditValue*(creditPaymentMonth/100)+(creditLastMoney*creditInterest*3.5));
            }
        }
    }
  10. Yapmış olduğum tüm bu tanımlamalardan sonra işlemlerimin çıktısını kontrol etmek için “Main” sınıfıma giderek gerekli kod bloklarını yazdım.
  11. namespace InheritanceApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                CreditManager manager = new CreditManager();
                manager.takeCredit(8000);
                manager.creditInfo();
    
                FarmerCreditManager farmer = new FarmerCreditManager();
                farmer.takeCredit(8000);
                farmer.creditDisc();
                farmer.creditInfo();
            }
        }
    }

Kod Çıktısı:

C# Inheritance Örnekleri
C# Kalıtım Örnekleri #3

Üst sınıfımıza göre bir kredi çekmiş olsaydık yukarıdaki gibi bir ekran çıktısı ile karşılaşacaktık. Eğer kalıtım ile oluşturmuş olduğumuz “FarmerCreditManager” sınıfı ile kredi çekseydik ve bu kredi işlemimize bir indirim uygulasaydık bize aşağıdaki kredi bilgilerini gösterecekti.

C# Inheritance Nedir
C# Kalıtım Örnekleri #4

Kalıtım (Inheritance) kavramı anlaması ilk başta zor gelmiş olsada uygularken zevk alacağınız, projelerinize esneklik ve hız katacak bir uygulama. Teorik olarak “C# Kalıtım Nedir” sorusuna ekstra bir kaynaktan cevap arayacak olursanız Microsoft tarafından hazırlanmış buradan ulaşabileceğiniz rehber içeriğini sizlere öneririm.

Unutmayın, aklınıza takılan, sormak istediğiniz ya da konu işleyişi ile alakalı herhangi bir önerinizi aşağıda bulunan yorum yap kısmından bana iletebilirsiniz. 👋🏻

Yorum Yap

Yazar Hakkında

Yazmayı, öğrenmeyi, öğrendiklerini paylaşmayı , kodlamayı ve günün birinde Yönetim Bilişim Sistemleri Uzmanı olmanın hayalini kuran birisiyim.

Yorum Yap