Python'da Nesne Yönelimli Programlama Nedir?
Nesne Yönelimli Programlama (OOP), yazılım tasarımında kullanılan bir paradigmadır. OOP, verileri ve bu verilere yönelik işlemleri bir arada tutan nesneler (objects) etrafında yapılandırılır. Python, nesne yönelimli bir programlama dilidir ve sınıflar (classes) ve nesneler (objects) kullanarak OOP'nin temel prensiplerini destekler.
Temel Kavramlar
Sınıflar (Classes)
Sınıflar, nesnelerin yapı taşlarıdır. Bir sınıf, belirli bir türdeki nesnelerin özelliklerini (attributes) ve davranışlarını (methods) tanımlar. Sınıflar, nesneler için bir şablon olarak düşünülebilir.
Örnek:
class Araba:
def __init__(self, marka, model, yil):
self.marka = marka
self.model = model
self.yil = yil
def bilgi_goster(self):
print(f"{self.yil} {self.marka} {self.model}")
Nesneler (Objects)
Nesneler, sınıflardan oluşturulan örneklerdir. Bir nesne, sınıfın tüm özelliklerine ve yöntemlerine sahiptir.
Örnek:
araba1 = Araba("Toyota", "Corolla", 2020)
araba2 = Araba("Honda", "Civic", 2019)
araba1.bilgi_goster() # Çıktı: 2020 Toyota Corolla
araba2.bilgi_goster() # Çıktı: 2019 Honda Civic
init Metodu
init metodu, bir sınıfın kurucusu (constructor) olarak bilinir. Bir nesne oluşturulduğunda, init metodu otomatik olarak çağrılır ve nesnenin başlangıç durumunu ayarlar.
Örnek:
class Araba:
def __init__(self, marka, model, yil):
self.marka = marka
self.model = model
self.yil = yil
Özellikler (Attributes) ve Yöntemler (Methods)
Özellikler, nesnenin verilerini saklar. Yöntemler, nesnenin davranışlarını tanımlar. Bir sınıf içinde tanımlanan her fonksiyon bir yöntemdir.
Örnek:
class Araba:
def __init__(self, marka, model, yil):
self.marka = marka
self.model = model
self.yil = yil
def bilgi_goster(self):
print(f"{self.yil} {self.marka} {self.model}")
def yas_hesapla(self, mevcut_yil):
return mevcut_yil - self.yil
Kapsülleme (Encapsulation)
Kapsülleme, verilerin ve yöntemlerin bir arada tutulması ve dışarıdan erişimin sınırlandırılmasıdır. Python'da, özellikleri ve yöntemleri özel (private) yapmak için veya _ kullanılır.
Örnek:
class Araba:
def __init__(self, marka, model, yil):
self.__marka = marka # Özel özellik
self.__model = model # Özel özellik
self.__yil = yil # Özel özellik
def bilgi_goster(self):
print(f"{self.__yil} {self.__marka} {self.__model}")
araba1 = Araba("Toyota", "Corolla", 2020)
araba1.bilgi_goster() # Çıktı: 2020 Toyota Corolla
# Erişim denemesi (başarısız)
print(araba1.__marka) # Hata verir
Kalıtım (Inheritance)
Kalıtım, bir sınıfın başka bir sınıftan özellikleri ve yöntemleri devralmasını sağlar. Kalıtım, kodun yeniden kullanılabilirliğini artırır ve sınıflar arasında hiyerarşik bir yapı oluşturur.
Örnek:
class Tasit:
def __init__(self, marka, model, yil):
self.marka = marka
self.model = model
self.yil = yil
def bilgi_goster(self):
print(f"{self.yil} {self.marka} {self.model}")
class Araba(Tasit):
def __init__(self, marka, model, yil, kapi_sayisi):
super().__init__(marka, model, yil)
self.kapi_sayisi = kapi_sayisi
def bilgi_goster(self):
super().bilgi_goster()
print(f"Kapı sayısı: {self.kapi_sayisi}")
araba1 = Araba("Toyota", "Corolla", 2020, 4)
araba1.bilgi_goster()
# Çıktı:
# 2020 Toyota Corolla
# Kapı sayısı: 4
Çok Biçimlilik (Polymorphism)
Çok biçimlilik, aynı adı paylaşan farklı yöntemlerin farklı davranışlar sergilemesini sağlar. Bu, özellikle kalıtım ile birlikte kullanıldığında güçlü bir araçtır.
Örnek:
class Kus:
def ses_cikar(self):
print("Cik cik")
class Kedi:
def ses_cikar(self):
print("Miyav")
def sesleri_dinle(hayvan):
hayvan.ses_cikar()
kus = Kus()
kedi = Kedi()
sesleri_dinle(kus) # Çıktı: Cik cik
sesleri_dinle(kedi) # Çıktı: Miyav
Abstraction (Soyutlama)
Soyutlama, karmaşıklığı azaltmak için gerekli detayları gizler ve sadece önemli özellikleri öne çıkarır. Python'da soyut sınıflar ve soyut yöntemler oluşturmak için abc modülü kullanılır.
Örnek:
from abc import ABC, abstractmethod
class Hayvan(ABC):
@abstractmethod
def ses_cikar(self):
pass
class Kopek(Hayvan):
def ses_cikar(self):
print("Hav hav")
kopek = Kopek()
kopek.ses_cikar() # Çıktı: Hav hav
OOP'nin Avantajları
Modülerlik: Kod, bağımsız modüller halinde organize edilir.
Yeniden Kullanılabilirlik: Kod parçaları tekrar kullanılabilir.
Bakım Kolaylığı: Kodu anlamak ve bakımını yapmak daha kolaydır.
Esneklik: Kod, daha kolay genişletilebilir ve değiştirilebilir.
OOP'nin Kullanım Alanları
Nesne yönelimli programlama, birçok yazılım geliştirme alanında geniş kullanım alanına sahiptir:
Oyun Geliştirme: Oyun nesnelerinin ve mantıklarının yönetimi.
Veri Tabanı Yönetimi: Veritabanı nesnelerinin ve işlemlerinin yönetimi.
Web Geliştirme: Web uygulamaları ve bileşenlerinin organizasyonu.
Mühendislik Uygulamaları: Kompleks sistemlerin modellenmesi ve simülasyonu.
Sonuç
Bu blog yazısında, Python'da nesne yönelimli programlamanın (OOP) temel kavramlarını ve uygulamalarını öğrendiniz. Sınıflar ve nesneler oluşturmayı, kapsülleme, kalıtım, çok biçimlilik ve soyutlama kavramlarını incelediniz. OOP, Python programlamada kodunuzu daha modüler, yeniden kullanılabilir ve bakımı kolay hale getirmenin güçlü bir yoludur.
Python temellerini atıp, veri analizi ve bilimi için yetkinlik kazanmak istiyorsanız, 1 aylık yoğun Python kampına hemen kayıt olabilirsiniz. ~40 saat canlı ders, ~50 adet kapsamlı proje, ~15 adet quiz ve sayısız kodlama egzersizinden oluşan, Finlandiya eğitim modellerinden esinlenilerek Helsinki'de geliştirilen interaktif ve pratik odaklı eğitim programına hemen göz atın !