Abstraction Nedir?
Abstract kelime olarak “soyut, fiziksel ya da somut olmayan bir şey” olarak tanımlanır. Yazılımda ise Abstraction sınıfların temel özelliklerinin toplandığı ve kendisinden üretilen diğer sınıflara miras olarak bırakan yapıdır. Abstraction c# ve java gibi dillerde abstract class veya interface kullanılarak yapılır.
Abstract Class Nedir?
Abstract Class, ortak özellikli olan Class’lara base class olma rolünü üstlenir. Örneğin siz projenizde birden fazla Class oluşturup kullanmak istiyorsunuz. Ve oluşturacağınız Class’lar pek çok yönden ortak özellikleri içerisinde barındırıyor. İşte bu durumda Abstract Class kullanmanız kodunuzun okunabilir ve güncelleme sırasında hataya yol açmayacak şekilde olmasını sağlayacaktır.
Abstract Classların Özellikleri Nedir?
- Abstract anahtar sözcüğü ile oluşturulurlar.
- New anahtar sözcüğü ile oluşturulamazlar.
- Erişim belirleyicisi olarak sadece public alabilirler.
- Abstract classlarda property tanımı yapılabilir.
- Bir sınıf sadece bir tane abstract class dan inherit edilebilir. Çoklu kalıtıma izin vermezler.
- Abstract ve abstract olmayan metotlar bulunabilir.
Interface Nedir?
- Interface sadece kendisinden türetilecek sınıfların doldurabileceği metot bilgilerini bulunduran yapıdır.
- Interface Ozellıklerı Nedır?
- Interface anahtar sözcüğü ile oluşturulurlar.
- New anahtar sözcüğü ile oluşturulamazlar.
- Varsayılan bütün metotlar public abstract olarak tanımlanır.
- Bir sınıf birden fazla interface den inherit edilebilir. Çoklu kalıtıma izin verirler.
- Interface de sadece metotların isimleri bulunur. Body kısımları bulunmaz.
- Kullanıldıkları yerde metotların hepsi doldurulmalıdır.
Abstract Class ve Interface Benzerlikleri Nedir?
- New anahtar sözcüğü ile oluşturulamazlar.
Abstract Class ve Interface Farkları Nedir?
- Bir class birden fazla interface den kalıtım alabilir ancak bir tane abstract classdan kalıtım alabilir.
- Abstract classlarda oluşturulan metotların body kısmı doldurulur. Ancak interface de body kısmı doldurulamaz. Bu sebepten dolayı abstract class metotları doğrudan kullanılabilir iken interface metotları kullanmak için yeniden yazmamız gerekmektedir.
- Abstract classlarda erişim belirleyici kullanılabilir ancak interface de işaret belirleyici kullanılamaz.
Abstract Class Kullanım Örnekleri
Örnek olarak bir projemizde hem sql hem de txt log yapmamız gerekebilir. Loglama işlemlerinde öncesinde logkontrol metodu çalıştırılmakta ve bu bütün loglama türlerinde aynı işlemi yapmaktadır. Bu sebepten dolayı abstract class kullanabiliriz.
Ardından SqlLog ve Txtlog isimli iki class daha oluşturuyoruz.
Resimlerde görüldüğü gibi sadece log metodunu değiştiriyoruz diğerinde abstract class ın logkontrol metodunu kullanmasını istiyoruz.
Loglama yapmak istediğimizde MainLog isimli abstract classımızı hangisi ile loglama istiyor isek onunla oluşturuyoruz ve metotları direk kullanabiliyoruz.
Aynı örneği interface ile yaptığımızda ise ILog isimli bir interface oluşturup metot imzalarını ekliyoruz.
TxtLog ve SqlLog classımıza ILog interfacesini iplemente ediyoruz
Kullanmak istediğimiz yerde class ı kendisi ile oluşturup kullanıyoruz.
İki örnek arasındaki farka baktığımızda kod tekrarı açısından abstract class kullanımının daha verimli olduğu açıkça görülmektedir. Ancak Abstract Class yeterli olmadığı birden fazla metot imzasının ayrı ayrı iplemente edildiği durumlar büyük ölçekli projelerde sıklıkla görülmektedir. Bu tarz projelerde interface kullanılması gerekmektedir.
Örnek olarak IEntity isminde bir interface oluşturarak belirli CRUD metotlarını buraya yazıyoruz.
Ardından bu işlemleri bir classta oluşturuyoruz. Aşağıdaki resimde de görüleceği gibi IEntityRepository iplemente edilmektedir.
Ardından entitylerin interfacelerini oluşturuyoruz. Aşağıdaki resimde olduğu gibi İlk oluşturduğumuz interface iplemente ederek CRUD metotlarının gelmesini sağlıyoruz.
Ardından kullanmak istediğimiz service(business) classında EfEntityRepositoryBase classını BaseClass olarak kullanıp ICategoryDal iplemente işlemi gerçekleştiriyoruz.
Bu projede EfCategoryDal classının ICategoryDal iplementasyonunda methodları iplemente etmek yerine EfRepositoryBase abstract classını kullanarak doğrudan metotların çalışmasını sağlıyoruz. Bu yöntem ile hem genel CRUD işlemlerini tekrar yazmıyoruz hem de entity bazında özel CRUD işlemleri yapacak isek ilgili interface imzası açarak classta tanımlamasını yapabiliyoruz. Bu yöntem ile aynı entity kullanan bütün yerlerde ilgili kodun güncel kalmasını sağlıyoruz.













Yorum Yap