Nesne Yönelimli Programlama (OOP), yazılım geliştirme sürecinde kullanılan ve programları nesneler olarak modelleyen bir programlama paradigmasıdır. Bu nesneler, belirli veri yapıları (özellikler, yani “attributes”) ve bu veri yapılarını işleyen işlevlerden (yani “methods”) oluşur. Python, OOP’yi destekleyen bir dildir ve bu paradigma, büyük ve karmaşık yazılımların daha düzenli ve modüler olmasını sağlar.
1. Temel Kavramlar
OOP’nin temel kavramları şunlardır:
- Sınıf (Class): Nesnelerin blueprint’idir. Sınıflar, nesnelerin sahip olacağı özellikler ve davranışlar hakkında bilgi içerir.
- Nesne (Object): Sınıfın bir örneğidir. Nesneler, sınıflarda tanımlanan özelliklere ve davranışlara sahiptir.
- Özellikler (Attributes): Sınıf veya nesne tarafından kullanılan verileri temsil eder. Örneğin, bir
Araba
sınıfınınrenk
vemodel
gibi özellikleri olabilir. - Metotlar (Methods): Sınıfın işlevleridir. Nesneler bu işlevleri kullanarak belirli işlemleri gerçekleştirir. Örneğin,
Araba
sınıfınınhareket_et
veyadur
gibi metotları olabilir. - Kalıtım (Inheritance): Bir sınıfın başka bir sınıftan özellik ve metotlarını devralmasına olanak tanır. Bu, kodun yeniden kullanılabilirliğini artırır.
- Çok Biçimlilik (Polymorphism): Aynı isimdeki metodun farklı sınıflarda farklı şekillerde çalışmasını sağlar.
- Kapsülleme (Encapsulation): Nesnelerin iç durumunu gizlemek ve yalnızca gerekli kısımlarını dışarıya açmak anlamına gelir.
2. Python’da Sınıf ve Nesne Oluşturma
Python’da bir sınıf tanımlamak için class
anahtar kelimesi kullanılır. Sınıflar genellikle büyük harflerle başlar.
a. Sınıf Tanımlama
Örnek:
class Araba:
# Yapıcı Metot (Constructor)
def __init__(self, renk, model):
self.renk = renk # Özellik tanımlama
self.model = model
# Metot Tanımlama
def hareket_et(self):
print(f"{self.model} hareket ediyor.")
def dur(self):
print(f"{self.model} durdu.")
b. Nesne Oluşturma
Bir sınıfı kullanarak nesne oluşturmak, sınıfın bir örneğini yaratmaktır.
Örnek:
# Araba sınıfından nesne oluşturma
araba1 = Araba("Kırmızı", "Toyota")
araba2 = Araba("Mavi", "Honda")# Metotları çağırma
araba1.hareket_et() # Toyota hareket ediyor.
araba2.dur() # Honda durdu.
Bu örnekte, Araba
sınıfından iki farklı nesne (araba1
ve araba2
) oluşturulur ve bu nesneler üzerinde metotlar çağrılır.
3. Kalıtım (Inheritance)
Kalıtım, bir sınıfın başka bir sınıftan özellik ve metotlarını devralmasını sağlar. Bu, kodun tekrar kullanılabilirliğini artırır ve sınıflar arasında ilişki kurmayı sağlar.
a. Kalıtım Tanımlama
Örnek:
class ElektrikliAraba(Araba): # Araba sınıfından miras alır
def __init__(self, renk, model, batarya_kap):
super().__init__(renk, model) # Üst sınıfın yapıcı metodunu çağırır
self.batarya_kap = batarya_kapdef sarj_et(self):
print(f"{self.model} şarj oluyor.")
b. Kalıtım Kullanımı
Örnek:
# ElektrikliAraba sınıfından nesne oluşturma
tesla = ElektrikliAraba("Beyaz", "Tesla Model S", 100)# Üst sınıftan gelen metotları kullanma
tesla.hareket_et() # Tesla Model S hareket ediyor.
tesla.sarj_et() # Tesla Model S şarj oluyor.
Bu örnekte, ElektrikliAraba
sınıfı, Araba
sınıfından miras alır ve Araba
sınıfındaki özellikleri ve metotları kullanabilir. Ayrıca kendi sarj_et
metotunu tanımlar.
4. Çok Biçimlilik (Polymorphism)
Çok biçimlilik, farklı sınıflardaki nesnelerin aynı isimdeki metotları farklı şekillerde kullanmasına olanak tanır. Bu, aynı arayüzü paylaşan farklı sınıfların farklı davranışlar sergilemesine olanak tanır.
a. Çok Biçimlilik Örneği
Örnek:
class Kedi:
def ses_cikar(self):
return "Miyav"class Kopek:
def ses_cikar(self):
return "Hav"# Polymorphism örneği
def sesleri_cikar(hayvan):
print(hayvan.ses_cikar())
kedi = Kedi()
kopek = Kopek()
sesleri_cikar(kedi) # Miyav
sesleri_cikar(kopek) # Hav
Bu örnekte, Kedi
ve Kopek
sınıfları aynı isimdeki ses_cikar
metodunu farklı şekilde uygular. sesleri_cikar
fonksiyonu, hangi hayvanın geçtiğine bağlı olarak doğru sesi çıkarır.
5. Kapsülleme (Encapsulation)
Kapsülleme, bir sınıfın iç durumunu dış dünyadan gizlemek için kullanılır. Bu, sınıfın iç veri yapılarına doğrudan erişimi kısıtlar ve güvenli bir erişim sağlar.
a. Özel (Private) Özellikler
Python’da, çift alt çizgi (__
) ile başlayan özellikler ve metotlar özel (private) olarak kabul edilir.
Örnek:
class Kisi:
def __init__(self, isim, yas):
self.isim = isim
self.__yas = yas # Özel özellikdef yas_goster(self):
return self.__yas# Nesne oluşturma
kisi = Kisi("Ahmet", 30)
print(kisi.isim) # Ahmet
print(kisi.yas_goster()) # 30
# print(kisi.__yas) # Hata verir: AttributeError
Bu örnekte, __yas
özelliği dışarıdan erişilemez, ancak yas_goster
metodu ile güvenli bir şekilde erişilebilir.
6. Sınıf ve Statik Metotlar
Python’da, sınıf düzeyinde çalışan metotlar tanımlamak mümkündür. Bu metotlar, belirli bir nesneye bağlı olmadan çalışır.
a. Sınıf Metotları
Sınıf metotları, @classmethod
dekoratörü ile tanımlanır ve genellikle sınıfın durumunu değiştirmek veya sınıfla ilgili bilgileri almak için kullanılır. Sınıf metotları, sınıfın kendisini ilk parametre olarak alır (cls
).
Örnek:
class Ornek:
sayac = 0def __init__(self):
Ornek.sayac += 1 @classmethod
def kac_tane(cls):
return f"Şu anda {cls.sayac} tane nesne var."
# Nesneler oluşturma
o1 = Ornek()
o2 = Ornek()
print(Ornek.kac_tane()) # Şu anda 2 tane nesne var.
b. Statik Metotlar
Statik metotlar, @staticmethod
dekoratörü ile tanımlanır ve sınıf veya nesne durumuna erişmez. Sadece sınıfla ilişkili bir işlevsellik sağlar.
Örnek:
class Hesaplayici:
@staticmethod
def topla(a, b):
return a + bprint(Hesaplayici.topla(5, 10)) # 15
Bu örnekte, topla
metodu herhangi bir nesne veya sınıf durumuna ihtiyaç duymadan çalışır.
Nesne Yönelimli Programlama (OOP), yazılım geliştirme sürecinde büyük ve karmaşık projeleri daha yönetilebilir hale getirir. Python, OOP’yi destekleyen bir dil olarak, sınıflar, nesneler, kalıtım, çok biçimlilik ve kapsülleme gibi temel OOP kavramlarını uygulamanıza olanak tanır. Bu yapı, kodun tekrar kullanılabilirliğini, bakımını ve okunabilirliğini artırır. OOP’yi anlamak ve doğru uygulamak, Python‘da daha sağlam ve esnek yazılımlar geliştirmenize yardımcı olur.
Bir yanıt yazın