Nesne Tabanlı Programlama I
Bu kitap, temel programlama kavramlarını daha önce görmüş ve Python ile nesne tabanlı programlamaya geçmek isteyen öğrenciler için hazırlanmıştır. İlk bölümlerde Python’ın çalışma biçimi, temel sözdizimi, koleksiyonlar, fonksiyonlar, dosyalar ve istisnalar üzerinden kısa bir geçiş yapılır. Ardından veriyi ve davranışı birlikte düşünmeye, nesnelerin durumunu ve sorumluluklarını tasarlamaya odaklanılır.
Bu kitap, Programlama Temelleri dersini C ile almış geçiş grubu için hazırlanmıştır. Bu nedenle ilk beş bölüm Python’a kontrollü bir köprü kurar; programlama kavramlarını sıfırdan yeniden öğretmez. Kalıcı ders akışında öğrencilerin Programlama Temelleri ve Veri Yapıları derslerinde Python görmüş olması beklendiğinden, Nesne Tabanlı Programlama I doğrudan nesne modeli ve sınıf tasarımı ağırlıklı başlayacaktır.
İlk beş bölümde hızlı başvuru için C’den Python’a geçiş kartını kullanabilirsiniz. Kart birebir dil çevirisi değil; özellikle atama/kopyalama, str, negatif ///%, referanslar ve hata yönetimi gibi davranış farklarını hatırlatır.
Amaç yalnızca class sözcüğünü kullanarak çalışan programlar yazmak değildir. Bir sınıfın hangi bilgiyi saklaması gerektiğini, hangi davranışlardan sorumlu olduğunu, nesnenin geçerli durumunu nasıl koruyacağını ve nesneler arasındaki ilişkilerin ne zaman kompozisyon ya da kalıtımla ifade edilebileceğini anlamaya çalışacağız.
Kitabı nasıl kullanmalısınız?
Bölümlerde mümkün olduğunda şu öğrenme döngüsü kullanılır:
Tahmin Et → Çalıştır → Nesnenin Durumunu İncele → Düzelt/Değiştir → Davranış Ekle → Üret
Web sürümündeki Python hücreleri tarayıcı içinde çalışır. Kodu değiştirebilir, Run Code ile sonucu görebilir, bazı alıştırmalarda ipucu ve çözüm açabilirsiniz. PDF sürümünde aynı örnekler statik olarak okunabilir; kodu kendi Python ortamınızda çalıştırabilirsiniz.
Tarayıcı hücreleri hızlı deneyler için yararlıdır; ancak bu ders yalnızca web hücreleriyle yürütülmez. 1. haftada Python, VS Code ve Microsoft Python eklentisi kurulup bir .py dosyası hem editörden hem terminalden çalıştırılır. 4. haftada modüller, 13. haftada paketler kullanılacağı için yerel ortam hazırlığı dersin başında tamamlanmalıdır.
Bir programın doğru çıktı üretmesi yalnızca ilk kontroldür. Nesne tabanlı programlamada şu sorular da önemlidir: Bu veri neden bu nesnenin içinde? Bu davranışın sorumlusu hangi sınıf? Nesne geçersiz bir duruma düşebilir mi? İki değişken aynı nesneyi mi gösteriyor? Yeni bir davranış eklemek için kaç yeri değiştirmek gerekiyor?
Her hafta çalışır kod ürünü
Kavramsal tartışmalar, çıktı tahminleri ve tasarım gerekçeleri dersin önemli parçalarıdır; ancak tek başına yeterli değildir. Her hafta en az bir çalışır kod ürünü tamamlanır.
Bu ürün:
- küçük ve açık kapsamlıdır,
- ilgili haftanın temel davranışını gerçekten çalıştırır,
- mümkün olduğunda
assert, beklenen çıktı veya otomatik hücre kontrolüyle doğrulanır, - yalnızca “açıklayın/tartışın” cevabından ibaret değildir,
- ders içindeki yönlendirilmiş uygulamanın devamı olarak yaklaşık 20–40 dakikada tamamlanabilecek ölçekte tutulur.
Bu nedenle bölüm sonlarındaki Çalışır kod teslimi satırları haftanın asgari uygulama çıktısını belirtir. Amaç uzun ödevler üretmek değil, öğrencinin kavramı çalışan koda dönüştürebildiğini düzenli olarak görünür kılmaktır.
İlk beş haftanın Python köprüsü zorunlu hazırbulunuşluk açığını kapatır; ancak dersin adı ve temel amacı Nesne Tabanlı Programlamadır. Bu nedenle ara sınavın yalnızca Python sözdizimi tekrarına dönüşmemesi gerekir.
Python köprüsündeki tür, kontrol akışı, koleksiyon, fonksiyon ve istisna bilgisi araç/ön koşul olarak kullanılabilir; yüksek ağırlıklı değerlendirme odağı ise sınav tarihine kadar işlenmiş OOP kazanımları olmalıdır: nesne zihinsel modeli, class/self/__init__, durum ve davranış, sınıf/örnek niteliği ve mümkünse kapsülleme başlangıcı. Python’a geçiş becerileri haftalık çalışır ürünlerle düşük riskli ve sürekli biçimde doğrulanır.
Akademik takvim ara sınavı 7–8. haftaya yerleştiriyorsa soru dağılımı o tarihe kadar gerçekten işlenmiş OOP kapsamına göre ayarlanmalı; henüz işlenmemiş kompozisyon, kalıtım veya polimorfizm beklenmemelidir.
Haftalar
Aşağıdaki sıra dönem boyunca izleyeceğimiz öğrenme yolunu gösterir. Bir bölümü tamamladıktan sonra bölüm başlığının üstündeki gezinme çubuğuyla önceki haftaya, sonraki haftaya veya bu sayfaya dönebilirsiniz.
Python’a geçiş
Hafta 1
Python çalışma modeli, türler ve temel ifadeler
Yerel Python/VS Code ortamı; Python’ın çalışma modeli, değerler, türler, değişkenler, ifadeler ve C’den kritik davranış farkları.
Hafta 2
Koşullar, döngüler ve string işlemleri
Karar yapıları, tekrar kalıpları, enumerate/zip ve temel metin işlemlerini Python sözdizimiyle yeniden kurma.
Hafta 3
Koleksiyonlar, değiştirilebilirlik ve referans sezgisi
Koleksiyon seçimi; mutability, aliasing, sığ kopya ve sözlük dolaşımı üzerinden nesne referansı sezgisi.
Hafta 4
Fonksiyonlar, kapsam ve modüller
Fonksiyon tasarımı, varsayılan parametreler, kapsam, docstring ve kodu modüllere ayırma.
Hafta 5
Dosyalar, istisnalar ve hata ayıklama
Dosya modları/kodlama, raise ve istisnaları kontrollü ele alma; sistematik hata ayıklama yaklaşımı.
Nesne tabanlı programlama
Hafta 6
Nesne zihinsel modeli
Kimlik, tür, değer, durum, referans ve aynı nesneye birden fazla değişken üzerinden erişme davranışı.
Hafta 7
Sınıf, nesne ve metotlar
class, self, __init__, örnek/sınıf nitelikleri, gölgeleme ve davranışı metotlarla ifade etme.
Hafta 8
Kapsülleme, property ve invariant
Nesne durumunu koruma, property/setter, name mangling ve geçerli durum kurallarını sınıf içinde yönetme.
Hafta 9
Kompozisyon ve nesne koleksiyonları
Kompozisyon/delegation; nesne koleksiyonları ve mutable iç koleksiyonu kapsülleme.
Hafta 10
Kalıtım ve override
is-a, override, normal metotta super(), Liskov yerine geçme sezgisi ve MRO kavram radarı.
Hafta 11
Polimorfizm ve duck typing
Farklı nesneleri ortak davranış üzerinden kullanma; hasattr, EAFP/LBYL ve duck typing yaklaşımı.
Hafta 12
Özel metotlar ve özel istisnalar
__str__, __repr__, __eq__, NotImplemented ayrımı ve probleme özgü istisna sınıfları.
Hafta 13
Paketler ve tip ipuçları
Python sürümü, çalışma dizini, __init__.py, python -m, paketler ve temel type hint kullanımı.
Hafta 14
Bütünleştirici nesne tasarımı
Sorumluluk, kapsülleme, nesneler arası tutarlılık, eşitlik/koleksiyon etkileşimi ve doğrulamayı tek problemde birleştirme.
Ek tasarım çalışmaları
- C’den Python’a hızlı geçiş kartı — ilk beş bölüm için 25 satırlık karşılık ve kritik fark kartı.
- Nesne durumu izleme çalışmaları — 6. ve 9. bölümlerde kimlik, referans, mutability ve kompozisyon için altı adım adım nesne tablosu çalışması.
- Tasarım kararları alıştırma bankası — 20 “sorumluluk kime ait?”, 8 yanlış kalıtım ve 6 invariant belirleme vakası.
- Prosedürel koddan nesne tasarımına — davranışı testlerle sabitlenmiş, giderek büyüyen dört refactoring problemi; sonuncusu bütünleştirici tasarımın provasıdır.
Ek problemlerde önce mevcut davranışı testlerle sabitleyin. Sonra sınıf/sorumluluk sınırını değiştirin ve aynı davranışın korunduğunu doğrulayın. Gerekçenizde sorumluluk, invariant, bağımlılık ve davranış terimlerinden uygun olanları kullanın.
İlk bölümlerde Python sözdizimine alıştıktan sonra aynı temel soruyu giderek daha ayrıntılı biçimde ele alacağız: Bir programdaki veriyi ve davranışı hangi nesne üstlenmelidir?
Temel başvuru kaynakları
- Python Tutorial — Classes
- Python Tutorial — Errors and Exceptions
- Python Language Reference — Data Model
- Python
typingdocumentation - Think Python, 3rd Edition
Bu kaynaklar bölüm metninin yerine geçmez; gerektiğinde Python’ın kesin davranışını ve daha ileri ayrıntıları doğrulamak için başvuru noktasıdır.