Python’da Nesne Tabanlı Programlama 1 -OOP(Object-Oriented Programming)

Bu makalemizde, Python’da Nesne Tabanlı Programlama OOP(Object-Oriented Programming) nedir ve nasıl yapılır bunu anlatıyor olacağım. Burda unutulmaması gerekir ki Nesne Tabanlı Programlama OOP olarak bilinen bu yazılım paradigması, iş başvuru mülakatlarında ve de yazılım bilginizin olup olmadığı konusu açıldığında soru sorulmaya başvurulan en önemli konulardan biridir. Burada anlatacağımız her anahtar kelime çok önemlidir. Şimdiden dikkatinizi çekmek isterim 😉 Peki, Öyleyse Bu Nesne Tabanlı Programlama Nedir? Nesne tabanlı programlama, programlama paradigmalarından biridir ve Python gibi birçok programlama dilinde desteklenir. Nesne tabanlı programlama, programların nesnelerin bir araya gelerek ilişkisel bir şekilde çalışmasına dayanır. Her nesne, veri ve işlevselliği içeren bir “sınıf” olarak tanımlanır. Sınıflar, nesnelerin özelliklerini (veri) ve davranışlarını (işlevselliği) tanımlayan “öznitelikler” ve “metodlar” içerir. Bu şekilde, nesne yönelimli programlama, gerçek dünyadaki nesnelerin yapı ve davranışlarını modellemek için kullanılabilir. Nesne tabanlı programlamanın önemli bir avantajı, programların daha düzenli ve modüler olmasını sağlamasıdır. Programlarınızı sınıflara bölerken, her bir sınıfın kendi işlevselliğine ve verilerine […]

Python’da Nesne Tabanlı Programlama 1 -OOP(Object-Oriented Programming)

Bu makalemizde, Python’da Nesne Tabanlı Programlama OOP(Object-Oriented Programming) nedir ve nasıl yapılır bunu anlatıyor olacağım. Burda unutulmaması gerekir ki Nesne Tabanlı Programlama OOP olarak bilinen bu yazılım paradigması, iş başvuru mülakatlarında ve de yazılım bilginizin olup olmadığı konusu açıldığında soru sorulmaya başvurulan en önemli konulardan biridir. Burada anlatacağımız her anahtar kelime çok önemlidir. Şimdiden dikkatinizi çekmek isterim 😉

Peki, Öyleyse Bu Nesne Tabanlı Programlama Nedir?

Nesne tabanlı programlama, programlama paradigmalarından biridir ve Python gibi birçok programlama dilinde desteklenir. Nesne tabanlı programlama, programların nesnelerin bir araya gelerek ilişkisel bir şekilde çalışmasına dayanır. Her nesne, veri ve işlevselliği içeren bir “sınıf” olarak tanımlanır. Sınıflar, nesnelerin özelliklerini (veri) ve davranışlarını (işlevselliği) tanımlayan “öznitelikler” ve “metodlar” içerir. Bu şekilde, nesne yönelimli programlama, gerçek dünyadaki nesnelerin yapı ve davranışlarını modellemek için kullanılabilir.

Nesne tabanlı programlamanın önemli bir avantajı, programların daha düzenli ve modüler olmasını sağlamasıdır. Programlarınızı sınıflara bölerken, her bir sınıfın kendi işlevselliğine ve verilerine sahip olmasını sağlarsınız. Bu, programı daha kolay anlaşılır, bakımı daha kolay ve hataları daha kolay bulunabilir hale getirir.
Şimdi Nesne tabanlı programlamadaki Docsting, Class(sınıf), object(nesne), İnheritanca(kalıtım), Encapsulation(Kapsülleme), Polymorphism (Çok biçimlilik),Composition(Kompozisyon)  gibi kavramlara açıklık getirelim:

1.Docstring (Doküman Dizeleri)

Docstring, Python’da fonksiyonlar, sınıflar veya modüller için belgelendirme metnidir. Bir docstring, ilgili kodun ne yaptığını, nasıl kullanılacağını ve diğer gerekli bilgileri açıklayan açıklamalar içerir. Genellikle üçlü tırnaklar (” ” “) arasına yazılır. Docstring’ler, kodun okunabilirliğini ve anlaşılabilirliğini artırmaya yardımcı olur ve otomatik dokümantasyon araçları tarafından kullanılabilir. İşte bir örnek:

