Abstract ve interface’ler,abstract vs interface arasındaki farklar,abstract vs interface arasındaki farklar c#,abstract sınıf nedir c# , interface nedir c# ,abstract class vs interface

Merhaba ,

Bu yazıda farkında olarak ya da olmayarak kullandığımız Interface ve abstract class ve farklarından bahsedeceğim. Interface kavramı bir kalıp olarak implement tümcesiyle birlikte anılır. Türkçe karşılık olarak ara-birim diye nitelendirebiliriz. Abstract(soyut) sınıflar ise modifier olarak tanımlamak mümkündür. Genellikle is-a yapısı ile anılır. İki yapıda nesne yönelimli programlamada kullanılan metot ya da property türüdür diyebiliriz. Abstract sınıflar başka bir sınıfın basic yani temelini oluşturur. New sözcüğüyle birlikte yeni bir nesnesi oluşturulamaz. İçersinde yine aynı şekilde abstract metodlar kullanılabilir. Basic alınan abstract sınıflardaki metodlar override edilir.

Genel bir bilgi verdik , akabinde abstract ve interface kavramlarını ayrı şekilde inceleyelim birer örnekle ve sonunda kıyaslamayla yazımızı sonlandıralım.

oguzaltuntas_abstract_interface_abstract class vs interface

Abstract sınıf; Bir örnekle açıklayalım.

oguzaltuntas_abstract_interface_abstract class vs interface3

 

oguzaltuntas_abstract_interface_abstract class vs interface2

Listem adında abstract sınıf tanımlandı. Void bilhare input almayan ve return yapmayan bir metod tanımladım.Metodlarda süslü parantez kullanılmadı çünkü metodun içinid tanımlamadık.

Bir sınıf daha tanımlayaıp inherit ( kalıtım) alalım oluşturduğumuz abstract sınıftan.

 

oguzaltuntas_abstract_interface_abstract class vs interface4

Kalıtım alınan tüm sınıflarda farklı ise, abstract olarak tanımlanır ve kalıtılan tüm sınıflarda metot override edilir.

 

Interface sınıf;

Sözleşme gibi düşünebiliriz interface’i imzalarsanız yapmak zorundasınız. Sınıflardan bir farkıda implement ediyoruz. Bunları can-do (yapabilir) diyoruz.

Interface’ler de Abstract sınıflar gibi new ile oluşturulamazlar,

  • Bir sınıf birden fazla interface’den türeyebilir
  • İçi dolu metod bulunduramazlar
  • public static final değişkenler dışında herhangi bir değişken bulunduramazlar

 

 

abstract class vs interface kıyaslamasını derlersek ;

 

  • Abstract classları kullanmak hız açısından avantaj sağlar.
  • Interface de yeni bir metod yazdığımız zaman bu interfaceden implement ettiğimiz tüm classlarda bu metodun içini tek tek doldurmak gerekiyor ancak abstract classlarda durum farklıdır burada bir metod tanımlayıp içini doldurduğumuzda abstract sınıfımızdan türetilmiş bütün sınıflar bu özelliği kazanmış olur.
  • Kalıtım sağlamak istiyorsak abstract classlar kullanmamız gerekir.
  • Extends’ten sonra sadece bir sınıf olur. implements’ten sonra istediğimiz kadar arayüz olur.
  • Eğer türeteceğimiz classlarda belli başlı varsayılan özellikleri tekrar tekrar kopyala-yapıştır yapmak istemiyorsak o zaman abstract class kullanmamız gerekir. Çünkü abstract classlarla bir metodu tüm alt classlarda varsayılan metod şeklinde tanımlayabiliriz ve alt classlarda bunları tekrar yazmamıza gerek kalmaz kalıtımla aktarılmış olur.
  • Interface ile yapabildiğimiz herşeyi hatta daha fazlasını abstract classlar ile de yapabiliriz.
  • Interfacelerde metodların içerisini dolduramayız ama abstract classlarda doldurabiliriz Böylece bütün alt sınıfların belli bir özelliğe sahip olmasını sağlayabiliriz.
  • Interfaceler çoklu kalıtımı sağlamaya yardımcı abstract classlar ise çoklu kalıtımı desteklemez.
  •  Abstract; kendisinden yeni bir nesne yaratılmayacak ancak başka sınıfların superclassı olarak kullanılabilecek. Interface; bir işi gerçekleştirecek tüm sınıfların aynı metod tanımlarını içermesini sağlayacak.
  • Interface de yeni bir metod yazdığımız zaman bu interfaceden implement ettiğimiz tüm classlarda bu metodun içini tek tek doldurmak gerekiyor ancak abstract classlarda durum farklıdır burada bir metod tanımlayıp içini doldurduğumuzda abstract sınıfımızdan türetilmiş bütün sınıflar bu özelliği kazanmış olur
  • Interface ,çoklu kalıtımı sağlamaya yardımcı abstract classlar ise çoklu kalıtımı desteklemez(poly).
  • Interfacelerde metodların içerisini dolduramayız ama abstract classlarda doldurabiliriz Böylece bütün alt sınıfların belli bir özelliğe sahip olmasını sağlayabiliriz.
  • Eğer türeteceğimiz classlarda belli başlı varsayılan özellikleri tekrar tekrar kopyala-yapıştır yapmak istemiyorsak o zaman abstract class kullanmamız gerekir. Çünkü abstract classlarla bir metodu tüm alt classlarda varsayılan metod şeklinde tanımlayabiliriz ve alt classlarda bunları tekrar yazmamıza gerek kalmaz kalıtımla aktarılmış olur.
  • Kalıtım sağlamak istiyorsak abstract classlar kullanmamız gerekir.

Oğuz ALTUNTAŞ © 2017

error: Oğuz ALTUNTAŞ © 2020