Kitaplar / Yöntem ile Programlamaya Giriş / Bölüm 9 — Kayıtlar ve sınıflar
Bölüm 9 — Kayıtlar ve sınıflar
Gerçek dünyadaki şeylerin birden çok özelliği vardır: bir noktanın x ve y’si, bir hesabın sahibi ve bakiyesi. Kayıt bu özellikleri bir araya toplar. Sınıf ise özelliklerin yanına davranışları (metodları) da ekler.
Kayıtlar
program KayıtÖrneği
tip
Nokta = kayıt
x, y: ondalık
bitir
fonksiyon Uzaklık(a, b: Nokta): ondalık
başla
dön Kök((a.x - b.x) ** 2 + (a.y - b.y) ** 2)
bitir
değişken
p, q: Nokta
başla
p.x := 1; p.y := 2
q := Nokta.Oluştur(4, 6) // alanları sırayla doldurur
yaz('p = ' + p + ', q = ' + q, 1)
yaz('Uzaklık: ' + Uzaklık(p, q), 1)
q := p // kayıtlar KOPYALANIR
q.x := 99
yaz('p.x hâlâ ' + p.x, 1)
bitir.p = Nokta(x: 1.0, y: 2.0), q = Nokta(x: 4.0, y: 6.0)
Uzaklık: 5.0
p.x hâlâ 1.0Kayıt tipinde bildirilen bir değişken boş alanlarla hazır gelir; p.x := 1 hemen yazılabilir. Kayıtlar değer gibi davranır: q := p bir kopya üretir, q’yu değiştirmek p’yi etkilemez.
Sınıflar
Bir sınıf iki parçada yazılır. Önce tip bölümünde sınıfın neye sahip olduğu bildirilir. Sonra metodların gövdeleri Sınıf.Metod adıyla tanımlanır. Bu Delphi tarzıdır ve büyük sınıfları okunur tutar.
program BankaHesabı
tip
Hesap = sınıf
özel
tutar: ondalık
genel
sahip: metin
kurucu Oluştur(ad: metin; ilkPara: ondalık = 0)
prosedür Yatır(miktar: ondalık)
prosedür Çek(miktar: ondalık)
fonksiyon Bakiye: ondalık
fonksiyon MetneÇevir: metin
bitir
kurucu Hesap.Oluştur(ad: metin; ilkPara: ondalık = 0)
başla
sahip := ad
tutar := ilkPara
bitir
prosedür Hesap.Yatır(miktar: ondalık)
başla
tutar := tutar + miktar
bitir
prosedür Hesap.Çek(miktar: ondalık)
başla
eğer miktar > tutar ise
fırlat Hata('Yetersiz bakiye', 'BankaHatası')
tutar := tutar - miktar
bitir
fonksiyon Hesap.Bakiye: ondalık
başla
dön tutar
bitir
fonksiyon Hesap.MetneÇevir: metin
başla
dön Biçimle('{} hesabı: {:.2} TL', sahip, tutar)
bitir
değişken
h: Hesap
başla
h := Hesap.Oluştur('EdaEce', 100)
h.Yatır(250)
h.Çek(80)
yaz(h, 1)
yaz('Bakiye: ' + h.Bakiye, 1)
dene
h.Çek(1000)
yakala (hata)
yaz(hata.tür + ': ' + hata.mesaj, 1)
bitir
bitir.EdaEce hesabı: 270.00 TL
Bakiye: 270.0
BankaHatası: Yetersiz bakiye| Kavram | Açıklama |
|---|---|
| Alan | Sınıfın verisi: tutar, sahip. Metodlar içinden doğrudan adıyla kullanılır. |
| Metod | Sınıfa ait prosedür ya da fonksiyon: Yatır, Çek |
kurucu |
Yeni nesne oluşturan özel metod. Hesap.Oluştur(...) ile çağrılır. |
kendi |
Metodun üzerinde çalıştığı nesne. kendi.tutar = tutar |
özel / genel |
Hangi üyelerin dışarı için olduğunu belgeler. Şimdilik bilgi amaçlıdır, erişimi engellemez. |
MetneÇevir |
Tanımlanırsa yaz(nesne) onu kullanır |
Alanlara ve metodlara aynı adı vermemek gerekir. Büyük/küçük harf fark etmediği için bakiye alanı ile Bakiye metodu aynı ad olur. Bu yüzden alana tutar dedik.
Kalıtım
Bir sınıf başka bir sınıfın özelliklerini miras alabilir ve istediği metodları değiştirebilir. Metod gövdeleri sınıfın içinde de yazılabilir; kısa sınıflar için bu daha pratiktir.
program Kalıtım
tip
Hayvan = sınıf
ad: metin
kurucu Oluştur(a: metin)
başla
ad := a
bitir
fonksiyon Ses: metin; sanal
başla
dön '...'
bitir
fonksiyon Tanıt: metin
başla
dön ad + ' der ki: ' + Ses
bitir
bitir
Kedi = sınıf(Hayvan)
fonksiyon Ses: metin; ezer
başla dön 'Miyav'; bitir
bitir
Köpek = sınıf(Hayvan)
cins: metin
kurucu Oluştur(a, c: metin)
başla
miras Oluştur(a) // ebeveynin kurucusunu çağır
cins := c
bitir
fonksiyon Ses: metin; ezer
başla dön 'Hav hav'; bitir
fonksiyon Tanıt: metin; ezer
başla dön miras Tanıt + ' (' + cins + ')'; bitir
bitir
değişken
hayvanlar: liste
h: Hayvan
başla
hayvanlar := [Kedi.Oluştur('Tekir'), Köpek.Oluştur('Karabaş', 'Kangal'), Hayvan.Oluştur('Balık')]
hayvanlar içindeki her h için
yaz(h.Tanıt, 1)
yaz('Karabaş bir Hayvan mı? ' + ÖrneğiMi(hayvanlar[1], Hayvan), 1)
yaz('Tekir bir Köpek mi? ' + ÖrneğiMi(hayvanlar[0], Köpek), 1)
bitir.Tekir der ki: Miyav
Karabaş der ki: Hav hav (Kangal)
Balık der ki: ...
Karabaş bir Hayvan mı? doğru
Tekir bir Köpek mi? yanlışBuradaki en önemli fikir çok biçimliliktir. Tanıt metodu yalnızca Hayvan sınıfında yazıldı, ama içindeki Ses çağrısı nesnenin gerçek sınıfına göre “Miyav” ya da “Hav hav” oldu. miras ebeveyn sınıfın aynı adlı metodunu çağırır. sanal ve ezer sözcükleri okuyana niyeti anlatır; Yöntem’de tüm metodlar zaten sanaldır.