def selamlama(isim):
    """Bir kişiyi selamlayan bir fonksiyon
    Args:
        isim(str): selamlanacak kişinin adı.
    Returns:
        str:selamlama metni
    """
    return f"Merhaba, {isim}!"

print(selamlama("ibrahim"))

 

Kodumuzun ekran çıktısı aşağıdaki gibidir:

2. Class (Sınıf) :

Sınıf, nesne tabanlı programlamada temel bir yapıdır ve benzer özelliklere (veri) ve davranışlara (metodlar) sahip nesneleri gruplamak için kullanılır. Sınıflar, nesnelerin taslakları veya şablonları olarak düşünülebilir. Bir sınıfı kullanarak, o sınıfa ait nesneleri oluşturabilirsiniz. Sınıflar, özellikleri ve davranışları tanımlayan öznitelikler ve metodlar içerir. Örneğin:

class Dikdortgen:
    def __init__(self,kisaKenar,uzunKenar):
        self.kisaKenar=kisaKenar
        self.uzunKenar=uzunKenar
    def AlanBul(self):
        return self.kisaKenar*self.uzunKenar

 

Burada kodumuzu inceleyecek olursak, class Dikdortgen: şeklinde sınıf  tanımlaması yapılır ve  sınıf üzerinden nesne tanımlaması yapılacağı vakit  çalışacak ilk  fonksiyon olan constructor yapıcı metodu yani def __init__() fonksiyonunu oluşturduk. Burada self anahtar sözcüğü (keyword) __init__ metodu ile gelen ve class içinden türetmiş olduğumuz nesnelere ulaşmamızı sağlayan bir kavramdır. Bu self anahtar kelimesiyle parametre olarak girilen değerleri,  kısaKenar ve uzunKenar değişkenlerine attık.

Daha sonra oluşturmuş olduğum AlanBul() Metodu ile alan hesabı yapan işlemi return ile döndermiş olduk.

3.Object (Nesne):

Nesne, bir sınıfın bir örneğidir. Sınıfın belirli özelliklerini ve davranışlarını taşır. Sınıf, nesnelerin bir şablonunu sağlarken, nesne, verileri ve işlevleri gerçekleştiren bir varlık olarak düşünülebilir. Bir sınıftan bir nesne oluşturmak, o nesne için bellekte bir örnekleme yapmak anlamına gelir. Örneğin:

dikdortgenNesnesi=Dikdortgen(5,4)
print(" kısa kenarı: {}\n uzun kenarı: {}\n olan dikdörtgenin Alanı :{} ".format(dikdortgenNesnesi.kisaKenar,dikdortgenNesnesi.uzunKenar, dikdortgenNesnesi.AlanBul()))

 

Burada dikdortgenNesnesi=Dikdortgen(5,4) şeklinde yazılan kodumuzda Dikdortgen sınıfımızdan dikdortgenNesnesi değişkeni ile nesne oluşturmuş oldum.

Sınıf içi özniteliklerine ulaşmak için nesneAdi.degiskenAdi  şeklinde kullanılır. Bizim örneğimizde dikdortgenNesnesi.kisaKenar ile kisaKenar bilgisine ulaşmış olurum.

Sınıf içi Metotlara erişim için ise  nesneAdi.metotAdi() şeklinde kullanılır. Örneğimizde ise dikdortgenNesnesi.AlanBul() şeklinde metodumuzu çağırmış oldum.
Kodumuzun ekran çıktısı aşağıdaki gibidir:

4.Inheritance (Kalıtım):

Kalıtım, nesne yönelimli programlamada bir sınıfın başka bir sınıftan özelliklerini ve metodlarını devralmasını sağlayan bir mekanizmadır. Bir sınıf, başka bir sınıfın özelliklerini ve davranışlarını miras alarak genişletebilir ve değiştirebilir. Ayrıca Kalıtım, kodun yeniden kullanılabilirliğini artırır ve kod tekrarını önler.

Kullanım olarak  Class A:  ve Class B  adında iki sınıfımız olsun eğer Class A’da metotları ve özenitelikleri B’de tekrar tanımlamadan kullanmak istersem class B (A): şeklinde yazarım Burada amaç reusebility’i yeniden kullanılabilirliği sağlamaktır. Miras alınan class A’ya,  Base class yada Super-Class adı verilirken, Miras alan class B sınıfına ise  Sub Class ya da Derived Class olarak adlandırılır.

