Kotlin’de Nesne Yönelimli Programlama (2)

Kotlin’de Nesne Yönelimli Programlama (2)

Herkese merhabalar. Geçtiğimiz yazıda Kotlin’de nesne yönelimli programlamaya ufak bir giriş yapmıştık. Bu yazıda ise nesne yönelimli programlamada kullanılan diğer kavramlardan bahsedeceğiz.

Kalıtım (Inheritance)

Önceki yazımızda bahsettiğimiz gibi, her sınıf nesne üzerinde çalışmak için özellikler ve yöntemler içerir. Peki biz bu özellikleri nasıl kullanacağız? Burada devreye kalıtım (inheritance) giriyor. Nesnelerin özelliklerinin ve yeteneklerinin üst sınıftan alt sınıfa miras alınmasına kalıtım denir. Kalıtım kodun tekrar kullanılabilirliğini arttırır. Kotlin’de tek ebeveynli (single-parent) sınıf kalıtım yapısı vardır. Her sınıf bir parent sınıfına sahiptir ve buna superclass denir. Her alt sınıf (subclass), üst sınıfın miras aldığı olanlar da dahil olmak üzere üst sınıfın bütün üyelerini miras alabilir.

Kotlin’de sınıflar default olarak final’dır. Yani miras alınamazlar. Bir sınıfı kalıtsal hale getirmek istiyorsak başına open anahtar sözcüğünü getiririz. Bir önceki yazımızda sınıf kavramından bahsederken bir Car sınıfı oluşturmuştuk. Aynı sınıfı ele aldığımızı varsayalım ve bunu kalıtıma uyarlayalım.

Araba özelliklerini tuttuğumuz bir sınıf oluşturduk ve bunu open anahtar kelimesiyle tanımladık. Bu sınıfta sadece renk, model ve satılık olup olmadığının bilgisini tutuyoruz. Şimdi Car adında ikinci bir sınıf oluşturalım ve bunu oluşturduğumuz ilk sınıfa bağlayalım.

Bu sınıfın başında da open anahtar sözcüğünü kullandık çünkü bu sınıf ara sınıf görevi görecek. Görüldüğü üzere Car sınıfına ait brand parametresi dışında CarProp sınıfındaki parametreler de parantez içinde mevcut. Yani artık Car sınıfından CarProp sınıfındaki bütün özelliklere erişilebilir. Buna kalıtım denir. Aracın kasa tipini tutacağımız başka bir sınıf daha oluşturalım.

CarType’da tutacağımız type bilgisi dışında diğer bütün özelliklerin yine bu sınıfa da aktarıldığını görmüş olduk. Şimdi main fonksiyonu içinde bu özellikleri nasıl kullanabileceğimize bakalım.

CarType sınıfından car adında bir nesne oluşturduk. Car nesnesi görüldüğü üzere mevcut bütün özelliklere erişebilmektedir. Kodumuzun çıktısı şu şekildedir:

Car brand: Opel
Car type: Sedan
Car color: Black
Car model: 2020
Is for sale? : true

Interface (Arabirim)

Nesne yönelimli programlamanın temel yapılarından biri olan interface, classlarda yapılacak ortak işlemleri deklare etmek için kullanılır ve ilgili classlara implement edilir. Yapı şu şekildedir:

interface  InterfaceAdı {  //kod  }

Bir örnekle açıklayalım.

AverageGrade adında bir interface oluşturduk ve Grade adında bir sınıf tanımladık. Kod bloğunun içinde calculate metodu override edildi. Bu interface’i implement eden herhangi bir sınıf interface içindeki metodu override etmek zorundadır.

Overriding

Bir metodun tekrar yazılması işlemine override denir. Herhangi bir sınıfa kalıtım yoluyla ya da interface kullanarak dahil edilen metotlar bu yöntemle değiştirilerek tekrar yazılabilir. Interface yapısında override zorunlu bir işlemdir.

Abstract Class

Tekrar kullanılmak istenen bir görevi ya da özelliği başka sınıflara devretmek için kullanılır. Kalıtım uygulanan diğer sınıflardan farkı ise abstract classtan nesne üretilemez. Tanımlama yaparken abstract anahtar sözcüğünü kullanırız. Bir örnekle açıklayacak olursak:

Abstract sınıflar doğrudan başlatılamaz ve subclasslarda (alt sınıflarda) override edilmesi gereken işlemler olabilir. Abstract classlar metotların ve özelliklerin subclasslara implement edilmesi bakımından farklıdır. Yukarıdaki örneği baz alacak olursak eat() metodunu direkt olarak devraldığımızı görürüz. Fakat bazı özellikleri override ederek kullanmak zorunda kaldık.

Extension Function

Kalıtım kullanmadan bir sınıfı yeni işlevlerle genişletmek (extend) istediğimizde extension fonksiyonlarını kullanırız. Bu yöntemle kod üzerinde değişiklik yapmamıza da gerek kalmaz.

Kotlin’de kalıtım mantığından ve kalıtım için diğer gerekli özelliklerden bahsetmiş olduk. Kotlin serimizin sonuna yaklaşmaktayız ve eğer buraya kadar geldiyseniz umarım keyifli bir yolculuk olmuştur. Bir sonraki yazıda Kotlin’de kullanılan özel sınıflardan bahsedeceğiz. Bir sonraki yazıda görüşmek üzere, hoşça kalın.

yazı

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir