C# Interface Nedir: Örneklerle Anlatım

[XFB] Konu Bilgileri

Konu Hakkında Merhaba, tarihinde Programlama kategorisinde Garfield tarafından oluşturulan C# Interface Nedir: Örneklerle Anlatım başlıklı konuyu okuyorsunuz. Bu konu şimdiye dek 69 kez görüntülenmiş, 0 yorum ve 0 tepki puanı almıştır...
Kategori Adı Programlama
Konu Başlığı C# Interface Nedir: Örneklerle Anlatım
Konuyu başlatan Garfield
Başlangıç tarihi
Cevaplar
Görüntüleme
İlk mesaj tepki puanı
Son Mesaj Yazan Garfield
Yazılım süreçlerinde OOP, yani nesne yönelimli programlama, hem yazılımda esnekliğin sağlanması hem daha kaliteli kodların yazılması hem de verimli bir yazılım sisteminin oluşturulması için geliştiricilerin mutlaka öğrenmesi ve uygulaması gereken bir disiplindir.

OOP’nin kendi içerisinde çeşitli temel kavramları da bulunmaktadır. OOP temelli yazılım geliştirme süreçlerinde Interface de yine önemli konuların başında gelir. Bu yazımızda nesne yönelimli programlama dillerinden biri olan C# programlama dilinde Interface örneklerine ve Interface’nin genel özelliklerine değineceğiz.

Interface, Türkçe anlamı arayüz olan, yapısından kaynaklı olarak diğer sınıflar için yol gösterici rolü üstlenen, kendisinden implement edilen sınıf için doldurulması zorunlu alanları aktaran bir kavram olarak açıklanabilir.

Interface yapısı özellikle büyük projelerde tekrarlı kodlar yazmanın önüne geçmek, kodları daha stabil halde yazmak ve esnekliği, kodların tekrardan kullanılabilirliğini sağlamak adına kullanılması gereken yapıların başında gelmektedir. Bu konuda solid prensipleri yazımızı da inceleyebilirsiniz.

Interface Özellikleri


Nesne yönelimli programlamlama dillerinde web tabanlı, mobil tabanlı veya otomasyon sistemi yazılması fark etmeksizin Interface yapılarından yararlanılmalıdır. Interface özellikleri genel olarak aşağıdaki gibi sıralanabilir:

  • Alt sınıflar üst sınıflardan implement edilerek üst sınıfların özellikleri alt sınıflara aktarılır.
  • Interfaceler içerisinde metotlar ve propertyler haricinde kod blokları olmaz.
  • Interface içerisinde tanımlanan tüm metot ya da propertyler public olarak kabul edilmektedir.
  • Herhangi bir Interface özelliğindeki sınıf başka bir Interface sınıfından türetilebilir.
  • Interface sınıfını implement eden alt sınıflar, Interface sınıfındaki tüm özellikleri implement etmek zorundadır.
  • Interface sınıfında oluşturulan metotların hepsi gövdesizdir, sadece tanımlamak yeterlidir.
  • Interface yapıları kullanarak nesneler oluşturulamaz.

C# Interface Nasıl Kullanılır


C#’ta Interface olarak tanımlanması gereken bir sınıfta yapıların başına interface anahtar kelimesinin konulması gerekir.

C# programlama dilinde interface tanımlaması aşağıdaki gibidir:

Kod:
public interface IExampleInterface
{
    //Code..
}

Görüldüğü üzere interface anahtar kelimesi ile birlikte IExampleInterface sınıfı oluşturulmuştur. Interface ile oluşturulan sınıf isimlerinin başına ilgili sınıfın Interface olduğunu belirtmek için genellikle I yazılır.

Bu bir şart olmamakla birlikte yazılım geliştiricileri tarafından sınıf yapılarının daha iyi anlaşılması için tespit edilmiş ortak bir davranıştır.

C# Interface Örnekleri


C# programlama dilinde Interface örnekleri olarak aşağıdaki örnekleri verebiliriz:

Örnek 1:

İlk örneğimizde IDepartman adında bir arayüz oluşturarak içerisine property ve metot tanımlayalım.

Kod:
public interface IDepartman
{
    public string departmanIsmi { get; set; }
   
    public string departmanKontenjan { get; set; }

    public Task<object> departmanBilgisiGetir(string departmanIsmi, string departmanKontenjan);

}

IDepartman içerisine departmanIsmi ve departmanKontenjan olmak üzere iki adet property ile birlikte bu bilgileri
geri döndüren departmanBilgisiGetir adında bir metot tanımladık.

Ardından bu sınıfı implement edecek olan YazilimDepartman adından bir sınıf oluşturarak IDepartman Interface’si
içerisindeki tüm property ve metotları implement ettik.

Kod:
public class YazilimDepartmani : IDepartman
{
    public string departmanIsmi { get; set; }
    public string departmanKontenjan { get; set; }
   
    public async Task<object> departmanBilgisiGetir(string departmanIsmi, string departmanKontenjan)
    {
        var result = $"Yazılım departman ismi : {departmanIsmi} - Kontenjan : {departmanKontenjan}";
        return result;
    }
}

Görüldüğü üzere departmanBilgisiGetir metodu Interface sınıfı içerisinde gövdesi boş olarak tanımlanmış, implement eden sınıf içerisinde çağrılarak içi doldurulmuştur.

YazilimDepartmani sınıfından nesne üreterek ekrana aşağıdaki bilgileri yazdırabiliriz:

Kod:
YazilimDepartmani departman = new YazilimDepartmani();
departman.departmanIsmi = "Kod10";
departman.departmanKontenjan = "1000";

await departman.departmanBilgisiGetir(departman.departmanIsmi, departman.departmanKontenjan);