class Hayvan:
    def __init__(self,isim,renk):
        self.isim=isim
        self.renk=renk
    def konusma(self):
        print("Hayvan konuşur ")

class Kedi(Hayvan):
    def konusma(self):
        print(self.renk+" renkli "+self.isim+" Miyaav miyaaav! diyor")

kediNesnesi=Kedi("duman","gri")
kediNesnesi.konusma()

 

Burada , “Hayvan” adında bir sınıf tanımladık ve “Kedi” adında bir sınıf oluşturduk. “Kedi” sınıfı, “Hayvan” sınıfından kalıtım alır ve  Hayvan sınıfında yazılmış olan  “konusma()” metodunu geçersiz kılarak kendi “konuşma()”  fonksiyonunu kullanmış olur. Bu sayede, ” Kedi ” nesnesi, ” Hayvan “ sınıfının özelliklerine ve ” konuşma() ” metoduna sahip olurken, kendi davranışını da tanımlayabilir.

5.Composition( Kompozisyon) :

Kompozisyon, bir sınıfın başka bir sınıfı içermesi ve bu sınıfın davranışlarını kullanmasıdır. Kompozisyon, karmaşık yapıları oluşturmak için kullanılır ve sınıflar arasındaki ilişkileri daha esnek hale getirir. Bir sınıfın başka bir sınıfı içermesi, bileşenlerin (sınıfların) birleşmesiyle oluşan bir ilişki anlamına gelir. Örneğin:

class Motor:
    def Calistir(self):
        print("motor çalıştı")

    def Durdur(self):
        print("Motor durdu")

class Araba:
    def __init__(self):
        self.motor=Motor()

    def Calistir(self):
        print("araba çalıştı ")
        self.motor.Calistir()

    def Durdur(self):
        print("araba durdur")
        self.motor.Durdur()

araba1=Araba()
araba1.Calistir()
araba1.Durdur()

 

Yukarıdaki örnekte, “Araba” sınıfı, ” Motor ” sınıfını bir bileşen olarak içerir. Bunu burada Araba sınıfı içerisinde bulunan  init fonksiyonunda şu şekilde belirttik self.motor=Motor()  böylece Araba ” sınıfı, “Calistir()” ve “Durdur()” metodlarını çağırırken, ” Motor ” sınıfının aynı adlı metodlarını kullanır. Bu şekilde, ” Araba ” sınıfı, “Motor” sınıfının davranışını kullanarak daha karmaşık bir işlevsellik sağlar.

Kompozisyon konusunu anladım da hani bir örnek daha olsaydı daha güzel olurdu dediğinizi duyar gibiyim, o zaman okumaya devam 😄

Uygulama Senaryosu

Gerçek bir uygulama olsun Hepimizin malumudur arabayı hareket ettirmeden önce bir motor çalıştırılır ve bir kaç saniye sonra tekerlekler döner ve hareket eder biz de sadece şu üç özelliği kullanarak uygulamamızı yapalım uygulamamızda kurgu olarak şöyle yapalım ilk önce motor çalışsın 2 saniye sonra tekerlekler dönsün ve arada birer saniye olsun tekerlekler arasında ve en sonunda araba harekete geçti desin.

import time
class Motor:
    def __init__(self,beygirGucu,marka):
        self.beygirGucu=beygirGucu
        self.marka=marka
    def calistir(self):
        print("motor çalıştı")
        time.sleep(2)

class Tekerlekler:
    def __init__(self,marka,boyut):
        self.marka=marka
        self.boyut=boyut
    
    def dondur(self):
        print("Tekerlekler Dönüyor..")
        time.sleep(1)

class Araba:
    def __init__(self,motor,tekerlekler):
        self.motor=motor
        self.tekerlekler=tekerlekler
        

    def hareketeGec(self):
        self.motor.calistir() #self.motor tanımlamasıyla motor sınıfında bulunan calistir() fonksiyonunu çalıştırmışs olduk 
        for tekerlek in self.tekerlekler:#self.tekerlekler yazarak Tekerlekler Sınıfındaki dondur() fonksiyonuna erişebildik
            tekerlek.dondur()
        print("araba harekete geçti")
    
motor=Motor(3000,"Toyota")
tekerlek1=Tekerlekler("michelin", 14)
tekerlek2=Tekerlekler("michelin", 14)
tekerlek3=Tekerlekler("michelin", 14)
tekerlek4=Tekerlekler("michelin", 14)

