Kotlin ile Nesne Yönelimli Programlama

Buse DEMİR
4 min readMar 10, 2022

Herkese Merhabalar.

Genel olarak bütün programlama dillerinde karışımıza çıkan Nesne Yönelimli Programlama (OOP-Object Orıented Programmıng) yapısından biraz bahsedeceğim. Aslında her junior yazılımcının bu aşamaya geldiğinde gözünün korktuğu ve nedir bunlar dediği önemli bir konudur OOP. Biraz Nesne Yönelimli Programlamadan Bahsedelim.

—
:)

Bence en başta sorulması gereken bir soru bu. Biz nesneye niye yöneliyoruz. Duruyor işte uslu uslu derdimiz ne?? :) Herhâlde hep böyle uç bucak sorular düşündüğüm için yavaş ilerleyen oldum.. Neyse konumuza gelirsek. Bunu epeyce araştırdım. Ben size ilk önce günlük hayatımızdan örnek vererek başlamak istiyorum. Örneğin ben çok güzel kurabiye yaparım. Kurabiye için gerekli malzemeler standarttır. Yağ, un, pudra şekeri, vanilya. Bu malzemeler bir araya gelerek kurabiye kıvamına getirilir. Ardından şekil verilir ve fırına verilir. Herkes için standart bir tariftir. Burada farklılık yaratacak olan şey ise kurabiyeyi kimin neyli yaptığı diyebiliriz. Ben tarçınlı yaparım. Ablam kakaolu, annem sade , nefistarifler susamlı .. gibi gibi. Burada anlatmak istediğim şu oluyor. Malzemeler standart , ana bileşenler sabit. Ana bileşenler bizim nesnelerimiz olmaktadır. Nesnelerin toplanması ve belli süreçlerden geçerek tercihlerimiz sonucunda kurabiye oluşmaktadır. Aslında biz kurabiyemize bir sınıf malzemelerine birer nesne diyebiliriz.

Kilit noktaya dikkat !! Yağ, un, pudra şekeri sabit :)

Kurabiyemize bir sınıf dersek içerisindeki her bir nesnenin(malzemenin) adı , türü , miktarı , rengi vb özellikleri olur. İşte aslında gerçek hayattan verdiğimiz örnek ile açığa kavuşmuşta oluyoruz. Nesneler arasında bir ilişki var ve bu ilişkileri class (sınıf) yardımıyla modelleyerek daha kolay bir şekilde oluşturuyoruz.

Nesne Yönelimli Programlama bence her yazılımcının altınıdır. Çünkü OOP aslında ayrı ayrı tutulan küçük bileşenleri bir araya toplayarak düzenli,çok daha basit ve işlemi çok daha kısa sürede yapmamızı sağlıyor. Tamamen sistemli bir yapıya dönüştürmüş oluyoruz. Ama OOP kullanmak istiyorsak bence bunun en başında bir tasarım aşaması çok önemli rol alır. Yoksa sistematik olacak dediğim yapı bir çorman yapıya dönüşebilir. (Çorman yapı ? Karman Çorman 🙈)

OOP ’nin Sağladığı Kolaylıklar

  • Gerçek dünyayı düşünürsek; bir binanın tasarımında çizimi class , fakat içi nesnelerdir. Yani nesnelerin tasarımları sınıf içerisinde yapılır. Bu gerçekte de böyledir.
  • Aynı işlemi milyon kez farklı farklı yerlere yazmaktansa kod tekrarırını önlediği için geliştirme verimliliği de artar.
  • Her nesne birbirinden ayrı olduğundan ve kendilerine ait özellikler barındırdığından bilgi gizliliği konusunda büyük avantaj sağlar.
  • Kodumuzu tek yerde uygulamanın ana yerine yüklenmeden oluşturduğumuz için bir değişiklik yapılması esnasında tüm projede oynama yapmadan sadece tek bir sınıf üzerinden yapılan değişiklik çalışma zamanını önemli ölçüde etkiler. Zaman kaybı da minimum olur.
  • Nesnelerimizi oluştururken bir sınıf içerisinde gerçekleştiririz ancak bu kodlar başka projelerde de kullanılır.

Pekala bu OOP yi kullanmak için ne yapmalıyız ?

Nesne yönelimli programlamanın göz bebeği olan 4 temel özelliğimiz mevcuttur. Bu özelliklerden birini red eden programlama dili OOP ye de bay bay demeli👋. Çünkü bunlar OOP nin temel yapı taşıdır. Şimdi gelelim bakalım bunlar nelermiş.

