Java İle Nesne Yönelimli Programlama Object Oriented Programming (OOP)

Zahit Ziya GÜREL
7 min readMay 5, 2021

--

Not Defterime Notlar serisine Object Oriented Programming (OOP) yani Nesne Yönelimli Programlama ile devam ediyorum.

Nesne yönelimli programlamayı kısaca aşağıdaki maddeler ile inceleyebiliriz.

  • Nesne ve Sınıf Yapısı
  • Constructor (Yapıcı Metot)Nedir, Kullanımı ve Overloading
  • Nesne Yönelimli Programlamanın 4 Ana Prensibi
  • Encapsulation (Kapsülleme)
  • Inheritance (Kalıtım)
  • Polymorphism (Çok Biçimlilik)
  • Abstraction (Soyutlama)

Nesne ve Sınıf Yapısı

Evrende var olan bir çok maddenin geneli için kullanılan kavrama sınıf adı verilir. Her sınıf kendine göre özellikler taşır. Örneğin Araba, Ürün veya Hayvan gibi varlıklar evrende yer alır.Her biri birer sınıf özelliği taşımaktadır. Sınıflar, ortak alanları ve özellikleri tutmak için vardır.

Örneğin bir e-ticaret sitesinde birden fazla ürün satışı yapılmakta olsun. Bu e-ticaret sitesindeki her bir ürün ayrı bir sınıftır.

Evrende bulunan her maddenin özellikleri veya işlevleri vardır. Bu özellik veya işlevleri nesne olarak olarak adlandırmaktayız.

Yukarıdaki sınıf için kullanılan örneğe devam edecek olursak, ürünleri kendi arasında sınıflandırmıştık. Giyim, Aksesuar veya Elektronik, ürünlerin nesnesi olur.

Sınıflara nesneler ile ulaşırız. Daha anlaşılır olması için aşağıdaki örneği inceleyebiliriz.

Customer Manager isimli sınıf.

Yukarıdaki “Customer Manager” isimli sınıfın özelliklerini kullanabilmemiz için “Main” sınıfından “Customer Manager” için bir nesne oluştururuz. Bu nesne “Customer Manager” tüm özellikleri içermektedir.

Main sınıfında CustomerManager sınıfın çağırılması

Main sınıfına “Customer Manager” sınıfının nesnesi ile ulaşmak için “new” anahtar sözcüğü ile “Customer Manager” için yeni bir “manager” adında nesne türetiriz.

Constructor (Yapıcı Metot) ve Overloading

Değişkenlerin varsayılan değerlerini oluşturmak için kullanılan bir metottur. Bu metodu kullanarak birden fazla özelliklere değer atayabiliriz. Yapıcı metotlar sınıfın ismiyle aynı olmak zorundadır.

Product sınıfına ait Yapıcı Metodu

Yapıcı metotlar alacağı parametrelere bağlı olarak birden fazla olabilir. Yukarıdaki örnekte olduğu gibi parametre almayan metot ve name parametresini almış olan iki farklı Constructor metodu vardır.

Product sınıfına ait Yapıcı Metotların çalıştırılması

“Main” sınıfında “product” ve “product1” isimli nesneler ile Product sınıfına ait yapıcı metotlar çalışır. Sonuç olarak aşağıdaki çıktıyı elde ederiz.

Yapıcı Metot Çıktısı

Overloading: Bir metodun aynı isimle ama farklı parametre ile çağırılmasına Metot Overloading denir. Yukarıda ki örnekte olduğu gibi product yapıcı metodunun birden fazla kullanabilmemize olanak sağlan bir yoldur.

Nesne Yönelimli Programlamanın 4 Ana Prensibi

Nesne Yönelimli Programlamanın 4 Ana Prensipte inceleyebiliriz. Bunlar:

  • Encapsulation (Kapsülleme)
  • Inheritance (Kalıtım)
  • Polymorphism (Çok Biçimlilik)
  • Abstraction (Soyutlama)

Daha da detaylandırmak için ne işe yaradıklarını örnekler ve açılamalarla aşağıdaki gibidir.

Encapsulation (Kapsülleme)

Evrende var olan varlıkların dışarıdan alacağı herhangi bir değişikliği engellemesi için kendini koruma altına alması gerekir. Bu sayede varlığın değişmezliği ve bütünlüğü garanti altına alınmış olur. Bu işleme Encapsulation (Kapsülleme) denir.

