Nesne Tabanlı Programlama I
Bu kitap temel programlamayı bilen ve Python ile nesne tabanlı programlamaya geçecek öğrenciler için yazıldı. İlk beş bölüm Python’ı tanıtır: programın nasıl çalıştığı, temel söz dizimi, koleksiyonlar, fonksiyonlar, dosyalar ve hatalar. Sonraki bölümlerde veriyi ve o veriyle çalışan kodu bir arada tutmayı öğreneceksiniz.
Bu kitap Programlama Temelleri dersini C ile almış öğrenciler için hazırlandı. İlk beş bölüm bildiğiniz kavramların Python’daki karşılığını gösterir. Değişken, döngü ve fonksiyon gibi kavramları sıfırdan anlatmaz.
İki dil arasındaki en temel fark çalışma biçimindedir. C programı çalışmadan önce derlenir ve işlemcinin doğrudan çalıştırdığı makine koduna çevrilir. Python ise yorumlanır: yorumlayıcı programı okurken satır satır çalıştırır. Bu fark, bir hatanın ne zaman ortaya çıktığını ve programın ne kadar hızlı çalıştığını etkiler. 1. bölümde bir örnekle göreceğiz.
İlk beş bölümde C’den Python’a geçiş kartına bakabilirsiniz. Kart C kodunu satır satır Python’a çevirmez. Atama ve kopyalama, str, negatif sayılarda // ile %, referanslar ve hata yönetimi gibi iki dilin farklı davrandığı yerleri hatırlatır.
Bu derste ne öğreneceksiniz?
C’de bir öğrencinin bilgilerini bir struct içinde tutar, bu bilgilerle çalışan fonksiyonları ayrıca yazardınız. Python’da ikisini tek bir yapıda toplayabilirsiniz. Bu yapıya sınıf (class) denir. Bir sınıftan oluşturduğunuz her kayıt da bir nesnedir. Örneğin Ogrenci sınıfından oluşturulan her öğrenci ayrı bir nesnedir.
Dönem boyunca aynı örnek üzerinden şu sorulara cevap arayacağız:
- Öğrenci nesnesi hangi bilgileri tutmalı?
- Not ortalamasını hangi kod hesaplamalı?
- Biri nota -5 yazmaya kalkarsa nesne buna nasıl engel olur?
- Bir ders, öğrencilerinin listesini kendi içinde mi tutmalı?
Hepsi aynı soruya çıkar: Programdaki her bilgi ve her iş hangi nesnenin olmalı? Bu soruları cevaplamak için kullanacağımız kavramları 6. haftadan başlayarak tek tek, örnekleriyle göreceksiniz.
Bölümler nasıl ilerler?
Her bölüm tanımlarla değil, bir soruyla açılır. Kavramları o soruyu cevaplarken, gerek duyduğumuz yerde tanımlarız.
Her bölümde aynı parçalar vardır:
| Parça | Ne işe yarar |
|---|---|
| Bu bölümün kapsamı | Sınavda neyin sorulacağını, neyin yalnız bilgi için verildiğini ayırır |
| Açılış sorusu | Haftanın konusunu tek soruda toplar |
| Etkinlikler | Tahmin et, çalıştır, nesnenin durumunu incele, düzelt, davranış ekle, üret |
| Sınav provası | Sınavdakiyle aynı biçimde, beş seçenekli sorular |
| Tek sayfa özet | Sınavdan önce okunacak kısa liste |
| Bu bölümün kazanımları | Bölümü bitirince yapabilmeniz gerekenler |
Alıştırmalar çoğunlukla şu sırayla ilerler:
Tahmin Et → Çalıştır → Nesnenin Durumunu İncele → Düzelt/Değiştir → Davranış Ekle → Üret
Sitedeki bazı kod kutularında Run Code düğmesi bulunur. Bu kutulara kod hücresi denir. Hücredeki kod tarayıcıda çalışır: kodu değiştirip Run Code düğmesine basınca sonucu hemen görürsünüz. Bazı alıştırmalarda ipucu ve çözüm de açılır. PDF sürümündeki hücreler çalışmaz. Onları kendi bilgisayarınızdaki Python ile deneyin.
Sınav provasının cevap anahtarı yalnız doğru şıkkı söylemez. Her yanlış şıkkın neden doğru gibi göründüğünü ve neden yanlış olduğunu da açıklar. Yanlış şıklar rastgele yazılmadı. Bu konularda öğrencilerin gerçekten yaptığı hatalardan seçildi. Soruyu çözdükten sonra anahtarı okumadan geçmeyin. En çok şeyi orada öğrenirsiniz.
Bölüm başındaki kapsam kutusu
Her bölüm, kapsamı ikiye ayıran bir kutuyla başlar:
- Sınavda sorulur: bölümün çekirdeği, sınavda ölçülen konular.
- Sınav dışı (bilgi amaçlı): konuyu genişleten ama ezberlemeniz beklenmeyen ayrıntılar.
Kod hücreleri kısa denemeler için kullanışlıdır, ama ders yalnız onlarla yürümez. 1. haftada Python’ı, VS Code’u ve Microsoft’un Python eklentisini kurup bir .py dosyasını hem editörden hem terminalden çalıştıracaksınız. 4. haftada modüller, 13. haftada paketler için kendi bilgisayarınızdaki Python gerekecek. Kurulumu dersin başında bitirin.
Programın doğru çıktı vermesi ilk kontroldür. Nesne tabanlı programlamada şu sorulara da bakarız: Bu bilgi neden bu nesnede duruyor? Bu işi hangi sınıf yapmalı? Nesneye anlamsız bir değer yazılabiliyor mu, örneğin eksi bir not? İki değişken aynı nesneyi mi gösteriyor? Yeni bir özellik eklemek için kaç yeri değiştirmeniz gerekiyor?
Her hafta çalışan bir program
Derste çıktı tahmin edecek, tasarım kararlarını tartışacaksınız. Bunların yanında her hafta en az bir çalışan program bitireceksiniz.
Bu program:
- Küçüktür ve ne yapacağı bellidir,
- Haftanın konusunu gerçekten kullanır,
- Mümkünse
assert, beklenen çıktı ya da hücrenin otomatik kontrolüyle sınanır, - Yalnız “açıklayın” ya da “tartışın” cevabından oluşmaz,
- Derste başlanan alıştırmanın devamıdır ve yaklaşık 20–40 dakikada biter.
Bölüm sonlarındaki Çalışır kod görevi satırları o haftanın en az yapılması gereken işini söyler. Bu görevler teslim edilmez ve not getirmez. Kendinizi sınamanız içindir: bir kavramı çalışan koda çevirebildiğinizi her hafta kendiniz görürsünüz.
Haftalar
Bölümler aşağıdaki sırayla işlenir. Her bölümün başlığının üstündeki gezinme çubuğuyla önceki ya da sonraki haftaya geçebilir, bu sayfaya dönebilirsiniz.
Python’a geçiş
Hafta 1
Python çalışma modeli, türler ve temel ifadeler
Python’ı ve VS Code’u kurma; derlenen C ile yorumlanan Python arasındaki fark, değerler, türler, değişkenler, ifadeler ve C’den farklı davranan yerler.
Hafta 2
Koşullar, döngüler ve string işlemleri
C’den bildiğiniz karar yapılarını ve döngüleri Python’da yazma; enumerate, zip ve temel metin işlemleri.
Hafta 3
Koleksiyonlar, değiştirilebilirlik ve referans sezgisi
Liste, demet, sözlük ve küme arasında seçim; değiştirilebilen ve değiştirilemeyen türler, iki adın aynı listeyi göstermesi (aliasing), sığ kopya ve sözlükte dolaşma.
Hafta 4
Fonksiyonlar, kapsam ve modüller
Fonksiyon tasarımı, varsayılan parametreler, değişkenlerin kapsamı, docstring ve kodu modüllere ayırma.
Hafta 5
Dosyalar, istisnalar ve hata ayıklama
Dosya açma modları ve karakter kodlaması, raise ile hata bildirme, istisnaları yakalama ve hatayı adım adım bulma.
Nesne tabanlı programlama
Hafta 6
Nesne zihinsel modeli
Bir nesnenin kimliği, türü, değeri ve durumu; referanslar ve birden çok değişkenin aynı nesneyi göstermesi.
Hafta 7
Sınıf, nesne ve metotlar
class, self, __init__, örnek ve sınıf nitelikleri, gölgeleme; nesnenin yapacağı işleri metot olarak yazma.
Hafta 8
Kapsülleme, property ve invariant
Nesnenin verisini dışarıdan bozulmaya karşı koruma: property ve setter, name mangling ve nesnenin her zaman uyması gereken kurallar (invariant).
Hafta 9
Kompozisyon ve nesne koleksiyonları
Bir nesnenin başka nesneleri içinde tutması (kompozisyon) ve işi onlara devretmesi (delegation); nesne listeleri ve içteki listeyi dışarıya açmadan yönetme.
Hafta 10
Kalıtım ve override
Bir sınıfı başka bir sınıftan türetme (is-a), metodu alt sınıfta yeniden yazma (override), super() ile üst sınıfın metodunu çağırma ve alt sınıfın üst sınıfın yerine sorunsuz geçebilmesi (Liskov ilkesi). MRO yalnız tanıma düzeyinde.
Hafta 11
Polimorfizm ve duck typing
Farklı nesneleri aynı metot adıyla kullanma; hasattr, EAFP ve LBYL yaklaşımları, duck typing.
Hafta 12
Özel metotlar ve özel istisnalar
__str__, __repr__, __eq__, NotImplemented ve probleme özgü istisna sınıfları yazma.
Hafta 13
Paketler ve tip ipuçları
Python sürümü, çalışma dizini, __init__.py, python -m, paketler ve temel tip ipuçları (type hint).
Hafta 14
Bütünleştirici nesne tasarımı
Önceki haftaların konularını tek problemde birleştirme: işlerin sınıflara dağıtılması, kapsülleme, nesneler arası tutarlılık, eşitlik ile koleksiyonların birlikte çalışması ve doğrulama.
Ek çalışmalar
- C’den Python’a geçiş kartı: ilk beş bölüm için temel karşılıkları ve iki dilin ayrıldığı yerleri gösteren 25 satırlık tablo.
- Nesne durumunu izleme çalışmaları: 6. ve 9. bölümlerle birlikte çalışılacak altı alıştırma. Kimlik, referans, değiştirilebilirlik ve kompozisyonu, kodu adım adım izleyip nesneleri tabloya yazarak çalışırsınız.
- Tasarım kararı alıştırmaları: bir işin hangi sınıfa ait olduğunu soran 20, yanlış kurulmuş kalıtımı buldurtan 8 ve nesnenin uyması gereken kuralı (invariant) buldurtan 6 vaka.
- Prosedürel koddan nesne tasarımına: fonksiyonlarla yazılmış kodu sınıflara dönüştürdüğünüz dört problem. Testler kodun davranışını sabit tutar, problemler giderek büyür. Sonuncusu 14. haftanın provasıdır.
Önce mevcut davranışı testlerle sabitleyin. Sonra sınıfları ve hangi işin hangi sınıfta duracağını değiştirin. Son olarak testleri yeniden çalıştırıp davranışın değişmediğini görün. Gerekçenizi yazarken sorumluluk, invariant, bağımlılık ve davranış terimlerinden uygun olanları kullanın.
Başvuru kaynakları
- Python Tutorial: Classes
- Python Tutorial: Errors and Exceptions
- Python Language Reference: Data Model
- Python
typingdocumentation - Think Python, 3rd Edition
Bu kaynaklar İngilizcedir ve bölümlerin yerini tutmaz. Python’ın bir durumda kesin olarak nasıl davrandığını ya da daha ileri ayrıntıları öğrenmek istediğinizde bakabilirsiniz.