Ekran çıktısı : Yazılım departman ismi : Kod10 – Kontenjan : 1000

Örnek 2:

Bu örneğimizde öncelikle Dersler adından bir model oluşturalım.

Kod:
public class Dersler
{
    public string dersAdi { get; set; }
   
    public string dersKredi { get; set; }
}

Sonrasında ISinav adından bir Interface oluşturalım ve içerisine çeşitli propertyler ve metotlar tanımlayalım:

Kod:
public interface ISinav
{
    public string sinavAdi { get; set; }

    public List<Dersler> ders { get; set; }
   
    public decimal sinavPuani { get; set; }

    void dersBilgisi(List<Dersler> ders, string sinavAdi, Decimal puan)
}

Propertylerden biri Dersler modelini List halinde alındığına dikkat edelim. Bu sebeple metotta parametreye de bu şekilde
gönderilmesi gerekiyor.

Örneği bu şekilde yaparak Interfaceler içerisinde istenildiği kadar List, dizi tanımlamaları, döngülerin
de eklenebileceğini göstermek istedik.

YazilimDersleri adında bir class oluşturarak ISinav Interfacesini implement edelim.

Kod:
public class YazılımDersleri : ISinav
{
    public string sinavAdi { get; set; }
    public List<Dersler> ders { get; set; }
    public decimal sinavPuani { get; set; }
    
public void dersBilgisi(List<Dersler> ders, string sinavAdi, decimal puan)
{
    foreach (var item in ders)
    {
        Console.WriteLine($"{item.dersAdi} -- {item.dersKredi} -- {sinavAdi} -- {puan}");
    }
}
}


Yazılım alanında birden çok ders olabileceği düşünüldüğü için burada listeden dönen eleman sayısı kadar bir foreach döngüsü kurulup bilgilerin ekrana yansıtılması sağlanmak istendi.

Sınıftan nesne üreterek metoda bilgileri yollayalım ve ekran çıktsını alalım:

Kod:
YazılımDersleri yazılımDersleri = new YazılımDersleri();
yazılımDersleri.sinavAdi = "Yazılım Sınavları";

yazılımDersleri.ders = new List<Dersler>()
{
    new Dersler() {dersAdi = "C#", dersKredi = "4"},
    new Dersler() {dersAdi = "PHP", dersKredi = "6"}
};

yazılımDersleri.sinavPuani = 95;

yazılımDersleri.dersBilgisi(yazılımDersleri.ders, yazılımDersleri.sinavAdi, yazılımDersleri.sinavPuani);


Program.cs dosyasında yazılımDersleri adında bir nesne oluşturarak içerisine hem liste biçiminde hem de tekil olarak
değerleri atadık.

Ekran çıktısı ise aşağıdaki gibidir:

C# — 4 — Yazilim Sinavlari — 95
PHP — 6 — Yazilim Sinavlari — 95

Örnek 3:


Bu örneğimizde bir sınıfın birden fazla Interface’i implement ettiğini ve implement ettiği Interface’de tanımlanan
propertylere ulaştığını göreceğiz. Bunun için ilk olarak iki adet Interface sınıfı tanımlayalım:

İlk sınıfımız kişi bilgilerini tutan IKisi adında bir Interface olsun:

Kod:
public interface IKisi
{
    public string kisiAdi { get; set; }
   
    public string kisiSoyadi { get; set; }
}

İkinci sınıfımız ise çalışan bilgilerini tutan ICalisan adından bir Interface olsun.

Kod:
public interface ICalisan
{
    public string departman { get; set; }
   
    public decimal maas { get; set; }
}

Bir tane de yazilimci adında bir sınıf oluşturarak hem IKisi hem de ICalisan interface sınıflarından implement
alsın.

Kod:
public class Yazilimci : IKisi, ICalisan
{
    public string kisiAdi { get; set; }
    public string kisiSoyadi { get; set; }
    public string departman { get; set; }
    public decimal maas { get; set; }
}

Görüldüğü üzere Yazilimci sınıfında hem IKisi hem de ICalisan Interfacelerine ait tüm propertyler geldi.

Program.cs dosyasında Yazilimci sınıfından nesne üreterek bilgilere erişim sağlayabiliriz.

Kod:
Yazilimci yazilimci = new Yazilimci();
yazilimci.kisiAdi = "Kod";
yazilimci.kisiSoyadi = "10";
yazilimci.departman = "Yazılım";
yazilimci.maas = 10000;

Console.WriteLine($"{yazilimci.kisiAdi} {yazilimci.kisiSoyadi} {yazilimci.departman} {yazilimci.maas}");

Ekran çıktısı : Kod 10 Yazilim 10000

Interface konusunu 3 örnek ile anlatmaya çalıştık. Örnekler daha da arttırılarak C# başta olmak üzere nesne yönelimli programlama dilleri olan PHP, Java, Python gibi dillerde de örnekler yazılabilir.

Nesne yönelimli programlamada önemli bir yere sahip olan Interface yapısı ile kodların daha düzenli, tek kalemden
yürütülmesini sağlayacak şekilde dizayna sahip ve tekrar kullanılmasını sağlayacak seviyeye getirilmesi mümkündür.

Günümüzde yazılım geliştiren gerek bireysel yazılım geliştiricileri gerekse de şirket olarak bu işi kurumsal yapan yerler yapılarında böyle esnek yapılara yer vererek projelerinin daha sürdürülebilir olması yönünde çalışmalar yapmaktadır. Sizler de yazılım geliştiricisi olarak OOP’nin temel kriterlerinden biri olan Interface yapısını projelerinize entegre edebilirsiniz.

Okumaya devam et...
 
Üst