top of page

BİLGİSAYAR BİLİMİ KUR 1 - 2. DÖNEM 14. HAFTA - NESNE YÖNELİMLİ PROG. - SOYUTLAMA - ABSTRACTİON

Güncelleme tarihi: 31 Mar

ÜNİTE:


1.3. PROGRAMLAMA


KAZANIMLAR:


1.3.5.1. Çevrimiçi araçları kullanarak belirlenen programlama dilinde ileri uygulamaların yer aldığı özgün proje geliştirir.





PYTHON - Soyutlama (Abstraction)


Abstraction (Soyutlama), Object-Oriented Programming (OOP) kavramlarından biridir ve karmaşıklığı azaltarak sadece önemli detayları ortaya çıkarmayı amaçlar. Python’da abstraction, abstract class (soyut sınıf) ve abstract method (soyut metod) kullanılarak sağlanır.


  • Kullanıcıya gerekli bilgileri gösterip karmaşık detayları gizler.

  • Gerçek dünyadaki nesneler gibi, bir nesnenin nasıl çalıştığını bilmeden kullanmamızı sağlar.

  • Soyut sınıflar, tamamlanmamış sınıflardır ve doğrudan nesne oluşturulamaz.

  • Soyut metotlar, alt sınıflar tarafından uygulanmak zorundadır.



Günlük Hayattan Bir Örnek:


Bir araba düşünelim. Arabayı kullanırken sadece direksiyonu çevirir, pedalları kullanır ve vites değiştirirsiniz. Ancak, motorun nasıl çalıştığını, fren sisteminin detaylarını ya da yakıtın nasıl yandığını bilmek zorunda değilsiniz. Arabayı soyut bir şekilde sadece "sürüş işlevi" olarak algılarsınız.











1. Soyutlama Olmadan



Bu Kod Ne Yapıyor?


  1. Araba sınıfı tanımlanıyor.

  2. init() metodu, nesne oluşturulurken markayı, modeli ve yılı alıyor.

  3. bilgi() metodu, arabanın bilgilerini döndürüyor.

  4. araba1 nesnesi oluşturuluyor ve print(araba1.bilgi()) ile bilgileri ekrana yazdırılıyor.



Bu kodu çalıştırdığında şu çıktıyı alırsın:



Eğer soyutlama kullanmazsak, farklı alt sınıfların zorunlu olarak belirli metotları tanımladığından emin olamayız ve bu kodun çalışmasını riske atar.


Örneğin, tüm arabaların çalışması istenir, ama soyutlama kullanmazsak bazı araba sınıflarında araba_calis() metodu unutulabilir ve hata alabiliriz.











 Soyutlanmış Araba Sınıfı




Bu Kodun Avantajları


Araba sınıfı soyut hale getirildi, yani doğrudan nesne oluşturulamaz.


bilgi() metodu alt sınıflar tarafından tanımlanmak zorunda.


Toyota sınıfı Araba sınıfından miras aldı ve bilgi() metodunu kendine göre tanımladı.


Özet:

  • Eğer Toyota gibi bir alt sınıf bilgi() metodunu yazmazsa, hata alırız.

  • Böylece zorunlu metotları belirleyerek kodun tutarlılığını artırmış olduk.




Yukarıdaki örnekte soyutlama kullanmazsak ne olur?


Eğer soyutlama kullanmazsak, Araba sınıfından doğrudan nesne oluşturabiliriz ve bazı metodlar eksik kalabilir:




Bu kötü bir yaklaşımdır çünkü bilgi() metodunun nasıl çalışması gerektiğine dair bir zorunluluk yoktur.


📌 Soyutlama Kullanırsak Ne Olur?


✅ Daha düzenli, genişletilebilir ve güvenilir kod yazmış oluruz.

✅ Hataların önüne geçeriz.

✅ Alt sınıfların belirli metotları kesinlikle tanımlamasını sağlarız.















Farklı Bir Örnek - Geometrik Şekiller



Açıklamalar:


abstractmethod Ne İşe Yarar?


abstractmethod, Python'da soyut (abstract) bir metot tanımlamak için kullanılan bir dekoratördür. Bu dekoratör, bir metodu zorunlu olarak alt sınıflar tarafından uygulanması gereken bir metot haline getirir.


  • Soyut sınıflar (Abstract Base Class - ABC) içinde kullanılır.

  • Bir metodun gövdesi (içeriği) olmaz, yalnızca adı ve parametreleri tanımlanır.

  • Alt sınıflar, bu metodu mutlaka tanımlamak zorundadır. Aksi takdirde, hata alınır.

  • Bir sınıf içerisinde en az bir tane @abstractmethod varsa, o sınıftan doğrudan nesne oluşturulamaz.


  • Sekil sınıfı soyut bir sınıftır ve ABC sınıfından türetilmiştir.

  • alan() ve cevre() metodları soyut metotlardır, yani alt sınıflar tarafından uygulanmak zorundadır.

  • Dikdortgen sınıfı Sekil sınıfından türetilmiştir ve soyut metodları uygulamak zorunda kalmıştır.












