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.

NoteKitap neden Python tekrarıyla başlıyor?

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.

ImportantCevap anahtarını mutlaka okuyun

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.

Sınav biçimi

Vize ve final beş seçenekli, 25 soruluk çoktan seçmeli sınavlardır. Sorular çoğunlukla tanım sormaz, bir kod parçasıyla başlar. “Bu kod ne yazdırır?”, “Bu tasarımın sorunu ne?” ya da “Bu işi hangi nesne yapmalı?” gibi.

Kitaptaki sınav provası soruları çalışmanız için orada. Sınavda aynı kazanımları ölçen başka sorular çıkar. Kitabı çalışmak sizi sınava hazırlar, ama sınav soruları kitaptakilerin aynısı olmaz.

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.
ImportantPython’ı 1. haftada kendi bilgisayarınıza kurun

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.

ImportantProgramın çalışması ilk adımdır

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.
TipEk problemlerde çalışma sırası

Ö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ı

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.

Back to top