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

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

Bu makalemizde, Python’da Nesne Tabanlı Programlama OOP(Obejct-Oriented Programming) nedir ve nasıl yapılır makalemizin devamı niteliğinde anlatıyor olacağım.

6. Encapsulation(Kapsülleme):

Nesne tabanlı programlamada verilerin ve bunları manipüle eden işlevlerin birlikte gruplandırılmasını sağlar. Bu, verilerin dışarıdan doğrudan erişilmesini engeller ve erişimi kontrol altına alır.

Encapsulation, verilerin sınıf içindeki özel (private) bir durumda tutulmasını ve sadece sınıf içinde tanımlanan yöntemlerle erişilebilmesini sağlar. Bu, verilerin yanlışlıkla değiştirilmesini veya hatalı kullanılmasını önler ve veri bütünlüğünü korur. Sınıfın dışındaki kullanıcılar, sadece sınıf tarafından sağlanan arayüz üzerinden verilere erişebilir ve bu arayüz ile verilerin nasıl kullanılacağını bilebilirler.

 

Yukarıdaki örnekte, “_adi“, “_soyadi”  ve “_yasi” özellikleri özel (private) olarak tanımlanmıştır. Bunlar, başlarına tek bir alt çizgi koymak suretiyle diğer programcıların doğrudan erişimini engellemek için sınıf içinde kullanılan bir kuraldır. Bunun yerine, adiAl, yasiAl, yasiAyarla ve adiAyarla gibi metotlar, bu özelliklere erişmek için kullanılır.

Böylece, bir “Kisi” nesnesi oluşturduğunuzda, özel olan “_adi“, “_soyadi”  ve “_yasi” özelliklerine doğrudan erişim sağlanamaz. Bunun yerine, “adiAl“,”soyadiAl”  ve “yasiAl ” gibi metotlar kullanılarak bu verilere erişilebilir. “yasiAyarla ” metodu ise yaşın geçerli bir değere sahip olmasını ve “adiAyarla” metodu ise bir string ifade olmasını  kontrol ederek güncellemeyi gerçekleştirir.

Yukarıdaki örnekte kullandığımız isinstance() fonksiyonundan bahsedecek olursak, bir nesnenin belirli bir veri türüne (class veya type) ait olup olmadığını kontrol etmek için kullanılır. Bu fonksiyon, verilen nesnenin belirtilen veri türünden türetilmiş bir örnek olup olmadığını kontrol eder.

Bizim örneğimizde ise  isinstance(yeni_adi, str) ifadesi yeni_adi değişkeninin str (string) veri türüne ait bir örnek olup olmadığını kontrol eder. Eğer yeni_adi değişkeni bir string ise, self._adi değişkeni güncellenir. Eğer yeni_adi değişkeni başka bir veri türünden ise, örneğin bir sayı veya liste ise, o zaman Geçersiz ad değeri. mesajı yazdırılır.

Kodun ekran çıktısı:

Eğer kodu aşağıdaki gibi yazsaydık, yani adiAyarla() fonksiyonunu yazmasaydık:

 

ve son iki satırda  kisi1._adi=”mehmet” şeklinde direk  private değişkeni üzerinde değişiklik yapasaydık  Encapsulation kuralını ihlal etmiş oluruz bunun önüne geçmek için biz içerisine adiAyarla() fonksiyonumuzu yazdık kontrollerimizi ve değişimlerimizi burada yazdık.

 

Sonuç olarak, Encapsulation, bir sınıfın içindeki verilere erişimin ve değişimin sınırlanması ilkesidir. Sınıfın dışından _adi gibi bir değişkene doğrudan erişim, encapsulation’ı ihlal ettiği için doğru bir uygulama değildir.

Python’da, _adi şeklinde tanımlanan değişkenlere doğrudan erişim yapılabilmesine rağmen, yine de encapsulation ilkesini korumak ve sınıfın dışındaki erişimi kısıtlamak önemlidir. Bunun için _adi gibi değişkenlere erişmek için get ve set metodları kullanılmalıdır, yani adiAl() ve yasiAyarla() gibi metodlar.

Eğer _adi değişkenine doğrudan erişim yaparsanız, encapsulation ilkesini ihlal etmiş olursunuz ve sınıfın içindeki kontrolleri atlamış olursunuz. Bu durumda, _adi değişkeninin değerini doğrudan değiştirebilirsiniz. Ancak bu, iyi bir programlama pratiği değildir ve sınıfın içindeki yöntemleri kullanmanız önerilir.

Sonuç olarak, Encapsulation sayesinde, verilerin doğrudan değiştirilmesi yerine sınıf tarafından kontrol edilen bir arayüz aracılığıyla erişilebilir ve manipüle edilebilir. Bu da veri güvenliğini ve istenmeyen hataları önler.

Encapsulation, verilerin korunması ve kontrolü sağlayarak programın daha güvenli, esnek ve sürdürülebilir olmasını sağlar.

 

7. Polymorphism (Çok Biçimlilik)

Polimorfizm, aynı isimle fakat farklı parametrelerle veya farklı davranışlarla çalışabilen nesnelerin kullanılmasını ifade eder. Yani, farklı sınıfların aynı isimli metotlarına erişerek farklı davranışlar sergileyebiliriz.

