Showing posts with label kalıtım. Show all posts
Showing posts with label kalıtım. Show all posts

Friday, October 5, 2012

Kalıtım Örneği (c#)


Bu örneğimizde temel bir Ev sınıfı oluşturacağız. Oluşturduğumuz temel ev sınıfında tüm evler için kullanılabilinir özellikler olan kat numarası, oda sayısı, alanı, semti gibi özellikler olacak. Temel Ev sınıfından bir KiralıkEv sınıfı türeteceğiz ve bu sınıfımızda sadece kiralik evler için geçerli olan depozito ve kira özelliklerini ekleyeceğiz. Ardından Main metodunun bulunduğu sınıfta nesne örneklerimizi oluşturacağız.


Temel Ev Sınıfı:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace evsinifi
{
    public class Ev
    {
        private int odasayisi;

        public int Odasayisi
        {
            get { return odasayisi; }
            set { odasayisi = value; }
        }
        private int katno;

        public int Katno
        {
            get { return katno; }
            set { katno = value; }
        }
        private int alan;

        public int Alan
        {
            get { return alan; }
            set { alan = value; }
        }
        private string semt;

        public string Semt
        {
            get { return semt; }
            set { semt = value; }
        }

   

        public string EvGoruntule()
        {
            return string.Format(" Odasayisi: {0} Katno: {1} Alan: {2} Semt: {3}", odasayisi, katno, alan, semt);
        }
    }
}

Ev sınıfından türetilen KiralıkEv sınıfı:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/*kalitimda türetilen classların namespaceleri aynı olması tek bir referans üzerinden erişmemiz için kolaylık sağlar.*/

namespace kiraliksinifi
{
    public class kiralikev:Ev
    {
        public kiralikev()
        {
        }

        public kiralikev(int odasayisi, int katno, int alan, string semt, double kira) : base(/*boş yerine dolu olabilirdi*/)
        {
           /*yukarıdaki boş base constructori dolu olsaydı tekrardan base ile ataması yapmamıza gerek kalmayacaktı. */
           base.Odasayisi = odasayisi;
           base.Katno = katno;
           base.Alan = alan;
           base.Semt = semt;
           this.kira = kira;
           
        }

        public double kira;
        public double depozito;

        public string EvGoruntule()
        {
            return string.Format(" Odasayisi: {0}, Katno: {1}, Alan: {2}, Semt: {3}, kira: {4}", Odasayisi, Katno, Alan, Semt, kira);
        }
    }
}

Main metodunun bulunduğu ana sınıf:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using evsinifi;
using kiraliksinifi;


namespace Kalitim
{
    class Program
    {
        static void Main(string[] args)
        {
            kiralikev ev1 = new kiralikev();
            ev1.Alan = 120;
            ev1.Katno = 3;
            ev1.Odasayisi = 4;
            ev1.Semt = "bebek";
            ev1.kira = 550;

            Ev ev2 = new Ev();
            ev2.Alan = 120;
            ev2.Katno = 3;
            ev2.Odasayisi = 4;
            ev2.Semt = "Etiler";

            kiralikev ev3 = new kiralikev(3,7,120,"besiktas",430);

            Console.WriteLine(ev1.EvGoruntule());
            Console.WriteLine(ev2.EvGoruntule());
            Console.WriteLine(ev3.EvGoruntule());

           
            Console.ReadLine();
        }
    }
}

Kalıtım (c#)

Temel bir Memeli sınıfı tasarlayacağız. Her memeli hayvan da  bulunan özellikler boy, ağırlık gibi fiziksel özellikler
olabilir. Daha sonra Kedi sınıfını tasarlayacağız. Ancak Kedi sınıfı Memeli sınıfından türeteceğiz. Yani Memeli sınıfının
tüm özelliklerini Kedi sınıfına aktaracağız. Memeli sınıfında boy ve ağırlık bilgilerini gösteren OzelliklerGoster()
isimli bir metot olacak. Kedi sınıfında da hayvanın kedi olduğunu gösteren string türünden bir özellik olacak.
Ayrıca Kedi sınıfında kedinin türünü yazdıracak bir de metot olmalıdır.

Türetme işlemi aşağıdaki gibi yapılır.

class Kedi: Memeli
{


}

burada kedi sınıfından türemiş sınıf(derived class) Memeli ise temel sınıf (base class) olarak adlandırılır. Şimdi bu sınıfların nasıl yazıldığına bakalım.

using system;

class Memeli
{
  puplic double Boy;
  puplic double Agirlik;

  puplic void OzellikGoster()
  {
    console.WriteLine("Boy = " + Boy);
    console.WriteLİne("Ağırlık = " Agirlik);
  }

}


class Kedi:Memeli
{
  puplic string Tur;

  puplic void TurGoster();
  {
   console.writeline("Turu: " + Tur);
  }
}

Class MainMetodu
{
  Private void Main(String [] Args)
  {
   Kedi kedi1 = new Kedi();

   kedi1.Boy= 15;
   kedi1.Agırlık = 4;
   kedi1.Tur = "Van";
 
   kedi1.OzellikGoster();
   kedi1.TurGoster();

   Kedi kedi2 = new Kedi();
   kedi2.Boy= 19;
   kedi2.Agırlık = 8;
   kedi2.Tur = "kara";
 
   kedi2.OzellikGoster();
   kedi2.TurGoster();

   Console.ReadLine();
  }
}

Bu programın ekran çıktısı;

Boy = 15
Agırlık = 4
Turu = Van

Boy =  19
Agırlık = 8
Turu = Kara

şeklinde olacaktır.


Gördüğünüz üzere Kedi sınıfı üzerinden Memeli sınıfına ait bütün özelliklere ve metotlara erişebiliyoruz.
Bunu sağlayan,

class Kedi : Memeli
{
}
satırıdır.

Ancak yazdığımız programda;

Memeli memeli = new Memeli();
memeli.TurGoster();

şeklinde Türeyen sınıftaki metoda erişmemiz mümkün değildir.

Programı derlemeye çalıştığımızda hata mesajı alırız; çünkü memeli nesnesi üzerinden TurGoster() metoduna ulaşamayız.
Yani temel sınıf olarak Memeli sınıfının kendisinden türeyen Kedi sınıfındaki üye elemanlardan haberi yoktur.
Ancak tersi doğru değildir.