araba=Araba(motor,[tekerlek1,tekerlek2,tekerlek3,tekerlek4])
araba.hareketeGec()

 

Yukarıdaki örnekte, “Motor” ve “Tekerlekler” sınıfları, Araba sınıfında kompozisyon ilişkisini temsil eder. Araba sınıfının içinde, Motor ve Tekerlek nesnelerinin örneklerini oluşturarak bu sınıflara erişiriz. Araba’nın “hareketeGec” metodu çağrıldığında, motoru çalıştırır ve tekerlekleri döndürür. Böylece, Araba sınıfının davranışı, içerdiği Motor ve Tekerlek nesnelerinin davranışına dayanır.

Bu örnekte de görüldüğü üzere Kompozisyon, sınıflar arasında güçlü bir bağlantı sağlar ve bir sınıfın başka bir sınıfı içermesine olanak tanır. Böylece, daha karmaşık ve esnek yapılar oluşturabilir.

Bu kodumuzun ekran görüntüsü aşağıdaki gibidir :

 

 

Benzer Yazılar

Gui Dersleri #8 | LabelFrame kullanımı ve TopLevel kullanımı

Python 1 yıl önce

Arkadaşlar merhaba bu makalemizde sizlere python’da LabelFrame kullanımı ve TopLevel kullanımının nasıl yappacağımızı anlatacağım.  Ayrıca size bu konu hakkında çektiğim video’yu bırakıyorum isteyen video izler isteyen aşağıdaki makaleyi okur. Şimdiden iyi seyirler ve iyi okumalar dilerim. ☺ LabelFrame kullanımı : LabelFrame widget’ı, bir çerçeve içindeki bir etiketle birlikte bir grup widget’ı oluşturmanıza olanak tanır. LabelFrame widget’ı, bir Frame widget’ının özelliklerine sahiptir ve ayrıca bir başlık etiketi içerir. Bu widget’lar, diğer widget’ları gruplandırmak için kullanılabilir. from tkinter import* pencere=Tk() pencere.title("label Frame örneği") pencere.geometry("400×300+200+200") kisi_bilgileri=LabelFrame(pencere,text="nüfus örneği", width=300,height=200) kisi_bilgileri.pack(pady=30) kisi_ad=Label(kisi_bilgileri,text="ad soyad") kisi_ad.place(x=20,y=20) kisi_ad_giris=Entry(kisi_bilgileri) kisi_ad_giris.place(x=120,y=20) pencere.mainloop()   yukarıdaki kodumuzda görüleceği üzere formlarda widgetların daha düzenli görünmesini sağlayan labelFrame’mizi  kisi_bilgileri=LabelFrame(pencere,text=”nüfus örneği”, width=300,height=200) şeklinde yükseklik ve genişlik değerleri vererek tanımladık. Bundan sonra ise ekleyeceğimiz widgetları pencere üzerinde tanımlamak yerine kisi_ad=Label(kisi_bilgileri,text=”ad soyad”) buradaki gibi kisi_bilgileri adında tanımladığım LabelFrame değişkeni üzerine eklediğimizi belirtiyoruz. kisi_ad_giris.place(x=120,y=20) burada da Entry nesnesini place özelliği ile x ve y değerlerini vererek konumlandırıyoruz. kodumuzun ekran […]

Python Dersleri | Bayrama özel uygulama yapımı

Python 1 yıl önce

Arkadaşlar Merhabalar bugunkü makalemizde bayramda aklıma gelen bir uygulama senaryosunu gerçekleştirmesini size anlatıyor olacağım. Bayramda vakit ayırıp bunu yeni gerçekleştirdim umarım beğenirsiniz. Bayramınızı kutluyorum şimdiden iyi seyirler ve iyi okumalar dilerim. def __init__(self): Burada yapıcı(constructor ) fonksiyonumuzu tanımladık self belirteci  ile burada attribute’lar ve fonksiyonlara ulaşıyor oalcağız. self.pencere = tk.Tk() self.pencere.title("Bayram Uygulaması") self.pencere.geometry("500×400+500+300") burada pencere ayarlamasınız yaptık. self.soru1=tk.Label(self.pencere,text="1. Mezarlık ziyareti yapıldı mı?") self.soru1.grid(row=0,column=0) self.evet1=tk.Button(self.pencere,text="Evet",command=self.mezarlikEvet) self.evet1.grid(row=0,column=1) burada soru etkietimizi ve yanlarından evet ve hayır butonlarını ekledik burada grid(row,column) yapısına değinecek olursak elemanlarımı grid şeklinde bize yerleştirmemizi sağlayacaktır. def mezarlikEvet(self): self.skor+=20 self.evet1.config(state="disabled") self.hayir1.config(state="disabled") self.guncelle() def mezarlikHayir(self): self.evet1.config(state="disabled") self.hayir1.config(state="disabled") self.guncelle() burada ise buttonlarımızın command parametresine karşılık gelen fonksiyonlarımızı doldurduk. if(self.skor>=80): sonuc = "Neredeyse tüm görevleri yapmışssın helal sana be!🎊🎇 " elif(self.skor>=60 and self.skor<80): sonuc = "Kurban bayramının gerekliliklerini orta düzeyde karşılıyorsun. 😊" elif(self.skor>50 and self.skor<60): sonuc = "kurban bayramının olması gerektiği gibi değil maelesef 😔" else: sonuc = "olmaz öyle kardeşim böyle bayramda […]

