C# Programlama Dilinde Abstract Class ve Interface Kullanımı

ERCAN ERGİN
3 min readJan 2, 2024

--

abstract and interface class

C# programlama dilinde, abstract class ve interface iki önemli kavramdır. Bu yazıda, her iki yapıyı anlayarak ve doğru bir şekilde kullanarak kod yazmanın avantajlarına odaklanacağız.

Abstract Class Nedir?

Abstract class, bir sınıfın genel yapısını tanımlayan, ancak tamamlanmış bir uygulama sağlamayan bir türdür. Yani, içerisinde abstract (soyut) metodları barındırabilir ve bu metodları miras alan sınıfların uygulamasını zorunlu kılabilir. Bir tanım daha yapalım. Abstract sınıflar, bir sınıfın örneklerini oluşturmanın mümkün olmadığı, yani soyut bir yapıya sahip olan sınıflardır. Bu sınıflar genellikle soyut metotlar (abstract methods) içerirler. Soyut metotlar ise sadece imza (signature) tanımına sahiptir, yani içerikleri soyut sınıfın alt sınıfları tarafından uygulanmalıdır.

Bir abstract sınıf tanımlamak için abstract anahtar kelimesi kullanılır. Örneğin:

public abstract class Sekil
{
public abstract double AlanHesapla(); // Soyut metod
}

Yukarıdaki örnekte, Sekil abstract sınıfı, şekillerin genel bir yapısını tanımlar. Ancak, AlanHesapla metodunu miras alan sınıfların implemente etmesini bekler.

Abstract Sınıfların Avantajları

  1. Yeniden Kullanılabilirlik: Abstract sınıflar, ortak özelliklere sahip sınıfları gruplamak için kullanılabilir. Bu sayede kodun yeniden kullanılabilirliği artar.
  2. Zorunlu İmplementasyon: Abstract sınıflar, alt sınıflarında belirli metotların implementasyonunu zorunlu kılar. Bu, kodun tutarlılığını sağlar.
  3. Soyutlama: Soyut sınıflar, genel bir yapı sağlayarak soyutlama (abstraction) prensibine uygun kod yazımını destekler.

Abstract Sınıfları Nasıl Kullanırız?

Abstract sınıfları kullanmak oldukça basittir. Önce soyut sınıfı tanımlarız, sonra bu sınıftan türetilmiş alt sınıflar oluştururuz. Örneğin:

class Dikdortgen : Sekil
{
public double Uzunluk { get; set; }
public double Genislik { get; set; }

public Dikdortgen(double uzunluk, double genislik)
{
Uzunluk = uzunluk;
Genislik = genislik;
}

public override double AlanHesapla()
{
return Uzunluk * Genislik;
}
}

Yukarıdaki örnekte, Dikdortgen sınıfı Sekil sınıfından türetilmiştir ve soyut metodu olan AlanHesaplayı implement etmiştir.

Interface Nedir?

Interface, sınıflara belli bir davranış eklemek için kullanılan bir yapıdır. Bir interface, sadece metod bildirimlerini içerir, ancak içerisinde bir uygulama bulunmaz. Başka bir tanım daha ekleyelim.

Interface, bir sınıfın veya struct’ın belirli bir davranışı desteklemesini sağlayan bir sözleşmedir. Yani, bir arayüz tanımlanarak, bu arayüzü implemente eden sınıfların belirli metodları veya özellikleri sağlaması beklenir. Bu sayede, farklı sınıflar aynı arayüzü kullanarak ortak bir davranış sergileyebilir.

public interface ILogger
{
void Log(string message);
void LogError(string error);
}

Yukarıdaki örnekte, ILogger adında bir arayüz tanımlanmıştır. Bu arayüz, Log ve LogError metodlarını içermektedir. Herhangi bir sınıf, bu arayüzü implemente ederek bu iki metodun gerçek işlevselliğini sağlamak zorundadır.

Interface Class Nasıl Kullanılır?

public class FileLogger : ILogger
{
public void Log(string message)
{
// Loglama işlemleri dosyaya yapılır
}

public void LogError(string error)
{
// Hata loglama işlemleri dosyaya yapılır
}
}

Yukarıdaki örnekte, FileLogger sınıfı ILogger arayüzünü implemente etmektedir. Bu da demek oluyor ki, FileLogger sınıfı Log ve LogError metodlarını içermek zorundadır. Bu sayede, FileLogger sınıfı, bir ILogger türü olarak kullanılabilir.

Avantajları Nelerdir?

  1. Esneklik

Arayüzler(Interfaces), bir sınıfın birden fazla arayüzü(Interface) implemente etmesine olanak tanır. Bu sayede, aynı anda birçok farklı davranışa sahip olabilen sınıflar oluşturabilirsiniz.

2. Bakım Kolaylığı

Arayüzler, bir uygulamadaki değişikliklere uyum sağlamak için kullanılabilir. Bir arayüzde yapılan değişiklikler, arayüzü implemente eden tüm sınıfları etkiler, bu da kodun bakımını kolaylaştırır.

3. Test Edilebilirlik

Arayüzler, bir sınıfın mock (taklit) edilmesini kolaylaştırır. Bu da yazılım testlerini daha etkili bir şekilde gerçekleştirmenize yardımcı olur.

Abstract Class ve Interface Arasındaki Farklar

Abstract Class ve Interface Arasındaki Farklar

Hangisini Kullanmalıyım?

  • Eğer bir sınıfın genel yapısını tanımlamak ve bazı metotları uygulamak istiyorsanız abstract class kullanabilirsiniz.(Base — Temel Class)
  • Eğer bir nesnenin belirli bir davranış setini zorlamak istiyorsanız interface kullanabilirsiniz.

Abstract class ve interface, kodunuzu düzenli, esnek ve bakımı kolay hale getirmenize yardımcı olabilir. Hangi yapıyı kullanacağınıza karar verirken, ihtiyaçlarınızı ve tasarım prensiplerinizi göz önünde bulundurmalısınız.

Umarım bu yazı, C# programlama dilinde abstract class ve interface kullanımı konusunda size rehberlik eder. İyi kodlamalar 👀

--

--