Java Eğitimi 16- Nesne ve Sınıf Yapısı

Herkese merhabalar,

Bu yazıyla birlikte Java’da nesne ve sınıf yapısı konusuyla devam ediyoruz. Aslında bu zamana kadar sınıfları kullanarak işlemler yaptık, programlar yazdık. Bu yazıyla birlikte konunun biraz daha derinlerine ineceğiz. OOP yapısının ne anlama geldiğini, nesnenin ne olduğunu hep birlikte göreceğiz. O halde yavaş yavaş başlayalım.

Java programı ile kodlanan projelerde nesne yönelimli programlama kullanılmaktadır. Buna kısaca OOP adı verilir. Peki ne anlama gelir? OOP; Object-Oriented Programming kelimelerinin baş harflerinden meydana gelen bir kavramdır. OOP, programcıların işini kolaylaştıran bir teknolojidir. Nedeni ise işlemlerin çok daha kolay ve hızlı yoldan yapılmasını sağlamaktan kaynaklanır. Bu kavram içinde birçok alt kavram bulundurur. Şimdi onları incelemeye başlayalım.  

NESNE(OBJECT)

Masanızın üzerinde duran defter, elinizde tuttuğunuz kitap, su şişeniz, telefonunuz, bilgisayarınız ve etrafınızda görmüş olduğunuz her şey bir nesne olarak tanımlanır. Bu cümleden hareketle nesnelerin özelliklerinden birinin “tanımlanmaya ihtiyaç duymasıdır” diyebiliriz. Şöyle düşünelim; sizin ve yanınızda bulunan herhangi bir kişinin telefonlarını göz önünde bulunduralım. İki telefon da birbirinden farklıdır değil mi? Çünkü her bir nesnenin kendisine özgü özellikleri vardır ve bu özellikler onu diğer nesnelerden ayırt etmeyi sağlar. Belki aynı markadırlar ama renkleri farklıdır. Biri gri iken diğeri siyahtır. Ama aynı işlevleri görüyorlar ve ikisi de telefon olarak adlandırılıyorlar. Bu sebeple ikisi de telefon nesnesi olarak görülür.

Yeni bir telefon almak istediğinizde hangi özelliklere dikkat ettiğinizi düşünün. Biz renkten gitmeye devam edelim ve siyah rengi tercih edeceğimizi varsayalım. Siyah ve beyaz iki telefon arasındaki kararımızı net bir şekilde belirleyebiliriz. Ama ya iki siyah telefon arasında kararsız kaldıysak, o zaman ne yaparız? İşte bu durumda nesnelerin diğer özellikleri devreye girer çünkü her nesneyi birbirinden ayıran özellikler bulunur demiştik. Mağazada aynı üründen iki tane oluyor, o zaman bunlar farklı nesne sayılır mı? Evet sayılır. Her ne kadar birbirlerinin aynısı da olsalar, ikisi de ayrı nesneler olarak düşünülür. İkisini birbirinden ayıramayız ama iki farklı nesnedir yorumunu yaparız. Şu telefonu istiyorum derken hangisi diye sorulduğunda soldaki, ortadaki, aşağıdaki gibi yanıtlar vererek istediğimiz nesneyi seçebiliriz. Bu da aynı iki nesnenin konumlarının farklılığını bize göstermiş olur. Nesnelerin özellik(property) ve davranış(behavior) olmak üzere iki temel bileşeni bulunur. Ayrıca nesne, birçok sınıftan üretilen ve o sınıfın özelliklerini taşıyan bir model olarak tanımlanır. Bu şekilde birçok kez kullanılabilir. Sınıflardan türetildiğini söyledim, o zaman şimdi sınıf(class) konusuna geçiyim. 

CLASS(SINIF)

Class, OOP programlamanın en önemli ögelerinden birisidir hatta bazen en önemlisi olarak da söylenebiliyor. Önceki yazılarda metodlardan bahsetmiştik, işte o methodlar ve özellikler class içinde yer alır. Birkaç kere kullanılabilirler. Yani kullanım sayısı gibi bir ifade class’larda yer almaz.

Java programları sınıflardan meydana gelir. Bu sebeple sınıflar class ifadesi ile başlar. Sınıflar veri ve alt programları(metotları) içerir. Bir otoparkı gözünüzün önüne getirin. Otoparkta yer alan her bir araba nesne olarak kabul edilir, tüm arabalar için yapılmış olan tasarıma da sınıf adı verilir. Araba ile ilgili Java’da bir class yazmaya çalışalım. Bunun için önce bir class tanımlamamız gerekiyor.

Açmış olduğumuz class’a arabanın özelliklerini yazabiliriz. 

public class car {
public String color;
// arabanın rengi
public String model;
// arabanın modeli
  public int wheel;     // arabanın tekerlek sayısı
  public int price;     // arabanın fiyatı
// eklemek istenen özellikler yazılır
}

Class kısmında yer alan özelliklerden bir araba üretmek istiyoruz. O yüzden bu özellikleri farklı bir metot içinde bir araya getirebiliriz. Arabayı oluşturabilmek için referans(nesnelerin yerini bellekte tutan değişkenler) oluşturmamız gerekiyor. Referansın tipine “car”, adına da my_car ismini verelim. Main adında yeni bir class oluşturup arabanın özelliklerini oraya yazarsak;

durumunu elde ederiz.

Bir ögeyi tanımlarken bize, o ögeye kimin erişebileceğini seçme olanağı tanınır. Bu tür belirteçlere erişim belirteçleri adı verilir. Dikkat ettiniz mi tanımlamaları yaparken hep “public” kavramını kullandık. Peki neden bunu kullanıyoruz ya da bunun yerine kullanabileceğimiz herhangi bir şey var mı? Var, örneğin private. Public belirtecinde tanımladığımız bir ögeye tüm sınıflar erişebilir, adından da anlaşılacağı üzere herkese açık olur. Private alanlara ise sadece kendi class’ımız erişir yani başka hiçbir sınıf erişemez. Ne koşulda olursa olsun private ögelere dolaylı yoldan erişemez miyiz? Erişmemiz için yapmamız gereken şeyler vardır. Birkaç kod ekleyerek erişme imkanına sahip olabiliriz. Önce private ile tanımlamalarımızı yapalım.

public class car {
private String color;
private String model;

  private int wheel;    
  private int price;    

}

Şimdi bu kodlara yeni kodlar eklememiz gerekiyor. 

 
public class car {
private String color;
private String model;

  private int wheel;    
  private int price;    

  public void setColor(String color){
this.color = color ;
  }
  public String getColor(){
return this.color;
  }
}

 public void setColor(String color) kısmında public kullanmamızın nedeni main metodu tarafından ulaşılmasını sağlamaktır. Bu ifade buraya bir color gönderileceğini anlatır. Yer alan color’a, gelen color atanır. this.color = color ; metodu ise mevcut olan color değişkenine gönderilen color değerinin atandığını belirtir. Yani bulunduğumuz class içerisinde yer alan color değişkenine değer atamış oluruz. Dışarıdan değer alınır. public String getColor() metodu ise color değişkeninin değerini dışarı vermemeyi sağlar ve mevcut color değerini bize döndürür.  Yani biz dışarıdan yeni değer almış oluyoruz ama dışarıya herhangi bir değer vermiyoruz. Yapmak istediğimiz şeyi görebilmek için class main kısmını açalım.

Yukarıda yapmış olduğumuz işlemler getter-setter olarak adlandırılıyorlar. Bu konuya bir sonraki yazıda değineceğim. Tekrar görüşmek dileğiyle. 

Yorum bırakın