Gui Dersleri #7 | Canvas kullanımı, Scale kullanımı ve Scrollbar kullanımı ile ilgili işlemler

Python 1 yıl önce

Arkadaşlar merhaba bu makalemizde sizlere Canvas(Tuval) kullanımı, Scale(ölçek) kullanımı ve Scrollbar(Kaydırma çubuğu) kullanımının nasıl oluşturacağını anlatıyor olacağım ve bunlarla ilgili örnek uygulama yapacağım. Ayrıca size bununla ilgili yukarıda bir örnek video bırakıyorum isteyen video izler isteyen aşağıdaki makaleyi okur. Şimdiden iyi seyirler ve iyi okumalar dilerim. ☺ Canvas(Tuval) kullanımı: Canvas widgeti, Tkinter’da kullanılan bir çizim alanıdır. Bu widgeti kullanarak grafikler, şekiller, metinler ve diğer çizim öğelerini ekrana çizebilirsiniz. Canvas, çeşitli interaktif grafik uygulamaları ve veri görselleştirme için kullanışlıdır. from tkinter import* pencere=Tk() pencere.geometry("300×300+200+200") pencere.title("Canvas örneği") canvas1=Canvas(width=300,height=300,background="gray",highlightthickness=2) canvas1.pack() canvas1.create_rectangle(50,50,100,100,fill="blue") canvas1.create_oval(60,60,150,150,fill="red") canvas1.create_text(50,30,text="merhaba",font="courier 15",fill="yellow") pencere.mainloop()   Bu örnekte, Canvas sınıfını kullanarak bir tuval oluşturuyoruz. width ve height parametreleri tuvalin boyutlarını belirtir. create_rectangle() ve create_oval() metotlarıyla dikdörtgen ve elips gibi çizimler yapabiliriz. Ayrıca create_text() metoduyla da belirtilen özellikte bir text yazısı yazar. Kodlarımızın ekran çıktısı aşağıdaki gibidir:   Scale(Ölçek) kullanımı Scale widgeti, Tkinter’da kullanılan bir kaydırma çubuğu bileşenidir. Kullanıcının bir aralıktaki bir değeri seçmesini […]

3 Yorum

  • Öznur 31 Mayıs 2023

    def selamlama(isim):
    “””Bir kişiyi selamlayan bir fonksiyon
    Args:
    isim(str): selamlanacak kişinin adı.
    Returns:
    str:selamlama metni
    “””
    return f”Merhaba, {isim}!”

    print(selamlama(“öznur”)) merhabalar hocam; ben uzun cod yazmak yerine PRİNT(“MERHBA ÖZNUR “) Yazsak olurmu

  • Öznur 31 Mayıs 2023

    def selamlama(isim):
    “””Bir kişiyi selamlayan bir fonksiyon
    Args:
    isim(str): selamlanacak kişinin adı.
    Returns:
    str:selamlama metni
    “””
    return f”Merhaba, {isim}!”

    print(selamlama(“öznur”)) merhabalar hocam; ben uzun cod yazmak yerine PRİNT(“MERHBA ÖZNUR “) Yazsak olurmu

  • İbrahim ATLI 6 Haziran 2023

    Merhaba Öznur, elbette olur burada fonksiyon kullanarak daha güzel durmasını sağladık yoksa basit bir şekilde de fonksiyona gerek duymadan, print(“”) ile ekranda görmeyi istediğin şeyi yazabilirsin.

Yorum Yaz

Rastgele