Kotlin ile Nesne Yönelimli Programlama

Recep Yeşilkaya
3 min readSep 4, 2020

--

Sevgili Dostlar Selamlar, Bugünki sohbetimde sıklık ile duyduğunuz bir konu olan Nesne Yönelimli Programlama’nın Kotlin’deki yapısını konuşacağız. Hadi başlayalım.

Bir çok programlama dili gibi Kotlin’de Obje odaklı bir dildir. Temelinde Nesne Yönelimli Programlama (OOP) bizlere farklı sınıfları farklı amaçlar için kullanabilmeyi ve gerektiğinde farklı zamanlarda ve farklı yerlerde çağırabilmeyi ve çalıştırabilmeyi sağlar. OOP 4 ana başlık,

  • Abstraction
  • Encapsulation
  • Inheritance
  • Polymorphism

olarak ifade edilir. Obje odaklı programlama ile genelde sınıflar üzerinde çalışırız ve bu sınıflar dan objeler üretiriz. Bu objelere sınıfın instance’ı da denmektedir.

OOP aslında her işin farklı bölümler ile yapılmasıdır.

Örneğin; bir işyerinde tasarımı bir ekip, kodlamayı bir ekip pazarlamasını ise ayrı bir ekip yapar ve süreci yönetir. Aynı şekilde OOP ile de class’lardan objeler türeterek yazılım sürecini belli alanlara bölüp işlemlerimizi gerçekleştiririz.

Sınıf ve Objeler

İçerisinde fonksiyonlar ve Property’ler barındırabilen, class parametreleri ile başlayan kod bloklarının bütününe sınıf denir. Bu sınıftan türetilen örneklemelere ise obje denir. Temel olarak bir değişken tanımladığımızda değişken tipini String olarak belirtip, bir değer ataması yaparsak String sınıfından bir obje türetmiş oluruz.

Constructor-Init

  • Constructor bir sınıftan obje türetildiğinde init den sonra ilk çağırılan fonksiyondur. Birden fazla constructor tanımlaması yapılabilir. Her obje türetildiğinde çağırılacaktır.
  • init ile Class içerisinde ilk yapılmasını istediğimiz işlemleri tanımlayabiliriz.

Kotlin’de constructor’lar primary constructor ve secondry constructor olarak ikiye ayrılır. Genelde primary constructor tanımı kullanılır çünkü bu tanımlama ile ekstra değişken ataması yapmazsınız. Class içerisinde bu değişkenlere ulaşmak için “val-var” kullanmanız gerekmektedir. Her iki constructor’ı kullanmak istediğinizde Secondry constructor geri dönüş değeri olarak “this” belirtmelisiniz.

Aşağıdaki örnekte belirttiğimiz gibi Dress Class’ından obje türetirken tanımladığımız parametrelere göre farklı constructor’ların çalıştığını gözlemleyebiliriz.

Encapsulation

Class içerisinde tanımlanan değişkenleri get ve set etme işlemlerine denir.

Java’da get ve set işlemleri için ayrı ayrı metodlar yazmamız gerekirken Kotlin bize bu işlemi otomatik sağlar. Dilersek get ve set metodlarını özelleştirebiliriz.

Inheritance

Bir sınıfa başka bir sınıfın değişken ve fonksiyonlarını eklemek istiyorsak inheritance(kalıtım/miras) kullanılır. Böylelikle oluşturduğumuz bir class’ta başka bir class’ın değişkenlerini ve fonksiyonlarını kullanabiliriz.

Inheritance yaptığımız sınıflar default olarak final’dır. Bu yüzden Inheritance alıcağımız sınıfı open yapmalıyız.

Polymorphism

Polymorphism 2 ye ayrılır. Static Polymorphism ve Dynamic Polymorphism.

Static Polymorphism

Aynı metodun farklı parametreler alarak oluşturulmasıdır. Böylelikle bu metodları çağırırken gönderdiğimiz parametreler göre aynı isime sahip metodların içerisinden hangi metod’u çalıştıracağını bilir.

Dynamic Polymorphism

Inheritance ettiğimiz class’daki bir metodu ovveride etmemize verilen isimdir. Böylelikle o metodun içeriğini istediğimiz gibi değiştirebiliriz.

Abstract-Interface

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.

Abstract, tüm classlarda kullanılacak yapıları içerirken Interface’ler nitelik bazlıdır. Bu yüzden spesifik bir özellik içeriliyorsa bu yapıyı Interface’lerde tanımlamalıyız. Şablon yapıları kurgularken de Abstract class’ları tercih etmeliyiz.

Abstract

Birden fazla Abstract Class bir sınıfa implement edilemez. Abstract Class içerisinde fonksiyonların abstract olacağını belirtirsek body’siz fonksiyon tanımlayabiliriz aksi halde body’siz fonksiyon tanımlamasına izin verilmeyecektir. Değişken tanımı yapılırken initialize etmemiz gerekmektedir.

Interface

Interface’ler bir class değildir. Birden fazla interface bir class’a implement edilebilir. Class içerisinde birden fazla interface implement edilmişse ve “super” kullanılmak istenirse, “super” interface ismi ile beraber kullanılmalıdır. Interface içerisinde fonksiyon tanımlarken body açmak zorunda değiliz eğer body açarsak isteğe bağlı override ederiz. Fakat body’siz fonksiyonları zorunlu olarak override etmemiz gerekmektedir.

Kotlin ile Nesne Yönelimli Programlama konulu yazımın sonuna gelmiş bulunuyoruz. Başlı başına blog yazılacak konuları özet olarak bir makalede ifade etmeye çalıştım. Umarım faydalı olmuştur.

Keyifli Kodlamalar..

--

--

Recep Yeşilkaya
Recep Yeşilkaya

No responses yet