10 OCAK 2018
CUMA
20.58
Java - Sınıf (Class) ve Nesne (Object)

Sınıf ve Nesne Nedir?

Sınıf ve nesne kavramlarını günlük yaşamımıza uyarlarsak daha anlaşılabilir hale getirebiliriz diye düşünüyorum. Bu nedenle bu tarz bir örnek üzerinden ilerleyeceğim.

Sınıf aslında doğada yer alan bir cins olarak tanımlanabilir. Birçok farklı cins vardır fakat her cins bir nesne olarak tanımlanmaz. Örneğin ağaçları düşünelim. Ağaç bir cinstir, çünkü bir çok farklı ağaç çeşidi vardır. Bir elma ağacı veya erik ağacını ele alırsak bu ikisi ortak bir noktada buluşmak istese bu nokta ağaç olacaktır. Yani cinsler birtakım özellikleri bakımından alt cinslere ayrılabiliyorlar. Bunu biraz açmak gerekirse;

Ağaçlar kendi içlerinde meyveli ağaçlar ve meyvesiz ağaçlar olarak ayrılabilirler.

Meyveli ağaçlara örnek olarak : Erik Ağacı, Kayısı Ağacı ve Dut Ağacı

Meyvesiz ağaçlara örnek olarak : Çam Ağacı, Kavak Ağacı ve Meşe Ağacı
→ Meyvesiz ağaçlar iki alt başlıkta incelenebilir;
→ İbreli Ağaçlar : Çam Ağacı
→ Yapraklı Ağaçlar : Kavak Ağacı ve Meşe Ağacı

Bu verileri ele alarak şöyle bir çıkarımda bulunabiliriz;

  • Çam Ağacı : Bir ağaçtır. Meyvesiz ve ibreli ağaçlar cinsindendir.
  • Kavak Ağacı : Bir ağaçtır. Meyvesiz ve yapraklı ağaçlar cinsindendir.
  • Meşe Ağacı : Bir ağaçtır. Meyvesiz ve yapraklı ağaçlar cinsindendir.
  • Erik Ağacı : Bir ağaçtır. Meyveli ağaçlar cinsindendir.
  • Kayısı Ağacı : Bir ağaçtır. Meyveli ağaçlar cinsindendir.
  • Dut Ağacı : Bir ağaçtır. Meyveli ağaçlar cinsindendir.

Görüyoruz ki her bir cins birbirinden farklı alt cinslere de ayrılabilir. Ama burada dikkat etmek gerekiyor ki her bir alt sınıf kendisinden önce gelen üst sınıfların tüm özellikleri taşırlar.

Bu örneğimizi Java’ya uyarlamamız gerekirse aslında örneğimizdeki her bir cins java da bir sınıfa denk gelmektedir. Her sınıf aslında ortak özelliklere sahip nesnelerin bir araya gelmesiyle oluşur. Java sınıflarının nitelikleri değişkenlerle, davranışları ise metotlarla belirlenir. Oluşturulan sınıfın içerisindeki metotlarda o sınıfa ait değişkenleri kullanabildiğimiz gibi farklı sınıflara bağlanarak onların değişken ve metotlarını da kullanabiliriz.

Sınıf kavramı kullanım açısından tamamen programlayıcıya bağlıdır. Gerek görülürse hiyerarşik bir yapıda iç içe sınıflar oluşturulabilir ve en alttaki sınıftan en üstteki sınıfa erişim sağlanabilir.

NOT: (metot: fonksiyon olarakta aklımızda yer edinebilir.)

Bir Sınıf Nasıl Oluşturulur?

Sınıf oluştururken aşağıdaki yapı kullanılır;

[ERİŞİM_BELİRTEÇİ->public,protected,private] class ClassAdi {
     Class İçeriği
}

Kod yapımızın başlangıcında sınıfımızın erişim durumunu belirtiyoruz. Ardından sınıfımıza bir ad veriyor ve süslü parantezler {} içerisinde sınıfımızı yazıyoruz.

Bir Nesne Nasıl Oluşturulur?

Nesne oluştururken;

SinifAdi NesneAdi = new SinifAdi();

şeklinde belirtebiliriz.

Örneğin;

Kisi.java

public class Kisi {
	int dogumTarihi;
	
	public int yas () {
		return 2018-dogumTarihi;
	}
}

Uygulama.java

public class Uygulama {
	
	public static void main(String[] args) {
		
		Kisi mert = new Kisi();
		mert.dogumTarihi = 1997;
		
		System.out.println("Mert şuanda "+mert.yas()+" yasinda!");

	}

}

Yukarıdaki kod yapımızı incelersek;

Kisi adında bir sınıf oluşturduk. Bu sınıfımız içerisinde bir int dogumTarihi belirledik. Ardından yazdığımız yas methodunda 2018'den dogumTarihi'ni çıkarttık ve return ile geri döndürdük.

İkinci sayfamızda ise (uygulama adında sayfamızda) main methodu içerisinde yeni bir "mert" adında kişi oluşturduk. Bir sonraki satırımızda mert.dogumTarihi ile doğum tarihi değişkenine 1997 değerini gönderdik.

Artık mert.yas() yardımı ile Kisi sınıfımızda tanımladığımız mert nesnesi ile bu nesneye ait yas değerine ulaşabilir olduk.

Metotlar

