interface nedir örnekli anlatım

INTERFACE NEDİR? ÖRNEKLİ ANLATIM (C#)


Merhaba arkadaşlar bugün ki yazımda sizlere interface kavramını anlatmaya çalışacağım, daha sonra ise interface konusunu sizlere bir örnekle pekiştirmeye çalışacağız.

Bu örnek projeyi ayrıca GitHub hesabıma ekleyeceğim, kaynak koduna ulaşıp üzerinde oynamalar yapabilesiniz diye. Siz çok uzattın demeden başlıyorum 🙂

Interface yapısı syntax olarak classlara benzer, hatta bu yapıyı bilmeyen birisi başta bir class olduğunu zannedebilir ama kesinlikle bir class değildir.

Interfaceler içlerine kod yazılmayan, yapıcı metod ekleyemeyeceğiniz, sadece tanımlamaların yapıldığı ve bu tanımlamalar doğrultusunda kendisinin rehberlik ettiği classların içerisinde yapıların oluşturulmasını(implement edilmesini) sağlayan bir yapıdır.

Classlardan en büyük farkı ise bir class’a birçok interface ile rehberlik edebiliriz ama bir class ancak bir tane classtan türeyebilir. 

Kısaca interfacelerin özelliklerini söylemek gerekirse şunlardır;

  • Interface içerisinde yalnızca metodlar ve propertyler tanımlanır, field tanımlanamaz.Yani gidipte “string ad;” diyemezsiniz. interfacelerde sadece get ve set metodu içeren propertyler üzerinden değişken tanımlaması yapabilirsiniz.
  • Interface üyeleri herhangi bir access modifier’ a sahip değillerdir , implement edilen class tarafından bütün üyeler erişilebilir. Kısacası rehberlik ettiği tüm class’lara karşı publictir 😉
  • Interface’ ler loosely coupled uygulamalar oluşturmaya yardımcı olur. Aralarında bir interface oluşturarak iki class arasındaki bağlantıyı azaltırız. Bu şekilde, eğer bu class’lardan biri değişirse, buna bağlı olan class üzerinde hiçbir etkisi olmaz..
  • C# da multiple inheritance yoktur bir class birden fazla class’ı inherit edemez.
  • C# da bir class birden fazla interface’i implement edebilir fakat bunu inheritance ile karıştırmamak gerekir, interface yapısını multiple inheritance amacıyla kullanmak tamamen yanlış bir yaklaşımdır, interface yapısı multiple inheritance yapmak için oluşturulmamıştır.
  • Inheritance ile kodu bir kez yazar ve tüm bu kodu tekrar yazmanıza gerek kalmadan yeniden kullanırız.
  • Interface ile yalnızca uygulama class’ının içermesi gereken üyeleri implement ederiz.

Şimdi interface kullanımına ile bir örnek göstereyim.

interface impelmentasyon

Bir console uygulaması açtım ve içerisine 3 interface bir class ekledim. Resimde de görüldüğü gibi MyClass isimli class’a istediğimiz kadar interface rehberlik edebiliyor. Şimdi interfacelerin içlerinde bazı metod tanımlamaları yapmış olalım, gördüğünüz gibi interfacelerin içerisinde sadece tanımlamalar yapılır asla tanımlamaların içerisine kod yazılmaz.

Tanımlama yaptığımız için interfacelerin rehberlik ettiği MyClass isimli sınıf hata veriyor bunun sebebi bu tanımlamaların bu sınıfa implemente edilmemesidir. Aşağıdaki resimde hatayı kutucuğun içerisinde göreceksiniz. Visual Studio bize eksik üyeleri implemente etmemizi söylüyor ve hata veriyor. 

interface impelmentasyon

Şimdi  “implement missing member” yazan kutucuğa basıp implementasyonlarımızı yaptıktan sonra MyClass isimli sınıfımıza otomatik yapılan implementasyonları göreceğiz.

interface impelmentasyon

Gördüğünüz gibi MyClass’a rehberlik eden interfacelerin içlerinde yaptığımız metod tanımlamaları otomatik olarak MyClass sınıfının içerisine implement edildi. Artık class’ıni içerisinde metodların içlerini istediğimiz gibi doldurabilir ve kod yazabiliriz. Basitçe metodların içlerini dolduralım.

bir class'a birden çok rehberlik interface

Gördüğünüz gibi metodların içlerine kendilerinin tanımlanmış olduğu interfaceleri yazdık. Şimdi bu metodları main metod içerisinden çağırıp  çalıştıralım.Şimdi çok dikkatli inceleyelim.

main methoddan interface çağırılması

Interface denildiğinde herkes o newlenemeyen değilmiydi yaw der,

evet interfacelerde bu yapılamaz lakin yukarıdaki resimde gördüğünüz gibi rehberlik ettiği sınıf üzerinden new diyerek nesnemizi oluşturabilir ve hiç karışıklığa mahal vermeden tanımlamalarımıza erişebiliriz.

Yukarıda metodlarımızı çağırdık ayrıca dikkat ettiyseniz orada size özellikle bir hata gösterdim bu hatada interfacemizin yanında new kavramını kullanmışız ve bize visual studio “Bak kardeş interface ile new kullanamazsın bu olsa olsa abstract sınıf olur ben bu interfaceyi abstract sınıfa çevireyim mi?” demiş.

Kısa bir dipnot abstract sınıflar interfaceler gibidir tek farkları bir class sadece bir abstract sınıftan rehberlik alabilir ve abstract sınıfların içerisinde tanımlamanın yanı sıra o tanımlamaların içlerine kenarlarına köşelerine kodlarda yazaqbilirsiniz birde abstract sınıflar üzerinden new diyerek nesne üretebilirsiniz, neyse konu dağılmadan interfacelere dönelim 🙂

INTERFACE NEDEN ve NASIL KULLANILIR?


NE İŞE YARAR? NORMAL BİR CLASS KULLANSAK OLMAZ MI?

Arkadaşlar Nesneye Yönelik Programlama yapan yazılımcı abilerimiz uzun zamandır bu işi tecrübe etmişler ve tüm yazılım dünyası tarafından kabul gören bir standart geliştirmişler ve daha iyisini bulana kadar en iyisi bu diyerek thug life yapmışlar.

İşte bu yazılım standardının ismi SOLİD, sizlere şimdi SOLİD nedir diye teker teker açıklamayacağım ama bu SOLİD’in içerisindeki i harfi Interface Segregation Principle’dır.

YENİ ÖRNEK

Örneğin bir projeniz var bu projede şuanda hem Sql Server hemde Oracle veri tabanı kullanıyorsunuz

Projenizde sadece oracle üzerinden işlem yaptığınız bir class olursa oracle’a bağımlısınız demektir veya iki gün sonra birde My Sql kullanmanız gerekti bu durumda ne olacak bu durumlar sizi her bir veri tabanı için ayrı kod yazmaya zorlar.

Bu durumda interface yapısı bizi kurtarıyor. Şimdi dediklerimi bir örnekle aşağıda anlatayım.

ICustomer interface

ICustomer isimli bir interfacemiz olsun bu interface’in içinde customer üzerinde yapacağımız veri tabanı metodlarını tanımlayalım.(Ekleme Silme Güncelleme)

SqlServer:ICustomer

ICustomer interfacesinin rehberlik ettiği SqlServer sınıfımızda SqlServer üzerinde işlem yaptığımızda kullanacağımız metodlar olsun.

Oracle:ICustomer

SqlServer’da olduğu gibi aynı şekilde Oracle üzerinden işlem yapılacağında kullanılacak metodlarda OracleServer classımızda olsun.

Dikkat ettiyseniz SqlServer ve Oracle classlarımızın ikiside ICustomer interfacesinden rehberlik alıyor ve bu şu demek oluyor;

Ekleme Silme ve Güncelleme metotlarımız bu sınıflara implemente ediliyor.

CustomerManager class

Şimdi iş katmanımız olarak varsayacağımız CustomerManager sınıfımızda bir Add metodu oluşturduk ve parametre olarak ICustomer tipinde bir nesne verdik.Şimdi bu metodu main metoddan yani arayüzden çağıralım.

new class with interface parameters

Ekleme işlemi için “Add” metodunu çağırdığımda parametre olarak alacağı nesneyi bize soruyor Sql sınıfından bir nesne mi alacağım yoksa Oracle sınıfınan bir nesne mi.

Bu sayede birden fazla veri tabanı üzerinden işlem yaparken bağımlılıkları minimuma indirip projemizin kullanılabilirliğini arttırmış oluruz,

eğer ki classlarımız bir interfaceden türemeseydi ben CustomerManager sınıfından işlem yaptıracağım zaman new yazdığımda ya sadece Oracle sınıfı çıkardı yada sadece SqlServer sınıfı.

Burada Interface kullanmanın bize sunmuş olduğu bir kolaylık da şudur;

Örneğin projemde artık Sql Server ve Oracle yanı sıra birde MySql kullanmam gerekiyor diyelim.Yapmam gereken tek şey birde MySql isimli ICustomer interface’sinden rehberlik alan bir sınıf oluşturmak.

MySql:ICustomer
interface
interface new MySql

Zaten CustomerManager sınıfında parametre olarak ICustomer tipinde bir nesne gönderiyor olduğumuz için ve yeni oluşturduğumuz MySql sınıfı da

bu interfaceden rehberlik aldığı için arayüzümüzde metodumuzu kullanırken otomatik olarak artık MySql nesnesi ile MySql sınıfı içerisindeki MySql DB’si için tasarlanmış Add metoduyla veri ekleme işlemi yapıyor olabileceğiz.

interface output

Gördüğünüz gibi her çağırdığımız Add metodu kendi DB’si için özel olarak tasarlanmış Add metodunu olarak çalıştırılıyor. 

Yazıdaki Projenin Kaynak Kodlarına erişim için TIKLAYINIZ.

Entity Frameework Data First yöntemini anlattığım ve bu konu hakkında hazırladığım örnek projede Interface kullandım ve buradaki örnek gerçek hayatta verileriniz üzerinden işlem yaparken interface kullanımına güzel bir örnek bu projeyi de ayrıca incelemenizi tavsiye ederim. 

Entity Frameework Data First with Interface and Linq Projesinin Kaynak Kodlarına erişim için TIKLAYINIZ.

Bir sonraki yazımızda görüşmek üzere.

Write a Message