Örneğin yeni nesil arabalarda bir motor kaputunun altına baktığımızda motor kapalı bir kutu halin bulunmaktadır. Dışarıdan herhangi bir müdahaleye açık değildir ve tam koruma altındadır. Her bir varlığın özelliklerini erişim belirleyici anahtarları vardır.

  • Public: Dışarıdan erişime açık olan her bir varlık özelliğinin erişimi
  • Private: Dışarıdan erişime kapalı fakat bulunduğu sınıf içerisinde erişime açık olan erişim belirleyici anahtardır.
  • Proctected: Bulunduğu paket veya miras alma (Inheritance) yöntemi ile erişime açık olan erişim belirleyici anahtardır.

Kısaca bu yapının nasıl oluşturulduğunu gerçek bir örnek üzerinden devam edelim. Çalışanlara ait bir sınıfımız olsun. Bu Çalışan sınıfı kendine ait bir takım özellikler (attribute|field) içermektedir.

Employee — Çalışan Sınıfı

Çalışan sınıfının kendine ait özellikleri vardır. Bu özellikleri, erişim belirleyici anahtarlar ile erişebileceği alanlar belirlenmiş olunur. Çalışanın yaş özelliği haricindekiler “private” olarak tanımlanmıştır. Bu da bizim dışarıdan sadece çalışanın yaşına ulaşabileceğimiz anlamına gelmektedir. Kısaca bu sınıfa ait bir nesne ile “yaş” harici değişkenlere erişim sağlayamayız.

Peki diğer değişkenler üzerinde erişim için ne yapmalıyız ?

Getter: Sınıf içerisinde bulunan özelliklerin başka bir sınıf üzerinden mevcut değerin getirilmesini sağlayan metottur. Getter metodu istenilen parametreye ait değeri geri döndürür.

Setter: Sınıf içerisinde bulunan özelliklerin başka bir sınıf üzerinden gerekli düzenlemeleri veya atamaları yapabildiği metottur. Setter metodu atama metodudur. İstenilen parametre gerekli atamayı yapmayı sağlar.

İki farklı constructor ile değişkenlerin değerleri belirleme yapabilir. Boş olan yapıcı metot ile parametrelere atama işlemi için setter fonksiyonlarına erişim sağlarken, tek id değişkeni alan constructor metodu ile doğrudan atama işlemi yapabiliriz.

Şimdi Çalışan sınıfının özelliklerine erişebilmek için setter ve getter metotlarını koyalım.

Employee Set Ve Get Metodu

Setter ve Getter metotlarını oluşturmuş olduk. Constructor yardımı ile hem boş metodu kullanarak nasıl atama yapıldığını hem de tek bir değişkene doğrudan nasıl atama yapıldığını göstermiş olacağım.

Employee Main
  • İlk olarak id parametresini yapıcı metot ile değiştireceğiz. Employee sınıfında tanımladığımız Constructor ile id parametresine atama yaparız. Sonucu yazdırmak için getter metodu kullanıldı.
  • Employee sınıfından boş olan contructor ile atama işlemi yapabilmemiz için setter metodu kullanılır. Çalışanın adını setter metodu ile yaparız. Getter metodu ile mevcut değerini alırız.
  • Public olarak tanımlanan yaş değişkenine doğrudan erişebilir ve atamasını yapabiliriz. Setter veya Getter metotlarına ihtiyaç duymayız.
Employee Log
  • Ve ekran çıktıları sırayla yukarıdaki gibi yer alacaktır.

Inheritance (Kalıtım)

Evrende bulunan her bir varlığın kendine ait özellikleri bulunmaktır. Bu özellikler bir varlık için ne kadar kendine ait olsa da evrendeki diğer varlıklarla benzer özellikler içermektedir. Bizde burada benzer özelliklerin, temel özellik olarak bir çatı altında toplarız. Ortak çatıda toplanan bu özelliklere ait olan varlıklar, bu ortak (ana) sınıftan türerler.

Yukarıdaki ifadeyi bir örnek ile açıklayacak olursak: Ülkemizde çok fazla türde taşıt türü vardır. Otomobil, Minibüs, Otobüs ve Kamyon bir taşıt türüdür. Her taşıtın markası, modeli, yılı ve motor gücü ortaktır. Bu ortak olan özellikleri tekrar etmek yerine taşıt isimli bir sınıf altında toplanır ve extend anahtar kelimesi ile otomobil, minibüs, otobüs ve kamyonu taşıt sınıfından türetiriz. Bu sayede temiz kod (cleancode) sağlanmış olacaktır.

Bu örneği kodlayarak asıl amacını anlamamıza yardımcı olsun. Bunun için Müşteri(Customer) ve Çalışan(Employee) ilişkisini veri tabanı işlemlerini örnek alalım.