1-ENCAPSULATİON -Kapsülleme-

En kısa tanımıyla bir class içerisindeki property e başka classdan ulaşmak. Property ler değişebilir. Bunu yazılımcı belirler. Bu belirlemeyi access level ile gerçekleştirir. Ne demiştik.. Her nesne kendi özel durumlarını bir sınıf içinde tutar. Kapsülleme ile hangi özellik ve davranışın dışarıdan kullanılacağını belirleyebiliriz.

  • Kapsülleme Public, Private ve Protected olarak 3 kısımda incelenir.
  • Public: Herkesin kullanabildiği özellik ve davranışlara verilen isimdir.
  • Private: Sadece kendi sınıfında kullanılan özellik ve davranışlara verilen isimdir.
  • Protected: Sınıf ve Miras Alınan alt sınıflarda kullanılmaya açık olanlara verilen isimdir.

https://www.argenova.com.tr/nesne-yonelimli-programlama-oop-nedir

2-INHERITANCE -Kalıtım-

Bir sınıf oluşturduğumuzu düşünelim. Bu sınıfa ait yine aynı özellikleri barındıran bir sınıf daha oluşturacağız. E o zaman aynı özellikleri ve işi tekrardan yapmamıza ne gerek var ki. Kısaca bir sınıftan başka bir sınıf türeyebilir. Türemiş sınıf oluştururken aralarında alt üst ilişki oluşabilir. Alt sınıf üst sınıf özelliklerini kapsayabilir.

Kalıtım alacağımız sınıfın başına OPEN yazıp, erişime açmalıyız..

3-POLYMORPHISM -Çok Biçimlilik-

Bir metodun yada bir işlemin bir çok nesne tarafından kullanılmasıdır. Kotlin de bu 2 ye ayrılır.

Static Polymorphism : Aynı metod farklı parametreler alarak oluşturulabilir. Main de bu metotları çağırdığımız zaman gerekli olan parametrelere göre aynı isime sahip olan metotların içerisinde hangi metodu çağıracağını bilebilir. Kısaca çok biçimliliğin aynı sınıfta kullanılmasıdır.

Dynamic Polymorhism: Bir sınıfın kalıtım olarak oluşturduğu diğer sınıf içerisinde oluşturulan aynı metotlar farklı işlevlerde kullanılabilir. Burada metodumuzu ovveride etmemiz gerekir. Böylelikle alt sınıf da ki aynı metot olan yapıyı değiştirebilir ve işlevlerini farklılaştırabiliriz. Kısacası çok biçimliliğin farklı sınıflarda kullanılmasıdır.

4- ABSTRACTION -Soyutlama- & INTERFACE

Soyutlamayı uygulamak, her nesnenin yalnızca onu kullanmak için üst düzey bir mekanizmayı ortaya çıkarması gerektiği anlamına gelir. Bu mekanizma, içinde uygulama ayrıntılarını saklamalıdır. Böylece, sadece diğer nesnelerle ilgili işlemleri göstermelidir. Eğer bir sınıf içinde nesne üretmek mantıksız ise o sınıf soyutlanabilir. Mesela bir A fonksiyonumuz olsun bu fonksiyon öyle işlevsel ki daha önce yazdığımız bütün objelerde kullanabiliyor olalım. Yazdığımız bütün sınıflarda bu A fonksiyonunu tanımlamak yerine sınıflarımıza abstract class’ımızı implement ederek A işlevimizi yerine getirebiliriz.​

Abstract Class ve interface’lerden objeler türetilemez. Class’lara implement edilirler. Bir metod birden fazla class’ta kullanılacaksa Abstract veya Interface içerisinde bir yapıda tutmamız mantıklı olacaktır.

INTERFACE

Bir class değillerdir. Arayüz soyut sınıflarıdır. Obje türetemeyiz. Sınıflar birden fazla sınıftan kalıtım alamazlar. Ancak INTERFACE bu sorunu ortadan kaldırır ve bu sayede sınıflar birden fazla kalıtım alabilirler. Interface içerisinde değişkeni initialize etmiyoruz. Kalıtım alınan sınıflar intialize etmemizi istiyor.

Öğrendiklerimi anlatacaklarım bu kadardı umarım faydalı olmuştur..

İyi Çalışmalar Keyifli Kodlamalar ..

--

--

Buse DEMİR

Hello, my name is Buse. I am a computer engineer. ❤️Love Android and Kotlin❤️. Just live..