Metot kavramını aslında bir önceki örneğimizde görmüş olduk. Yaş değerini hesaplaması için oluşturduğumuz fonksiyon aslında bir metot. Bu tarz birbirinden farklı metotlar oluşturularak sınıflar zenginleştiriliyor ve işlemlerin yapılmasında büyük kolaylıklar sağlıyorlar.

Constructors

Constructor, bir sınıf için olmazsa olmazlardan biridir. Oluşturulacak bir sınıf, ilk çağırıldığında bir takım verilere sahip olabilir. Kendi belirlediğimiz bu başlangıç değerlerini oluşturmamızı sağlayanlar ise Constructor olarak bilinen metot benzeri bir yapıdır. Bu yapı oluşturulurken mutlaka metot ismi ile kullanılırlar. Örneğin elimizde Mert.java adında bir dosya olsun. Bu dosyada yer alan sınıfın da adı mutlaka Mert olmak zorundaydı. İşte o sınıfa ait bir constructor mutlaka Mert ile başlamalıdır. Şöyle ki:

public class Mert {
	...
	Mert(){
		...
	}
}

Örneğini verdiğimiz bu constructor, aslında herhangi bir veri gelmez ise girişte yer alan değişkenlerimizin neler olacağını söyleyeceğimiz yerdir. Bunu en iyi Point Objeleri örneğimizde göreceğiz. 3 farklı Constructor aldıkları verilere göre belirlenmiş durumdalar.

Point Objeleri

Point adından da anlaşıldığı üzere bir noktayı, x ve y değerleri, tutan bir obje olarak bilinebilir. Java programlama dilini öğrenirken en çok kullanılan örneklerden biridir. Bu örneğimizde bir x,y değişkenlerine sahip Point sınıfımız ve bu sınıfa yeni bir x,y koordinat bilgisi eklemeyi, bu bilgileri çağırmayı inceleyeceğiz.

Point.java

public class Point {
	int x;
	int y;
	
	Point(){
		x = 0;
		y = 0;
	}
	
	Point(int a) {
		x = a;
		y = a;
	}
	
	Point(int a, int b) {
		x = a;
		y = b;
	}
	
	String konum() {
		return "{x= "+x+", y="+y+"}";
	}
}

Genel.java

public class Genel {
	public static void main(String[] args) {

		Point a = new Point(3);
		Point b = new Point(2,3);

		System.out.println("a noktası: "+a.konum());
		System.out.println("b noktası: "+b.konum());
	}
}

Örneğimize göz atmak gerekirse:

Point Sınıfı:

  • Eğer Point nesnesi oluşturulurken herhangi bir parametre almaz ise x ve y koordinatları 0 olacak.
  • Eğer Point nesnesi oluşturulurken tek bir parametre alırsa x ve y koordinatları gelen parametreye eşit olacak.
  • Eğer Point nesnesi oluşturulurken iki parametre de alınırsa x ve y koordinatları doğru bir şekilde eşleştirilecek.
  • konum() metodu çağırıldığında {x= A, y= B} şeklinde bir değer döndürülecek.

Genel:

a ve b adında iki adet Point oluşturduk ve ilk Point nesnemiz olan a için yalnızca 3 parametresini gönderdik. Dolayısıyla: x=3 ve y=3 olması beklenir. İkinci Point nesnemiz olan b içinse 2 ve 3 parametrelerini gönderdik ve dolayısıyla: x=2 ve y=3 olması bekleniyor:

a noktası: {x= 3, y=3}
b noktası: {x= 2, y=3}

this anahtar sözcüğü

Aslında metotlardan sonra gelecek bir başlıktı fakat Point sınıfında tüm özellikleri anlamamıza epey yardımcı olduğundan akabine ekliyorum. Yukarıdaki Point sınıfımızda yer alan constructorları incelersek aldıkları parametre isimlerini x ve y'den farklı yapmıştık. Aslında buna gerek yok. Yani şöyle bir kullanımda hazırlayabiliriz:

Point(int x, int y) {
	x = x; // ???
	y = x; // ???
}

Peki yukarıda da gördüğümüz gibi bir kullanım doğru olur mu? Elbette olmaz! Bunu engellemek için yapılması gereken this anahtar sözcüğünün kullanılmasıdır. Temel amacı sınıfın asıl değişkenine ulaşmaktır. Yani şöyle bir kullanım doğru olacaktır:

Point(int x, int y) {
	this.x = x;
	this.y = y;
}

Constructor içinde Constructor

Başlık her ne kadar garip olsa da mantığı oldukça basit :D Yine Point sınıfımız üzerinden anlatayım. Tekrar göz gezdirirsek eğer Point nesnesi oluşturulurken bir parametre almazsa diye oluşturduğumuz constructor için yeniden x ve y değerlerini atamamıza gerek yoktu. Şöyle bir kullanımda hazırlayabilirdik:

public class Point {
	int x;
	int y;
	
	// Önemli Alan
	Point(){
		this(0,0);
	}
	
	Point(int a) {
		x = a;
		y = a;
	}
	
	Point(int a, int b) {
		x = a;
		y = b;
	}
	
	String konum() {
		return "{x= "+x+", y="+y+"}";
	}
}

Yani this ibaresi ile farklı bir constructor çağırabiliyoruz. Burada yaptığımız 3. Point constructorını çağırarak 0 ve 0 değerlerini atamaktı.

YORUMLAR 0
Bu konuya henüz kimse yorum yapmadı.
İlk yorumu sen yapmak ister misin?
YORUM BIRAK
Şuanda bu yoruma cevap yazıyorsunuz:
İptal Et