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