Birazdan modern bir programlama sitili olan Nesneye Dayalı Programlamayı (Object-Oriented Programming [OOP])öğreneceksiniz. Şimdiye kadar gördüklerimizden her ne kadar anlaşılmamış olsa da Python bir OOP dilidir. Nesneye dayalı programları yazmaya başlamadan önce, bu işte kullanılan yazım kurallarını öğreneceğiz.
Fido bir köpektir. Sıradan bir günde pek çok iş yapar: yemek yer, koşar, uyur v.b. Bunları nesneye dayalı bir programcı aşağıdaki gibi yazabilir:
Fido = Dog() Fido.eats() Fido.runs() Fido.sleeps()
Bunların yanı sıra Fido'nun pek çok özelliği vardır. Bunlar daha önceden gördüğümüz değişkenlerdir, ancak bunlar Fido'ya aittirler. Fido uzundur ve saçları siyahtır. Bunları bir programcı aşağıdaki gibi ifade edebilir:
Fido.size = "tall" Fido.hair_colour = "black"
Nesneye dayalı programlamada aşağıdakiler vardır:
Fido Dog sınıfında bir gerçeklemedir.
Bir sınıf gerçeklemeler yaratan özel bir fonksiyon olarak düşünülebilir.
eats(), runs() ve sleeps() Dog sınıfının metotlarıdır, metotlar temelde daha önceden gördüğümüz fonksiyonlara benzerler (tek fark metotların bir sınıf veya gerçeklemeye ait olmasıdır).
size ve hair_colour bir gerçekleme veya nesnenin özellikleridir, özellikler normal bir değişkenin alabileceği değerleri alırlar.
Özellikler veya metotlar ile nesneler arasındaki bağlantı aralarına “nokta” (“.”) konularak sağlanır.
Nesneler kendisine ait olan, kendi metot ve özellikleri olan başka nesneleri de kullanabilirler:
Fido.tail.wags()
Fido.tail.type = "bushy"
Fido.left_front_paw.moves()
Fido.head.mouth.teeth.canine.hurt()
Bunun nasıl çalıştığını ileride göreceğiz. Şimdi Reeborg'un "nokta" yı nasıl kullandığını görelim.
Şimdiye kadar yazdığımız programlarda Nesneye Dayalı Programlamayı kullanmadık. Basit bir örnekle başlayalım:
Önce, boş bir dünya ile işe başlayacağız, eğer gerekliyse robot kaldır/ekle butonuna basarak robotu da
kaldıracağız.
RUR-PLE' daki RUR'un Roberge's Used Robot (Roberge'ın Kullanılmış Robotu) anlamına geldiğini hatırlıyor olabilirsiniz; bizim kullandığımız robotlar yaşlı ve hatalıdırlar. [Nasıl tamir edileceğini ileride göreceğiz]. UsedRobot sınıfının ilk gerçeklemesini yaratacağız ve ona uygun bir isim vereceğiz: Reeborg! Sonra ona bir adım atması ve kendini kapatmasını söyleyeceğiz.
Reeborg = UsedRobot() Reeborg.move() Reeborg.turn_off()
Deneyin!
Metotlarda, fonksiyonların da kullandığı gibi parametreler kullanabilirler. Boş bir dünya ile başlayın ve aşağıdakini deneyin:
# başlangıç noktasına (varsayılan-default) bir robot ekle, ama rengi farklı olsun Larry = UsedRobot(colour='blue') # ikinci robot, default renk (gri) yüzü kuzeye dönük Curly = UsedRobot(1, 3, 'N') # üçüncü robot bip taşıyor Moe = UsedRobot(1, 2, beepers=9, colour='yellow') Larry.move() Curly.move() Moe.move() Larry.move() Curly.move() Moe.move() Curly.turn_left() Larry.move() Curly.move() # Herhangi bir robotu kapatmak programı sonlandırır. Moe.turn_off()
Robotların farklı renkleri vardır: grey (gri, default), yellow (sarı), blue (mavi), light blue (açık mavi), green (yeşil) ve purple (mor). Herhangi bir yere yerleştirilebilirler (aynı noktaya birden fazla robot koyulabilir), dört yönden birisine bakabilirler ('E' [varsayılan-by default], 'N', 'S', 'W') veya bip taşıyabilirler. İki adlandırılmış parametre (beepers ve colour) ve üç adlandırılmamış parametre (street, avenue and orientation) olduğuna dikkat edin.Adlandırılmış iki parametre sonda yer almalıdır (eğer adlarını yazarsanız kendi aralarında yer değiştirebilirler), adlandırılmamış parametreler ise başta aynı sıra muhafaza edilerek yer almalıdır. Bu nedenle, bir yön (orientation) belirtmek istersek, öncelikle cadde (street) ve sokağı (avenue) belirtmeliyiz.
Aşağıdakiler geçerlidir:
R1 = UsedRobot(2) # 2. cadde, 1.sokak, yüzü doğuya dönük R2 = UsedRobot(2, 3) # 2. cadde, 3. sokak, yüzü doğuya dönük R3 = UsedRobot(3, 1, 'S') # 3. cadde, 1. sokak, yüzü güneye dönük R4 = UsedRobot(5, colour='yellow') # 5. cadde, 1. sokak, yüzü doğuya dönük, rengi sarı
Aşağıdakiler geçerli değildir:
R5 = UsedRobot(3, 'S') # yön 3. parametre değil R6 = UsedRobot(colour='yellow', 5) # adlandırılmamış parametre, adlandırılmıştan sonra kullanılmaz