## 30. Nesneye dayalı programlama: "nokta" kullanımı

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.

### Bir köpeğin sıradan bir günü

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:

- `Köpek(Dog)` sınıfa bir örnektir.

- `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.

### Kullanılmış bir robot adını alıyor

Ş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!

### Daha Fazla Robot

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

Adınız nedir? - - Globalleştirme kötü bir şeydir