Kalıtım (Inheritance) ve Polimorfizm (Polymorphism) yönelimli programlama (OOP) kavramlarıdır
Kalıtım (Inheritance), bir nesnenin özelliklerini başka bir nesneyle paylaşmasına olanak sağlayan bir nesne yönelimli programlama (OOP) kavramıdır. Bir sınıfın, başka bir sınıftan özelliklerini alarak (miras alarak) yeni bir sınıf oluşturmasıdır. Miras alınan sınıf, üst sınıf veya ana sınıf olarak adlandırılırken, miras alan sınıf alt sınıf veya türemiş sınıf olarak adlandırılır. Bu sayede üst sınıfın özellikleri, alt sınıf tarafından kullanılabilmektedir.
Polimorfizm (Polymorphism), farklı sınıfların, aynı isimli metotları aynı şekilde kullanabilmesini sağlayan bir OOP kavramıdır. Bu sayede kodun daha okunaklı ve esnek hale gelmesine olanak sağlar. Polimorfizm, bir nesnenin birden fazla tipte olabilmesine de olanak sağlar. Örneğin, aynı "alanHesapla" metodunu farklı geometrik şekillerde kullanabilirsiniz. Kare için "alanHesapla" metodu, kenar uzunluğunu kullanırken, daire için "alanHesapla" metodu yarıçapı kullanacaktır. Böylece aynı metot, farklı şekillerde kullanılabilmektedir.
Özetle, kalıtım bir sınıfın özelliklerini başka bir sınıfla paylaşırken, polimorfizm farklı sınıfların aynı metotları kullanabilmesini sağlar. Her ikisi de OOP'nin temel kavramlarıdır ve yazılım geliştirme sürecinde sıklıkla kullanılırlar.
Inheritance ornek :
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public class Student : Person
{
public string StudentId { get; set; }
public double GradeAverage { get; set; }
}
public class Teacher : Person
{
public string Subject { get; set; }
public int YearsExperience { get; set; }
}
Bu örnekte, Person
sınıfı, adı ve yaşını depolayan iki özelliği içerir. Student
ve Teacher
sınıfları, Person
sınıfından kalıtım alırken, kendi özelliklerini de eklerler. Student
sınıfı, öğrenci kimliği ve not ortalaması özelliklerine sahiptir. Teacher
sınıfı, öğrettiği ders ve deneyim yılı özelliklerine sahiptir.
Bu sayede Student
ve Teacher
sınıfları, Person
sınıfının özelliklerine sahip olurken, kendi özelliklerini de ekleyebilirler. Bu sayede kodun tekrarını engelleyerek daha temiz ve okunaklı bir kod yazımı sağlanmış olur.
Polimorfizm (Polymorphism) ornek ;
public abstract class Shape
{
public abstract double CalculateArea();
}
public class Circle : Shape
{
public double Radius { get; set; }
public override double CalculateArea()
{
return Math.PI * Math.Pow(Radius, 2);
}
}
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public override double CalculateArea()
{
return Width * Height;
}
}
public class Triangle : Shape
{
public double Base { get; set; }
public double Height { get; set; }
public override double CalculateArea()
{
return (Base * Height) / 2;
}
}
Bu örnekte, Shape
sınıfı soyut bir sınıf olarak tanımlanmıştır ve CalculateArea()
adında soyut bir metot içermektedir. Circle
, Rectangle
ve Triangle
sınıfları, bu Shape
sınıfından kalıtım alırken, kendi CalculateArea()
metotlarını da implemente ederler.
Böylece, her bir şekil sınıfının CalculateArea()
metotu, farklı bir hesaplama yöntemi kullanarak alan hesaplar. Bu sayede, farklı tipte nesneler oluşturulurken aynı isimli metot kullanılarak alan hesaplaması yapılabilir.
Örneğin:
Shape circle = new Circle() { Radius = 5 };
Shape rectangle = new Rectangle() { Width = 4, Height = 6 };
Shape triangle = new Triangle() { Base = 3, Height = 4 };
Console.WriteLine($"Circle area: {circle.CalculateArea()}");
Console.WriteLine($"Rectangle area: {rectangle.CalculateArea()}");
Console.WriteLine($"Triangle area: {triangle.CalculateArea()}");
Bu kod bloğu, farklı tipteki nesneleri, Shape
sınıfı üzerinden referans alarak aynı CalculateArea()
metotunu kullanarak alanlarını hesaplar. Bu şekilde, farklı sınıfların aynı isimli metotları farklı şekilde çalıştırılarak, kodun daha esnek ve okunaklı hale getirilmesi sağlanmış olur.