Müşteri ve çalışan için listeleme ve arama özellikleri ortaktır. Bunun için “PersonMenager” adında ortak özellikleri içeren bir sınıf oluşturulur.

Person

Bu ortak sınıfı kendilerine özellik edinmiş Müşteri ve Çalışan sınıflarını oluşturalım ve kendine özel olacak olan özellikleri de ekleyelim.

Employee (Çalışan)

Çalışan sınıfı yukarıdaki kod bloğunda olduğu gibi hem Person sınıfındaki özellikleri hemede kendine özel bir özellik almıştır.

Customer (Müşteri)

Müşteri sınıfı da “person” sınıfında yukarıdaki türetilmiştir. Eğer Müşteri için özel bir durum eklenecekse buraya eklenecektir.

Main

Son olarak kod bloğunda görüldüğü gibi sınıflara ait nesneler ile ilgili sınıfları çağırdığımızda kendilerine ait olan özelliklere ulaşabilmişlerdir. Customer sınıfının kendine özel bir durumu olmadığı için sadece Person sınıfının özelliklerini almıştır.

Polymorphism (Çok Biçimlilik)

Yukarıda bahsetmiş olduğum Inheritance (Kalıtım) yoluyla türetilen sınıfların temel olarak üst sınıfın özelliklerini aldığını düşünelim. Her sınıf üst sınıftan türediği için aynı özellikleri kendine göre işleyebilir. Aynı zamanda üst sınıfa ait olmayan özelliği kendine de edinebilir.

Çalışan ve Müşteri örneğinde olduğu gibi istersek Müşteri sınıfında listeleme olayını tekrardan düzenleyebiliriz. Bu olayları Override ve Overloading ile açıklayabiliriz

  • Override (Üzerine Yazma) : Kalıtım ile türetilen sınıfta, yeni bir metot belirleme işlemlerine Override denir.
  • Overloading (Yeniden Yazma) : Üst sınıfta var olan bir metodu farklı durumlara göre yorumlanmasına overloading denir. Birden fazla alacağı parametrelere göre yazılacak metot sayısı değişiklik gösterebilir.

Yukarıdaki anlatılanları bir örnek üzerinde aşağıdaki gibi netleştirelim.

Bir bankaya ait hediye para tanımlaması yapılması istenmektedir. Müşterinin yapacağı alışveriş harcamalarına göre verilecek hediye para(bonus) işlemleri gerçekleştirilecektir. Travel, Mil ve Car hediye para çeşitlerimiz olsun. Bu hediye para çeşitlerinin hepsi sonuç olarak hediye para olduğu için “Bonus” isimli sınıfı kendilerine extend edecektir.

Bonus

Bütün hediye para çeşitleri birer bonus olduğu için bu sınıfı extend edecektir.

TravelBonus

Seyahat harcaması için müşterinin hediye para işlemeleri bu sınıfta yapılır.

MilBonus

Mil harcaması için müşterinin hediye para işlemeleri bu sınıfta yapılır.

CarBonus

Araba alım işlemleri için müşterinin hediye para işlemeleri bu sınıfta yapılır. Bonus sınıfından extend edilmiştir. Fakat araç alım işlemlerinde hediye para katsayısı mevcuttakinden farklıdır. Bu sebeple yeniden düzenleme işlemi yaparak bu mevcutta bulunanı değiştirir ve ihtiyacımıza göre kullanırız.

Main

Harcamaları bir liste halinde döngü ile tek seferde hesaplarız. Hesaplanan hediye para sonuçları aşağıdaki gibi olacaktır.

Hesaplama işlemi sonucu

Sonuç olarak ata sınıftan türetilen sınıflar atadan aldığı özellikleri kendilerine göre yorumlayabilir, türetebilir. Buna çok biçimlilik denir.

Abstraction (Soyutlama)

Evrende bulunan her bir varlığın durumu veya davranışı hakkında farklı boyut ile paylaşım bulunulması gerekebilir. Bu davranışların detayı hakkında bilgi vermeden soyutlanmış olur. Bu işleme Abstraction (Soyutlama) denir.

Alışveriş yaparken sepete ekle işlemi gerçekleştirilirken arkada çalışan metot ve yordamları göremeyiz. Bu işlem ile soyutlanırmış oluruz.

Yazının daha fazla dallanmaması adına bir sonraki yazıdaAbstraction (Soyutlama) devamı olan “Abstract Class” ve Interface hakkında çalışmalar yapacağım.

Yazının devamı…

--

--

Zahit Ziya GÜREL
Zahit Ziya GÜREL

Written by Zahit Ziya GÜREL

Full Stack Java Developer at Turkcell

No responses yet