Şekilde de çizdiğimiz gibi üç tane sınıfımız olsun ve biri parent class(Kus sınıfı ) diğer ikisi child class olsun yani kendisinden miras alan classlar burada polimorfizmi kendi içlerinde bulunan uçma() metodu ile yapacağız  sınıflar dışında tanımladığımız kusuUcur() metodu parametre olarak oluşturduğumuz devekusu1 ve kirlangic1 nesnelerini veririz böylece verdiğimiz nesnelere göre farklı sınıfların aynı isimli metotlarının, farklı davranmasını sağlamış olduk.

 

Polimorfizm, farklı sınıfların aynı isimli metotları farklı şekillerde uygulayabilmesidir. Kirlangic ve DeveKusu sınıfları, Kus sınıfını miras aldığından ve ucma fonksiyonunu ezdiklerinden dolayı, bu sınıfların kendi ucma metotları farklı bir şekilde çalışır.

kusuUcur fonksiyonu ise, Kus sınıfından türetilen herhangi bir nesneyi parametre olarak alır ve ucma metodunu çağırır. Bu sayede, kusuUcur(kirlangic1) ifadesinde kirlangic1 nesnesi Kirlangic sınıfına ait ucma metodu çalışır ve “kırlangıçlar uçabilir” mesajı yazdırılır. Benzer şekilde, kusuUcur(devekusu1) ifadesinde devekusu1 nesnesi DeveKusu sınıfına ait ucma metodu çalışır ve “Deve kuşları uçamaz” mesajı yazdırılır.

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

8. Abstraction (Soyutlama)

Abstraction, karmaşık bir sistemdeki detayları gizleyerek ve yalnızca ilgili olan özellikleri ve işlevleri vurgulayarak programlama yapılarını tasarlama ve kullanma yaklaşımıdır.

Abstraction, bir nesnenin önemli özelliklerini ve davranışlarını vurgulayarak kullanıcılara yalın bir arayüz sağlar. Bu şekilde, kullanıcılar nesnenin nasıl çalıştığını veya nasıl uygulandığını bilmek zorunda kalmadan, sadece nesneyle etkileşime geçerek istenen sonuçları elde edebilirler.

 

Yukarıdaki örnekte, “Sekil” sınıfı soyut bir sınıftır. Soyut sınıflar, bir veya daha fazla soyut metodu içerir ve bu metotların alt sınıflar tarafından uygulanması gerekmektedir. “Sekil” sınıfında, “alanBul()” ve “cevreBul()” adında soyut metotlar tanımlanmıştır. Bu metotlar, alt sınıflar tarafından farklı şekillerde uygulanmalıdır.

Örneğimizde, biz  ” Daire” ve ” Dikdortgen” adında iki alt sınıf oluşturduk. ” Daire ” ve “Dikdortgen” sınıfları “Sekil” soyut sınıfını miras alır. Her iki sınıf da ” alanBul()” ve “cevreBul() ” metotlarını uygular. Bu sayede, her şeklin alanını ve çevresini hesaplama yeteneğine sahip olurlar.

Bu örnekte, “ Sekil ” soyut sınıfı, tüm şekillerin ortak özelliklerini ve davranışlarını temsil eder. Alt sınıflar, soyut metotları uygulayarak kendi şekillerine özgü hesaplamaları gerçekleştirirler. Kullanıcılar, Sekil sınıfından türetilen nesneleri kullanırken, sadece “alanBul ()” ve “cevreBul()” ” gibi soyutlanmış metotları çağırarak şekillerin özelliklerini kullanabilirler.

Sonuç olarak, eğer burada “Sekil ” sınıfında “@abstractmethod” şeklinde tanımlanan metotlar varsa soyut sınıftan miras alan diğer sınıflara yazılmayı zorunlu kılar yoksa nesne üretildiğinde hata oluşur. Yani “Dikdortgen” ve “Daire “sınıfı, Sekil sınıfından kalıtım aldıkları için sekil sınıfında bulunan iki soyut metodu da “Dikdortgen” ve “Daire” sınıfında  yazmak zorundayız.

Abstraction, karmaşıklığı azaltır ve programın daha anlaşılır ve yönetilebilir olmasını sağlar. Kullanıcılar, detaylara girmeden soyutlamayı kullanarak işlevselliğe odaklanabilirler.

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

Benzer Yazılar

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

Python 7 ay ö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.

  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 çıktısı aşağıdaki gibidir:   TopLevel Kullanımı: Toplevel widget’ı ise, ana pencereye bağlı olmayan bir pencere oluşturmanızı sağlar. […]

Python Dersleri | Bayrama özel uygulama yapımı

Python 7 ay ö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.

Burada yapıcı(constructor ) fonksiyonumuzu tanımladık self belirteci  ile burada attribute’lar ve fonksiyonlara ulaşıyor oalcağız.

burada pencere ayarlamasınız yaptık.

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.

burada ise buttonlarımızın command parametresine karşılık gelen fonksiyonlarımızı doldurduk.

Burda da güncelle fonksiyonumuz içinde gerekli tanımları ve durumları yaptık .

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

Python 7 ay ö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.

  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 sağlar. Genellikle çeşitli ayarların kontrol edilmesi veya değerlerin seçilmesi için kullanılır.

  […]

0 Yorum

Yorum Yaz

Rastgele

Web sitemiz, gezinme deneyiminizi ve ilgili bilgileri sağlamak için çerezleri kullanır. Web sitemizi kullanmaya devam etmeden önce, şunları kabul etmiş olursunuz.