C# OOP, base ve this kullanımı

  • Konuyu başlatan 511840
  • Başlangıç Tarihi
  • Mesaj 10
  • Görüntüleme 681
Polimorfizm, Türkçe'ye çevirdiğimizde çoklu morfoloji anlamına geliyor. Morfolojiyi de bir canlı türüne ait spesifik özellikler olarak kaba şekilde düşünebiliriz.

Yazılıma uyarladığımızda da, bir nesnenin özelliklerine onun morfolojisi diyebiliriz. Polimorfizm ise o nesneden türeyen nesnelerin, bir üstteki nesnenin özelliklerine sahip olmasıdır.

Örneğin; kedilerin tamamı yürüyebilir, ses çıkarabilir, yemek yiyebilir. Fakat farklı kedi ırklarının kendine özel farklı özellikleri olabilir. Mesela kulakları eğri ise eğrilik yarıçapı gibi.

Bir örnek de şöyle olabilir; düzgün geometrik şekiller. Bütün düzgün geometrik şekillerin alanı vardır, uzaydaki konumu vardır. Fakat bu özelliklerin hesaplanması farklılık gösterebilir.

Bunu bir C# örneği ile daha iyi anlayalım.
C#:
public abstract class Shape {
    //Soyut sınıftır çünkü doğrudan bir Shape üretilmesini istemeyiz.
    public virtual int CalculateArea();
    public Point Location { get; set; }
    public List<int> BorderLengths { get; set; }
}

public class Square : Shape {
    public Square(Point location, int borderLength) {
        Location = location;
        BorderLengths =
            new List<int>(){ borderLength, borderLength, borderLength, borderLength };
    }
    
    public override int CalculateArea(){
        int borderLength = BorderLengths[0];
        return borderLength * borderLength;
    }
}

public class Rectangle : Shape {
    public Rectangle(Location location, int longBorderLength, int shortBorderLength){
        Location = location;
        BorderLengths =
            new List<int>(){ longBorderLength, shortBorderLength, longBorderLength, shortBorderLength };
    }
    
    public override int CalculateArea(){
        int long = BorderLengths[0];
        int short = BorderLengths[1];
        return long * short;
    }
}
Burada Square sınıfımız, şekilden türediği için otomatik olarak Location özelliğine, BorderLengths özelliğine ve sanal CalculateArea metoduna sahip. Rectangle sınıfımız da yine aynı özelliklere ve metoda erişime sahip. Prosedürleri farklı olduğu için farklı şekilde işlem yaptık fakat aynı özelliklere erişebiliyorsunuz.

Tabii ki belirli türe ait özellikleri de ekleyebilirsiniz. Ben bayağıdır yazılımla uğraşmadığım için şimdi fark ediyorum da bayağı bir paslanmışım :(
 

Technopat Haberler

Geri
Yukarı