C#'da Kalıtım'a Giriş [1]

Kalıtım(inheritance), bir nesnenin diğer bir nesnenin özelliklerini ele geçirebilmesini sağlayan bir yöntemdir. Yani kalıtım kullanarak, birbiriyle bağlantılı bir grup ögenin ortak özelliklerini tanımlayan genel bir sınıf oluşturabilirsiniz. Bu sınıf daha sonra diğer bir sınıfla kalıtım yoluyla aktarılır ve her sınıf kendisine özgü özellikleri buna ekler.
Örneğin küçük beyaz tavşan; "tavşan" sınıflandırılmasının bir parçasıdır. Tavşan, memeliler sınıflandırılmasının bir parçasıdır. Memeliler ise daha büyük bir sınıflandırma olan canlılar sınıfının altında yer alır. Yani, canlılar sınıfı aynı zamanda kendisinin bir alt sınıfı olan memeliler sınıfına da uygulanabilecek belirli özelliklere sahiptir. Bu özelliklere ek olarak, memeliler sınıfının da kendisini diğer sınıflardan ayırt eden, kendisine özgü özellikleri vardır.
Tavşan sınıfı bu tür özelliklerden tavşana özgü olanları tanımlar. Küçük Beyaz tavşan, bu durumda , kendisinden önce gelen tüm sınıfların tüm özelliklerini kalıtım yoluyla devralacak ve bu özelliklerden sadece kendisini eşsiz kılanları tanımlayacaktır.
Temel Sınıf --> Kalıtım yoluyla aktarılan sınıftır.
Türetilmiş Sınıf --> Kalıtım işlemini gerçekleştiren sınıftır.
Türetilmiş sınıf özel sınıfın özelleştirilmiş versiyonudur.
Türetilmiş sınıf temel sınıf tarafından tanımlanan tüm değişken metot , özellik, operatör ve indeksleyicileri kalıtım yoluyla elde eder.

Kalıtım'ın Temel Unsurları
Bir örnekle başlayalım. Aşağıdaki TwoDShape adındaki sınıf, iki boyutlu genel bir şeklin niteliklerini tanımlamaktadır.
şekil kare, dikdörtgen üçgen vs. olabilir.


//iki boyutlu nesneler için bir sınıf
class TwoDShape
{
   public double width;
   public double height;
   public void ShowDim()
   {
       Console.WriteLine("width and height are " + width + " and " + height);
   }
}



TwoDShape, temel sınıf olarak kullanıbilir. Aşağıdaki program Triangle adında bir sınıf türetmek için TwoDShape'i kullanmaktadır. Tanımlanma şekline dikkat edelim.

// Basit bir sınıf hiyerarsisi.
using System;
class TwoDShape
{
public double width;
public double height;
public void ShowDim()
{
Console.WriteLine("width and height are " + width + " and " + height);
}
}
class Triangle : TwoDShape // Triangle, TwoDShape'den turetilir.
{
public string style;
public double area()
{
return width * height / 2; // Ucgenin alanini dondur.
}
public void showStyle()
{
Console.WriteLine("Triangle is " + style); // Ucgenin seklini göster.
}
}
class Shapes
{
public static void Main()
{
Triangle t1 = new Triangle();
Triangle t2 = new Triangle();

t1.width = 4.0;
t1.height = 4.0;
t1.style = "isoscelos";
t2.width = 8.0;
t2.height = 12.0;
t2.style = "right";

Console.WriteLine("Info for t1: ");
t1.showStyle();
t1.ShowDim();
Console.WriteLine("Area is " + t1.area());
Console.WriteLine();
Console.WriteLine("Info for t2: ");
t2.showStyle();
t2.ShowDim();
Console.WriteLine("Area is " + t2.area());
}
}


Siyah ekranda görünen çıktı:

Info for t1:
Triangle is isosceles
width and height are 4 and 4
Area is 8

Info for t2:
Triangle is right
width and height are 8 and 12
Area is 48


Triangle, TwoDShape'in belirli bir tipini oluşturur. Bu tip bir üçgendir. Triangle, TwoDShape'in tümünü
içerir. Ayrıca style alanını, area() ve showStyle() metodlarını da ekler. Üçgenin şekli style içinde
saklanır. area() ucgenin alanını hesaplar ve döndürür, showstyle() ise üçgenin şeklini gösterir. Şu
satıra dikkat edin.

class Triangle : TwoDShape {

TwoDShape'i devralan Triangle


Ayrıca türetilmiş sınıf için temel sınıf niteliğinde olmak temel sınıfın kendi başında kullanılamayacağı anlamı taşımaz. Temel sınıfta tek başına kullanılabilir.
Oluşturulan her türetilmiş sınıf için yanlızca bir adet temel sınıf belirlenebilir.
Ayrıca hiçbir sınıf dolaylı veya dolaysız kendi kendisinin temel sınıfı olamaz.
Kalıtımın başlıca avantajı şudur: Bir grup nesnenin ortak niteliklerini tanımlayan bir temel sınıf, çok daha spesifik olan türetüilmiş sınıflardan istenilen sayıda oluşturmak için kullanılabilir. Türetilmiş sınıfların herbiri kendisini özgü sınıflandırmayı tam olarak biççimlendirebilir.
Örneğin; dikdörtgenleri bir sınıf içine paketleyen ve TwoDShape'ten türetilmiş bir başka sınıf
şu şekildedir.

// Eger dikdörtgense false, kareyse true.
class Rectangle : TwoDShape
{
public bool isSquare()
{
if(width==height)
return true;
return false;
}
//dikdortgenin alanini dondur.
public double area()
{
return width*height;
}
}

Rectangle, TwoDShape'i içerir. Ayrıca dikdörtgenin kare olup olmadığını
belirleyen isSquare() metodunu ve dikdörtgenin alanını hesaplayan area()
metodunu da ekler.

Kaynak: Herberth Schildt
Herkes İçin C#

Hiç yorum yok:

Yorum Gönder