PYTHON OOP : Soyutlama-Abstraction
Herkese Merhabalar,
Bu bölümde OOP (Nesne Yönemli Programlama)‘un temel prensibinden biri olan Abstraction‘ı inceleyeceğiz.
OOP felsefesinden özetle bahsedersek ,OOP felsefesi programlama bilmek için herkesin öğrenmek zorunda olduğu kod yazarken bizi karmaşadan kurtaran, bize çok çeşitli imkanlar sağlayan bir yöntemdir.
OOP’UN Abstraction Prensibi;
OOP‘un gözbebeklerinden biri olan Abstraction derin bir niteliğe sahipte ve çok fazla karmaşık bilgiye sahip.
Biz bu bölümde kod parçalarıyla bilmemiz gerektiği kadarını açıklayacağız.
Abstract Class (Sınıf):
Abstract sınnıflar aynı özellikleri taşıyan nesneleri aynı çatı altında toplayıp, Nesnelere bir şablon çizerek çizilen şablondan çıkmadan istediğimiz gibi şekil vermemizi sağlar.
Abstract Class Özellikleri:
Abstract class‘ların içi ya boş bırakılır yada methodlarla donatılır. Abstract class olmak için en az 1 tane abstract method bulundurmak şarttır. Abstract Class içerisinde kullanılan methodları kalıtım verdiği bütün sınıflarda kullanmak zorundadır. Asla Abstract sınıftan örnek yaratamayız (new kelimesiylede oluşturamayız)
Biraz Abstraction kavramından örnekler vererek aklımızda bir şekil oluşturalım.
Örnek olarak;
Hayvan dediğimizde hepimizin aklına genel, elle tutulamaz soyut bir kavram gelir dimi?
Evet hayvan genel bir kavramdır.
Kuş dediğimizde ise aklımıza hayvanların kuş sınıfına ait canlılar gelir ve bu yöntemle hayvan kavramı kuş olarak somutlaştırılır. Yani Hayvan kavramı soyutken kuş kavramı somuttur. Abstraction kavramıyla ilgili verebileceğim en iyi örneğin bu olacağını düşündüm.
Pythonda Abstract Class Oluşturma:
Bu bölümde hem özellikleri hem de abstract sınıf oluşturmayı kod parçalarıyla açıklayalım:
from abc import ABC,abstractmethod
class Animal(ABC):
@abstractmethod
def Drink(self):
pass
@abstractmethod
def Walk(self):
pass
Öncelikle import etmemiz gereken bir kütüphane bulunmakta => abc (Abstract Base Class).
Bu modülü import ettikten sonra Abstract Sınıfımızı bu modülden kalıtım alarak oluşturmalıyız.
Yaratacağımız Abstract classta @abstractmethod olarak işaretlenen methodlar bu sınıftan kalıtım alacağımız bütün sınıflarda kesinlikle kullanılmak zorundadır. Yani Kod bloğumuzu incelediğimizde Play ve Walk methodlarını @abstractmethod olarak işaretleyerek onları bu sınıfın kalıtım vereceği sınıflarda kullanılmasını şart kıldık.
Peki ne işe yaradı bu işlem?
Cevap tam olarak şu Biz bu metotla kendi kural ve kaidelerimizi oluşturduk. Bu sayede kalıtım alacak concrete (katı) sınıflar bu kural ve kaidelere uymak zorunda kaldı.
Kod bloğumuzu incelemeye geri dönersek Animal adlı bir soyut sınıf yaratıp zorunlu metotları ekledik.
Diğer kod parçamızla devam edecek olursak;
class Bird(Animal): def Walk(self): print("Bird is walking") def Drink(self): print("Bird is drinkingg ") e=Bird()
Bu kısımda Abstract classımızdan kalıtım alarak Bird sınıfı oluşturduk ve Abstract Classımızda zorunlu tuttuğumuz metotlarımızıda burada kullandık ve nesnemizi yarattık. Programımız sorunsuz olarak çalışacak.
Peki ya biz Abstract classımızdan nesne oluşturmayı deneseydik ?
Hemen onuda görelim ;
e=Animal()
TypeError: Can’t instantiate abstract class Animal with abstract methods Drink, Walk
Hata aldık .
Çünkü asla ama asla bir Abstract classtan instance alınamaz.
Bunu asla unutmamalıyız!
Abstract Class‘ı başka nerede kullanabilirim? :
*Bir sınıf oluşturup istediğimiz yerde kullanmamızı sağlayarak kod tekrarından kaçınmamızı sağlar
*Değişiklik yapmak istediğimizde kolayca değişiklik yapıp diğer sınıflara bu değişikliği kolayca aktarabiliriz(Bütün sınıflarda değişiklik yapmamız gerekmez.)
*Kendi kural ve kaidelerimizi koymamızı sağlar
Öğrenme sürecinde olan biri olarak elimden geldiğince açıklamaya çalıştım.
Saygılar ve Sevgiler….