← Back to list

Abstract Class ve Interface Farkı Nedir?

Abstract class (soyut sınıf) ve interface (arayüz), nesne yönelimli programlamada kullanılan iki farklı yapının temsil ettiği kavramlardır…

Taner Özer · 2024-03-08 22:20 · 0 claps · 1.8 min read
#abstract-class #interfaces #abstract-class-interface
Open on Medium ↗
Wiki topics: TLS · Design Tools & Workflow 🎮 · Gaming

Abstract Class ve Interface Farkı Nedir?

Abstract class (soyut sınıf) ve interface (arayüz), nesne yönelimli programlamada kullanılan iki farklı yapının temsil ettiği kavramlardır. İkisi de benzer amaçları taşısa da farklı kullanım senaryolarına sahiptirler.

İşte bu iki yapının temel farkları:

Abstract Class (Soyut Sınıf):

  • Abstract class, tamamlanmış (implemente edilmiş) ve tamamlanmamış (implemente edilmemiş) metotları içerebilen bir sınıf türüdür.
  • Soyut sınıflar, hem alanlar (fields) hem de metotlar içerebilir. İçinde işlevsel kodlar da bulundurabilir.
  • Sadece bir tane soyut sınıfı miras alabiliriz.
  • İlgili sınıfın genel yapısını ve ortak özelliklerini belirlemek için kullanışlıdır.
abstract class Sekil
{
    public abstract double AlanHesapla();
    public void BilgiGoster()
    {
        Console.WriteLine("Bu bir şekildir.");
    }
}

Interface (Arayüz):

  • Interface, yalnızca metot bildirimleri (imzaları) içeren bir yapıdır. Metotların işlevsel kodları arayüzde bulunmaz.
  • Bir sınıf, birden fazla arayüzü uygulayabilir (implemente edebilir).
  • Arayüzler, farklı sınıflar arasında genel bir anlaşma sağlamak ve belirli metotları taşıyan sınıflar oluşturmak için kullanılır.
interface ISekil
{
    double AlanHesapla();
}

Farklılıklar özetle şu şekildedir:

  • Abstract class, tamamlanmış ve tamamlanmamış metotlarla birlikte işlevsel kodları içerebilirken, interface sadece metot bildirimleri içerir.
  • Sınıf yalnızca bir tane soyut sınıfı miras alabilirken, birden fazla arayüzü implemente edebilir.
  • Soyut sınıf, bir şablon veya ortak bir özellikleri belirlemek için kullanılırken, arayüz, farklı sınıflar arasında genel bir anlaşma sağlamak ve belirli metotları taşıyan sınıflar oluşturmak için kullanılır.

Örnek 1: Diyelim ki bir oyun geliştiriyoruz ve farklı karakter sınıfları oluşturmanız gerekiyor. Karakterlerin bazı ortak özellikleri (ad, sağlık durumu, saldırı gücü) bulunuyor, ancak her karakter farklı şekilde saldırı yapabiliyor.

İşte burada Abstract Class ve Interface kullanımı:

// Abstract Class
abstract class Karakter
{
    public string Ad { get; set; }
    public int Saglik { get; set; }
    public int SaldiriGucu { get; set; }

    public abstract void Saldir();
}

// Interface
interface ISaldirabilir
{
    void Saldir();
}

class Asker : Karakter, ISaldirabilir
{
    public override void Saldir()
    {
        Console.WriteLine("Asker saldırı yapıyor!");
    }
}

class Okcu : Karakter, ISaldirabilir
{
    public override void Saldir()
    {
        Console.WriteLine("Okçu saldırı yapıyor!");
    }
}

Burada “Karakter” adında bir abstract sınıf ve “ISaldirabilir” adında bir arayüz (interface) bulunuyor. Her iki yapı da “Saldir” adında bir metot içeriyor. “Asker” ve “Okcu” adında iki farklı karakter sınıfı, hem “Karakter” sınıfını miras alıyor hem de “ISaldirabilir” arayüzünü implemente ediyor.

Örnek 2: Diyelim ki bir uygulama geliştiriyorsunuz ve farklı veritabanlarına bağlanmanız gerekiyor. Farklı veritabanları için bağlantı yöntemleri farklı olabilir.

İşte burada Interface kullanımı:

interface IVeritabaniBaglantisi
{
    void Baglan();
    void VeriCek();
}

class SqlServerBaglantisi : IVeritabaniBaglantisi
{
    public void Baglan()
    {
        Console.WriteLine("SQL Server veritabanına bağlanılıyor.");
    }

    public void VeriCek()
    {
        Console.WriteLine("Veri SQL Server'dan çekiliyor.");
    }
}

class MySqlBaglantisi : IVeritabaniBaglantisi
{
    public void Baglan()
    {
        Console.WriteLine("MySQL veritabanına bağlanılıyor.");
    }

    public void VeriCek()
    {
        Console.WriteLine("Veri MySQL'den çekiliyor.");
    }
}

Burada “IVeritabaniBaglantisi” adında bir arayüz (interface) bulunuyor ve farklı veritabanları için bağlantı metotları içeriyor. “SqlServerBaglantisi” ve “MySqlBaglantisi” adında iki farklı sınıf bu arayüzü implemente ederek farklı veritabanlarına bağlanma işlemlerini gerçekleştiriyor. Bu sayede farklı veritabanlarına bağlanmak için aynı arayüzü kullanabiliriz.

Okuduğunuz için Teşekkürler :)

dxtaner (Taner Özer) https://medium.com/@dxtaner Taner Özer | LinkedIn


메타데이터
post_id
8f4a45fe7f59
slug
abstract-class-ve-interface-farkı-nedir-8f4a45fe7f59
url
https://medium.com/@dxtaner/abstract-class-ve-interface-fark%C4%B1-nedir-8f4a45fe7f59
canonical_url
https://medium.com/@dxtaner/abstract-class-ve-interface-fark%C4%B1-nedir-8f4a45fe7f59
author_url
https://medium.com/@dxtaner
status
ok
fetched_at
2026-08-04 01:08:49