2) Kısmi Soyutlama


Soyut sınıflar, tamamen soyut olmak zorunda değildir. Soyut metotlar içerebilir ama normal metotları da barındırabilir.



Burada:

  • bilgi() metodu normal bir metot olduğu için alt sınıflar bunu değiştirmek zorunda değildir.

  • hareket_et() soyut bir metot olduğu için alt sınıflar bunu kesinlikle tanımlamalıdır.















Soyutlama ve Kapsülleme Farkı


Soyutlama (Abstraction) ve Kapsülleme (Encapsulation) kavramları nesne yönelimli programlamanın (OOP) temel prensiplerindendir. Genellikle birbirine karıştırılsalar da farklı amaçlara hizmet ederler.


1. Soyutlama (Abstraction)


Soyutlama, bir nesnenin sadece gerekli özelliklerini ön plana çıkarıp, gereksiz detayları gizlemektir. Kullanıcının, nesnenin iç işleyişini bilmesine gerek kalmadan sadece temel işlevleri kullanabilmesini sağlar.


2. Kapsülleme (Encapsulation)


Kapsülleme, verileri ve bunlara erişimi kontrol altına alma işlemidir. Bir sınıfın içindeki değişkenleri ve metodları dış dünyadan gizleyerek, yalnızca belirli metodlar aracılığıyla erişilmesine izin verir.















Soyutlama (Abstraction) Özet Video:















Soyutlama (Abstraction) Alıştırmaları:



Alıştırma 1: Şekiller


Bir "Şekil" (Shape) soyut sınıfı oluştur.


  • Bu sınıfın alan() ve cevre() adında soyut metodları olsun.

  • Dikdörtgen (Rectangle) ve Daire (Circle) alt sınıflarını oluştur.

  • alan() ve cevre() metodlarını her alt sınıfta kendine uygun şekilde tanımla.

  • Shape sınıfından nesne oluşturmanın hata verdiğini test et.


📌 İpucu: math.pi kütüphanesini kullanarak Daire için π'yi alabilirsin.





Çözüm:


Bu çözümde Shape adlı bir soyut sınıf oluşturduk ve Rectangle ile Circle alt sınıflarına alan ve çevre hesaplama metotlarını tanımladık.


Bu kod ne yapıyor?


  • Shape soyut sınıfı, alan() ve cevre() metotlarını soyut metot olarak tanımlıyor.

  • Rectangle ve Circle alt sınıfları bu metotları kendine uygun şekilde zorunlu olarak tanımlıyor.

  • Soyut sınıftan doğrudan nesne oluşturulamaz, bu yüzden shape = Shape() hata verecektir.















Alıştırma 2: Ödeme Sistemleri


Bir "Ödeme" (Payment) soyut sınıfı oluştur.


  • odeme_yap(miktar) adında bir soyut metot tanımla.

  • KrediKartiOdeme ve PayPalOdeme adında iki alt sınıf oluştur.

  • Her ödeme yöntemi için odeme_yap(miktar) metodunu kendi mantığına göre yaz.

  • Farklı ödeme türlerinden nesneler oluşturup test et.


📌 İpucu:


  • KrediKartiOdeme sınıfı, ödeme yapıldığında "Kredi Kartı ile {miktar} TL ödeme yapıldı." yazdırsın.

  • PayPalOdeme sınıfı, "PayPal ile {miktar} TL ödeme yapıldı." yazdırsın.





Çözüm:


Bu çözümde Payment adlı bir soyut sınıf oluşturduk ve CreditCardPayment ile PayPalPayment sınıflarına özel odeme_yap() metodu tanımladık.



Bu kod ne yapıyor?


  • Payment soyut sınıfı, odeme_yap(miktar) metodunu soyut olarak tanımlıyor.

  • CreditCardPayment ve PayPalPayment sınıfları, bu metodu kendilerine özgü olarak zorunlu tanımlıyor.

  • Soyut sınıftan doğrudan nesne oluşturulamaz, yani Payment() çağırılırsa hata alırız.















Soyutlama (Abstraction) Alıştırma Çözümleri Özet Video:




















Ödev:


Bir "Ödeme" (Payment) soyut sınıfı oluştur.


  • odeme_yap(miktar) adında bir soyut metot tanımla.

  • KrediKartiOdeme ve PayPalOdeme adında iki alt sınıf oluştur.

  • Her ödeme yöntemi için odeme_yap(miktar) metodunu kendi mantığına göre yaz.

  • Farklı ödeme türlerinden nesneler oluşturup test et.

  • Notlar gizli tutulmalı ve oluşturduğunuz kodların fotoğrafını aşağıdaki mail adresine gönderiniz.


Maile isim soy isim, sınıf ve okul numarası bilgilerinizi yazmayı unutmayınız.


egitimdebil@gmail.com


Önerilen program: IDE - PYTHON (Bilgisayarla çalışmayanlar, kodları deftere yazıp fotoğrafını gönderebilirler.)


Bilişim Teknolojileri Öğretmeni: İshak BEZCİ


Son gün ve saat : Pazar gece 12.00








Comentários


bottom of page