
Merhaba arkadaşlar, bu konu nesneye yönelik dilleri öğrenirken mutlaka vakit ayrılıp öğrenilmesi gereken bir konu olduğu için ve öğrendiklerimi sizinle paylaşmanın güzel olacağı düşüncesiyle bu yazı dizisine başlıyorum. Öncelikle OOP’nin bir düşünce yapısına dayandığını bilmekte büyük fayda var. Yani yazdığımız o kodların altında harika bir felsefe yatıyor ! Bu yüzden de yazacağımız kodun felsefesini bilmek ile işe başlamanın iyi bir yol olduğunu düşünüyorum. Nesneye yönelik programlamada aslında her şeyi bir nesne olarak düşünmemiz gerekiyor. Örneğin bir kütüphane otomasyonunda her kitap bir nesne olarak kabul edilir. İçinde bilgi saklayan, bilginin dokunduğu her şey nesne olabilir. Ve OOP dünyasında aslında her şey nesneler arasındaki ilişkilerden oluşuyor. Olası projemizi nesneler ve onlar arasındaki ilişkileri düşünerek koda dökmemiz gerekmektedir. Ayrıca OOP, gerçek hayattaki problemleri çözmek için daha yüksek bir soyutlama seviyesine izin verir. Felsefesi hakkında kısa bir bilgi edindiğimize göre, hemen class-ları tanıyarak OOP dünyasına giriş yapalım.
Class(Sınıf)
Kütüphane otomasyonu üzerinden düşünmeye devam edersek, kitap nesnelerimizi oluşturmak için bir class-a ihtiyacımız olacaktır. Nesneler kendi başlarına var olamıyorlar yani. Bu class kavramını nesnelerin şablonu olarak düşünebiliriz. Kitabın adı, yazarı, yayın evi gibi field-ları (variable veya attribute da denilir) class-ımızda tanımlıyoruz. Class-lar bu yüzden tanım yapılan yerler olarak düşünülebilinir.
Kütüphane otomasyonunda
- Kitap adı
- Yazarı
- Yayın evi
kısmı class iken
- Yalnız Kaldınız Peyami Bey
- Hamdi Koç
- Can Yayınları
bu tanım ise nesnedir. Başka bir örnekle pekiştirmek isterseniz eğer aşağıdaki görsele bakabilirsiniz.

Nesne oluşturma işlemine örnekleme (instance) denir. Nesneyi oluşturduğunuz zaman memory-de yaşayan bir varlık haline gelir ve yer kaplar. Hatta bir nesne bilgi içermese bile yer kaplar. Nesne ve class yapılarını Kotlin dilinde görmek için için aşağıdaki kod görsellerini inceleyebilirsiniz.

Peki ya bu class-larda sadece field-lar mı tanımlanır diye sorarsanız tabii ki de hayır cevabını veririm. İlgili class-ın field-ları tanımlandığı gibi metotlarda yazılabilir. Haydi metotları inceleyelim !
Method(Metot)
Metot, nesnelerin yapabildiği işlerdir. Bunu bir örnek ile açıklamak gerekirse bir insan class-ımız olduğunu düşünelim. Bu class-tan türeyen insan nesnesinin su içmesi, yemek yemesi gibi olaylar metot olarak yazılabilir. Veya bir çalışan sınıfının içinde zam alma olayını bir metot olarak düşünebiliriz. Metotları kullanarak field-lar üzerinden değişikler yapabiliriz. Maaş örneğindeki gibi çalışan class-ının zam diye bir field-ı olabilir ve bunu zam yap metodu ile yükseltebiliriz.

Constructors(Yapıcı Metotlar)
Herhangi bir class-dan instance aldığımız anda ilk çalışan metotdur. Her yeni nesne oluşturulduğunda, en az bir constructor çağrılır. Constructor-ların ana kuralı, sınıfla aynı ada sahip olmalarıdır. Bir class birden fazla constructor-a sahip olabilir.
Constructor-lar
- İsmi class-ın ismiyle aynı olmalı
- Public olmalı
- Geri dönüş tipi olmamalı
Constructor-ların ilk görevi üstte de dediğim gibi instance aldığımız anda çalışmasıdır. İkinci görevi ise ilk değer ataması yapılabilmesidir.
Inheritance(Miras Alma)
Hemen bir örnek ile açıklayayım. Örneğin bisiklet ve dağ bisikleti diye iki class-ımız olsun. Bisiklet sınıfında tekerlek sayısı ve hız diye değişkeni olsun. Dağ bisikleti class-ının da içinde tekerlek sayısı, hız ve dağ bisikletlerine özel olan sele yüksekliği diye üç tane değişken olsun. İşte tam da burada inheritance devreye giriyor. Yani, dağ bisikletinde tekerlek sayısı ve hız değişkenlerini yazmak yerine bisiklet sınıfından extends etmeliyiz. Bu sayede bisiklet sınıfına yazdığımız tekerlek sayısı ve hız değişkenleri extends ettiğimiz tüm sınıflarda da bulunacaktır. Kod üzerinde anlatmak gerekirse eğer,



Üsteki görseli açıklamak gerekirse, normalde dagBisikleti class-ında seleYuksekligi, hız gibi değişkenler yokken onlar da set edilebilir şekilde karşımıza geldi. Bunun sebebi dagBisikleti class-ını bisiklet class-ından extends etmemiz ve bunun sonucunda orada bulunan tüm değişkenler bisiklet class-ını extends eden bütün class-lara gelecektir. Bu sadece değişkenler ile de sınırlı değil. Extends edilen class-taki metotlar da diğer class-a kalıtım yoluyla geçecektir. Hemen onu da bir görsel ile açıklayayım.


Uyarı: Bir class sadece bir class-ı extends edebilir. Birden fazla class-ı extends edemez.
İşte, kalıtım ile böyle şeyleri yapabiliriz. Örnekleri basit tutmaya çalıştım ki önemli olan burada kodlama yapmaktan ziyade OOP’yi anlamak ve bunu bir kod üzerinden pekiştirmek. Değişkenlere verdiğim değerlerin de gerçekle bir alakası yoktur hepsi tamamen kurgudur :D
Evet arkadaşlar, OOP serimin ilk yazısı burada sonlanıyor. Diğer yazılarımda OOP’nin diğer ayrılmaz kardeşlerini göreceğiz. Umarım faydam dokunmuştur. Diğer yazılarımda görüşmek üzere.
Öneri ve görüşleriniz benim için çok önemli, lütfen düzeltmemi düşündüğün bir kısım var ise bana linkedin üzerinden ulaşabilirsiniz.
Hoşça kalın !
Kaynak
