OOP (Object Oriented Programming)

OOP (Object Oriented Programming)

Nesne yönelimli programlama 4 temel ilke üzerine kuruludur.

Bir programlama dilinin nesne yönelimli programlamayı uyguladığını anlamak için bu 4 temel ilkeyi sağlıyor olması gereklidir.

Bu temel ilkeler kodların değiştirilebilirlik, yeniden kullanım ve esneklik gibi kriterlerin sağlanmasına ön ayak olurlar

Bu ilkeler;

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

Encapsulation (Kapsülleme - Harmanlama)

    Kapsülleme ilkesi, bir sınıfta ait niteliklerin ancak o sınıfa ait metotlar tarafından değiştirilebilmesi ve okunabilmesi ilkesidir.Bu ilke sayesinde nesnelerde oluşacak anlamsızlıkların önüne geçilebilir.

    Ayrıca değişkenlere sınıfların dışında erişim olmaması ve bir sınıf içindeki değişkenlerin nasıl ve ne kadar olacağının da başka kodlardan saklanmış olması anlamına gelir. Böylelikle değişkenlerimizi sarmalayarak istenmeyen durumlardan korunacak bir filtre haline dönüştürebiliriz.


Erişim Belirleyiciler

Bir sınıfa ait nitelik ve davranışlara ulaşabilmek için Erişim Belirleyiciler (Access Modifier) kullanılır.

Erişim belirleyiciler (Access Modifiers); değişken, metot ve sınıfların önüne yazılır ve yazıldıkları konuların erişebilecekleri alanları belirlerler.

Private : 

Yazıldığı öğenin sadece ait olduğu sınıftan doğrudan erişilebilir olduğunu ve o sınıfın dışındaki kod parçacıklarından doğrudam erişim izni olmadığını tanımlar.    

Public : 

Yazıldığı öğenin sadece ait olduğu sınıf için değil, diğer sınıflar tarafından doğrudan erişilebilir olmasını sağlar.Sınıflara ait nesnelerin ve diğer nesneler tarafından kullanılması istenilen metotlar için kullanılır.

Protected :

Public ve Private arasında kalan bir erişim düzenleyicidir. Protected ile tanımlanan öğeler, kendisi ile aynı pakette (package) bulunan sınıflar tarafından doğrudan erişilebilir.


Encapsulation Mantığı

Kitap adında bir sınıfımız olsun ve içerisinde kitapAdi,yazar,sayfaSayisi adlarında değişkenleri olsun. 

Kitap(
    -kitapAdi      : String
    -yazar           : String
    -sayfaSayisi  : Int
         )

Bu sınıfa ait bir Keloğlan nesnesi oluşturalım, 

Kitap : keloglan (
    -kitapAdi      = "Keloğlan"
    -yazar           = "Anonim"
    -sayfaSayisi  : -10
         )

sorun burada ortaya çıkıyor. görüldüğü gibi keloglan nesnesinin sayfaSayisi değişkeni -10 olarak atanmış ve bu durum mantıksal olarak doğru değil. bu durumun önüne geçilebilmesi için encapsulation devreye giriyor ve sınıf için oluşturulan bir
bir validasyonu yapmaya yarıyor.



    Sınıfa ait niteliklerin izinlerini private bu sorunu çözdük ama, biz keloglan nesnesine ait değişkenlere erişimi tamamen kısıtladık. 
    Yani biz oluşturduğumuz nesneye ait sayfa sayısını herhangi bir yerden çağıramayız çünkü değişken private olarak tanımlandı.yada sayfa sayısı yanlış girilmiş bir nesneyi daha sonrasında düzenleyemeyiz.
    Bu sorunu çözmek için sınıfa ait değişkenlerimizi kapsülleyecek, sınıf içerisinde ki metotlar yardımı ile değişkenlerimizi koruma altına alıyoruz ve kullanıma sunuyoruz.Bu metotlara Getter ve Setter metodları diyoruz.


public class Kitap {
	private int sayfaSayisi;
	private String kitapAdi, yazar;


	Kitap(String kitapAdi, int sayfaSayisi, String yazar) {
		this.kitapAdi = kitapAdi;
		this.yazar = yazar;
		if (sayfaSayisi < 1) {
			this.sayfaSayisi = 10;
		} else {
			this.sayfaSayisi = sayfaSayisi;
		}
	}


	public int getSayfaSayisi() {
		return this.sayfaSayisi;
	}


	public void setSayfaSayisi(int sayfaSayisi) {
		if (sayfaSayisi < 1) {
			this.sayfaSayisi = 10;
		} else {
			this.sayfaSayisi = sayfaSayisi;
		}
	}
}
public class Kitap {
	private int sayfaSayisi;
	private String kitapAdi, yazar;
	Kitap(String kitapAdi, int sayfaSayisi, String yazar) {
		this.kitapAdi = kitapAdi;
		this.yazar = yazar;
		if (sayfaSayisi < 1) {
			this.sayfaSayisi = 10;
		} else {
			this.sayfaSayisi = sayfaSayisi;
		}
	}
	public int getSayfaSayisi() {
		return this.sayfaSayisi;
	}
	public void setSayfaSayisi(int sayfaSayisi) {
		if (sayfaSayisi < 1) {
			this.sayfaSayisi = 10;
		} else {
			this.sayfaSayisi = sayfaSayisi;
		}
	}
}




Yorumlar

Bu blogdaki popüler yayınlar

OCPP ve Open Source Şarj Protokolü (OCA) nedir?

SQL

OOP - Abstraction (Soyutlama)