Python’da Nesne Yönelimli Programlama (OOP) Nedir ve Nasıl Kullanılır? – Web Tasarım & Programlama

Python, nesne yönelimli programlama (OOP) yapabilen bir programlama dilidir. OOP, kodlama sürecinde nesnelerin kullanılmasını ve nesne yönelimli bir yaklaşımın benimsenmesini sağlar. Bu makalede, Python’da OOP’nin ne olduğunu, neden kullanılması gerektiğini ve nasıl kullanılacağını ele alacağız.
Nesne Yönelimli Programlama Nedir?
Nesne yönelimli programlama, bir programlama paradigmasıdır. Bu yaklaşım, kodlamayı daha organize ve yönetilebilir hale getirir. OOP, kodlama sürecinde nesnelerin kullanılmasını ve nesne yönelimli bir yaklaşımın benimsenmesini sağlar. Bu, nesneleri ve bu nesnelerin arasındaki ilişkileri kullanarak problemleri çözmeyi amaçlar.
Bir nesne, bir şeyin veya bir varlığın bir temsilcisidir. Bir nesne özellikleri ve yöntemleri olan bir varlıktır. Özellikler, nesnenin özelliklerini belirtirken, yöntemler nesnenin ne yapabileceğini belirtir.
Neden Nesne Yönelimli Programlama Kullanılır?
Nesne yönelimli programlama, kodlama sürecini daha anlaşılır hale getirir ve kodların tekrar kullanılmasını kolaylaştırır. Ayrıca, nesne yönelimli bir yaklaşım, programcıların daha büyük ve daha karmaşık projeleri ele almalarını sağlar. OOP, kodlama sürecini daha anlaşılır hale getirir ve daha modüler ve yeniden kullanılabilir kodların oluşturulmasını kolaylaştırır.
Python’da Nesne Yönelimli Programlama
Python, OOP yapabilen bir programlama dilidir. Python’da bir nesne, özellikleri ve yöntemleri olan bir varlıktır. Özellikler, nesnenin özelliklerini belirtirken, yöntemler nesnenin ne yapabileceğini belirtir.
Sınıflar
Python’da, nesneleri oluşturmak için sınıflar kullanılır. Bir sınıf, bir nesnenin özelliklerini ve yöntemlerini tanımlayan bir plan veya şablon olarak düşünülebilir. Sınıflar, nesneleri oluşturmak için kullanılan bir taslaktır.
Bir sınıf, class anahtar kelimesi ile tanımlanır. Sınıf adı, büyük harfle başlamalıdır. Aşağıdaki örnek, Person adlı bir sınıf tanımlar:
class Person:
pass
class Person: pass
|
Bu sınıf, hiçbir özelliği veya yöntemi olmayan basit bir sınıftır. pass ifadesi, sınıfın boş olduğunu belirtir.
Nesne
Bir nesne oluşturmak için, sınıfı kullanarak bir örnek oluşturulur. Örneğin, Person sınıfından bir örnek oluşturalım:
class Person:
pass
person1 = Person()
class Person: pass
person1 = Person()
|
Bu kod, Person sınıfından person1 adlı bir nesne oluşturur. Bu nesne, Person sınıfının özelliklerini ve yöntemlerini kullanabilir.
Özellikler ve Yöntemler
Bir sınıfın özellikleri, sınıfın içinde tanımlanır. Özellikler, nesnenin özelliklerini belirtir. Örneğin, Person sınıfı için name ve age özellikleri tanımlayalım:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class Person: def __init__(self, name, age): self.name = name self.age = age
|
Burada, __init__ yöntemi, sınıfın yapıcı yöntemidir. Bu yöntem, nesne oluşturulduğunda çağrılır ve nesne özellikleri ayarlanır. self anahtar kelimesi, sınıfın örneği için kullanılır.
Örneğin, person1 için name ve age özelliklerini belirleyelim:
person1 = Person(“Alice”, 25)
print(person1.name)
print(person1.age)
person1 = Person(“Alice”, 25) print(person1.name) print(person1.age)
|
Bu kod, person1 adlı bir nesne oluşturur ve name özelliğini "Alice" ve age özelliğini 25 olarak ayarlar. Sonrasında, name ve age özelliklerini yazdırır.
Bir sınıfın yöntemleri, sınıfın içinde tanımlanır. Yöntemler, nesnenin ne yapabileceğini belirtir. Örneğin, Person sınıfı için greet yöntemini tanımlayalım:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(“Hello, my name is ” + self.name + “. I am ” + str(self.age) + ” years old.”)
class Person: def __init__(self, name, age): self.name = name self.age = age
def greet(self): print(“Hello, my name is “ + self.name + “. I am “ + str(self.age) + ” years old.”)
|
Burada, greet yöntemi, Person sınıfının bir yöntemidir. Bu yöntem, self anahtar kelimesi aracılığıyla nesnenin özelliklerine erişir ve bir selam verir.
Örneğin, person1 için greet yöntemini çağıralım:
person1 = Person(“Alice”, 25)
person1.greet()
person1 = Person(“Alice”, 25) person1.greet()
|
Bu kod, person1 adlı bir nesne oluşturur ve greet yöntemini çağırır. greet yöntemi, person1 nesnesinin özelliklerini kullanarak bir selam verir.
Kalıtım
Kalıtım, bir sınıfın başka bir sınıftan özelliklerini ve yöntemlerini almasına olanak tanır. Bu, kod tekrarını önleyerek ve kod yazmayı kolaylaştırarak sınıflar arasında ilişkiler oluşturmanıza olanak tanır.
Örneğin, Person sınıfını kullanarak bir Student sınıfı oluşturabiliriz:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(“Hello, my name is ” + self.name + “. I am ” + str(self.age) + ” years old.”)
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
class Person: def __init__(self, name, age): self.name = name self.age = age
def greet(self): print(“Hello, my name is “ + self.name + “. I am “ + str(self.age) + ” years old.”)
class Student(Person): def __init__(self, name, age, grade): super().__init__(name, age) self.grade = grade
|
Burada, Student sınıfı, Person sınıfından kalıtım alır. super() fonksiyonu, Student sınıfının üst sınıfı olan Person sınıfını çağırır. __init__ yöntemi, Person sınıfının yöntemini çağırarak name ve age özelliklerini ayarlar ve grade özelliğini ekler.
Örneğin, student1 adlı bir öğrenci oluşturalım ve greet yöntemini çağıralım:
student1 = Student(“Bob”, 18, 12)
student1.greet()
print(student1.grade)
student1 = Student(“Bob”, 18, 12) student1.greet() print(student1.grade)
|
Bu kod, Student sınıfından student1 adlı bir öğrenci oluşturur ve greet yöntemini çağırır. greet yöntemi, Student sınıfının özelliklerini kullanarak bir selam verir. Ayrıca, student1 öğrencisinin grade özelliğini yazdırır.
Özel Yöntemler
Python’da, sınıfların özel yöntemleri vardır. Bu yöntemler, sınıfın davranışını özelleştirmek için kullanılır. Örneğin, __str__ yöntemi, bir nesnenin dize temsilini döndürür. __repr__ yöntemi, bir nesnenin temsilini döndürür.
Örneğin, Person sınıfına __str__ yöntemini ekleyelim:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
print(“Hello, my name is ” + self.name + “. I am ” + str(self.age) + ” years old.”)
def __str__(self):
return “Person(name=” + self.name + “, age=” + str(self.age) + “)”
class Person: def __init__(self, name, age): self.name = name self.age = age
def greet(self): print(“Hello, my name is “ + self.name + “. I am “ + str(self.age) + ” years old.”)
def __str__(self): return “Person(name=” + self.name + “, age=” + str(self.age) + “)”
|
Burada, __str__ yöntemi, Person sınıfının özel yöntemidir. Bu yöntem, bir dize temsilini döndürür.
Örneğin, person1 için __str__ yöntemini çağıralım:
person1 = Person(“Alice”, 25)
print(person1)
person1 = Person(“Alice”, 25) print(person1)
|
Bu kod, Person sınıfından person1 adlı bir nesne oluşturur ve __str__ yöntemini çağırarak nesnenin dize temsilini döndürür.
Nesne yönelimli programlamanın daha iyi anlaşılması için birkaç örnek daha verebiliriz:
Araba Sınıfı
class Araba:
def __init__(self, marka, model, yil, renk):
self.marka = marka
self.model = model
self.yil = yil
self.renk = renk
def calistir(self):
print(f”{self.marka} {self.model} çalıştırıldı.”)
def durdur(self):
print(f”{self.marka} {self.model} durduruldu.”)
def hizlan(self, hiz):
print(f”{self.marka} {self.model} hızlandı. Şu anki hızı: {hiz}”)
def yavasla(self, hiz):
print(f”{self.marka} {self.model} yavaşladı. Şu anki hızı: {hiz}”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Araba: def __init__(self, marka, model, yil, renk): self.marka = marka self.model = model self.yil = yil self.renk = renk
def calistir(self): print(f“{self.marka} {self.model} çalıştırıldı.”)
def durdur(self): print(f“{self.marka} {self.model} durduruldu.”)
def hizlan(self, hiz): print(f“{self.marka} {self.model} hızlandı. Şu anki hızı: {hiz}”)
def yavasla(self, hiz): print(f“{self.marka} {self.model} yavaşladı. Şu anki hızı: {hiz}”)
|
Bu sınıf, bir araba nesnesini temsil eder. __init__ yöntemi, bir arabanın özelliklerini (marka, model, yıl ve renk) ayarlar. calistir, durdur, hizlan ve yavasla yöntemleri, arabayı çalıştırma, durdurma, hızlandırma ve yavaşlatma işlemlerini gerçekleştirir.
Banka Hesabı Sınıfı
class BankaHesabi:
def __init__(self, hesap_sahibi, hesap_no, bakiye=0):
self.hesap_sahibi = hesap_sahibi
self.hesap_no = hesap_no
self.bakiye = bakiye
def para_yatir(self, miktar):
self.bakiye += miktar
print(f”{self.hesap_sahibi} hesabına {miktar} TL yatırıldı. Yeni bakiye: {self.bakiye} TL”)
def para_cek(self, miktar):
if miktar > self.bakiye:
print(“Yetersiz bakiye.”)
else:
self.bakiye -= miktar
print(f”{self.hesap_sahibi} hesabından {miktar} TL çekildi. Yeni bakiye: {self.bakiye} TL”)
def bakiye_sorgula(self):
print(f”{self.hesap_sahibi} hesabının bakiyesi: {self.bakiye} TL”)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class BankaHesabi: def __init__(self, hesap_sahibi, hesap_no, bakiye=0): self.hesap_sahibi = hesap_sahibi self.hesap_no = hesap_no self.bakiye = bakiye
def para_yatir(self, miktar): self.bakiye += miktar print(f“{self.hesap_sahibi} hesabına {miktar} TL yatırıldı. Yeni bakiye: {self.bakiye} TL”)
def para_cek(self, miktar): if miktar > self.bakiye: print(“Yetersiz bakiye.”) else: self.bakiye -= miktar print(f“{self.hesap_sahibi} hesabından {miktar} TL çekildi. Yeni bakiye: {self.bakiye} TL”)
def bakiye_sorgula(self): print(f“{self.hesap_sahibi} hesabının bakiyesi: {self.bakiye} TL”)
|
Bu sınıf, bir banka hesabı nesnesini temsil eder. __init__ yöntemi, bir hesap sahibinin adını, hesap numarasını ve bakiyesini ayarlar. para_yatir, para_cek ve bakiye_sorgula yöntemleri, hesaba para yatırma, para çekme ve bakiye sorgulama işlemlerini gerçekleştirir.
Çalışan Sınıfı
class Calisan:
def __init__(self, ad, soyad, maas):
self.ad = ad
self.soyad = soyad
self.maas = maas
def tam_ad(self):
return f”{self.ad} {self.soyad}”
def zam_yap(self, yuzde):
self.maas *= 1 + yuzde / 100
print(f”{self.tam_ad()} adlı çalışana {yuzde}% zam yapıldı. Yeni maaşı: {self.maas}”)
def __str__(self):
return f”{self.tam_ad()}, maaşı: {self.maas} TL”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Calisan: def __init__(self, ad, soyad, maas): self.ad = ad self.soyad = soyad self.maas = maas
def tam_ad(self): return f“{self.ad} {self.soyad}”
def zam_yap(self, yuzde): self.maas *= 1 + yuzde / 100 print(f“{self.tam_ad()} adlı çalışana {yuzde}% zam yapıldı. Yeni maaşı: {self.maas}”)
def __str__(self): return f“{self.tam_ad()}, maaşı: {self.maas} TL”
|
Bu sınıf, bir çalışan nesnesini temsil eder. __init__ yöntemi, bir çalışanın adını, soyadını ve maaşını ayarlar. tam_ad yöntemi, çalışanın tam adını döndürür. zam_yap yöntemi, çalışanın maaşına bir yüzdelik zam yapar. __str__ yöntemi, çalışanın adını, soyadını ve maaşını bir dize olarak döndürür.
Örneğin, bu sınıfı kullanarak iki çalışan nesnesi oluşturabilir ve zam yapabiliriz:
ali = Calisan(“Ali”, “Yılmaz”, 5000)
veli = Calisan(“Veli”, “Kara”, 6000)
print(ali)
print(veli)
ali.zam_yap(10)
veli.zam_yap(5)
print(ali)
print(veli)
ali = Calisan(“Ali”, “Yılmaz”, 5000) veli = Calisan(“Veli”, “Kara”, 6000)
print(ali) print(veli)
ali.zam_yap(10) veli.zam_yap(5)
print(ali) print(veli)
|
Bu kod, ali ve veli adlı iki çalışan nesnesi oluşturur. Sonra zam_yap yöntemi ile ali‘nin maaşına %10 ve veli‘nin maaşına %5 zam yapar. Son olarak __str__ yöntemi ile her bir çalışanın adını, soyadını ve maaşını yazdırır.
Özet
Python’da nesne yönelimli programlama, sınıf ve nesneler kullanarak bir programlama yaklaşımıdır. Sınıflar, özellikler ve yöntemler içeren bir kalıptır. Nesneler, sınıfların örnekleri olup özellikler ve yöntemler içerir.
Kalıtım, bir sınıfın başka bir sınıftan özelliklerini ve yöntemlerini almasına olanak tanır. Bu, kod tekrarını önleyerek ve kod yazmayı kolaylaştırarak sınıflar arasında ilişkiler oluşturmanıza olanak tanır.
Özel yöntemler, sınıfların davranışını özelleştirmek için kullanılır. Örneğin, __str__ yöntemi, bir nesnenin dize temsilini döndürür.
Nesne yönelimli programlama, Python gibi birçok programlama dili için temel bir kavramdır ve büyük, ölçeklenebilir projeler oluşturmak için çok faydalıdır.
Source link


