Sınıf Yapıları – I

Java öğrenmeye karar verdiyseniz karşınıza mutlaka sınıf, class, nesne gibi kavramlar çıkacaktır. Bu yazıda tam olarak bu kavramları ele alacağız.

Java nesneye yönelik bir programlama (OOP) dilidir. Bunu gerçek hayata bakarak yorumlayabiliriz. Gerçek hayatta motorlu taşıt kavramını düşünürsek;

  • Bu taşıtın bazı özellikleri (attribute) vardır. Bunlar ağırlık, yapabileceği en yüksek hız, renk gibi özellikler olabilir
  • Bu taşıtın ileri gitme, durma gibi bazı fonksiyonları (method) vardır
  • “Motorlu taşıt” çerçeve kavramdır (interface) ve buna uygun araçlar vardır. Otomobil, gemi, traktör gibi araçlar birer motorlu taşıttır
  • Volvo markası tüm araçlarına standart olarak bazı donanımları ekleyebilir. (Inheritance)
  • BMW 320 ve Massey Ferguson 240 birer motorlu taşıt olup birisi otomobil çerçevesinde(class-sınıf) diğeri ise traktör çerçevesinde özellikler taşıdığından hem benzerlerdir hem de ayrışırlar
  • Bazı motorlu taşıt markalarının parçalarını sadece yetkili servisler söküp takabilir (Encapsulation)
  • Bazı araçlar sadece insan taşımaya uygunken, bazı araçlar yükün ne olduğuna bakmaksızın (abstraction) istenileni taşır.

Yukarıda saydığım özellikleri javanın programlama pratiklerinde de görürüz. Özellikle parantez içerisinde verdiğim anahtar kelimeler size internette arama yapabilmek için yol gösterici olacaktır.

Bir Sınıfı Tanımlamak

Pekala, bir sınıf/class nasıl tanımlanır? Kod tekrarına düşmemek adına burada tekrar merhaba dünya örneğini kullanmayacağım. Bunun yerine gelin yukarıdaki motorlu taşıt örneğinden faydalanalım.

Bildiğiniz gibi bir sınıf tanımlamak için bir sınıf bloğu yaratmamız gerekiyor. Bloklar süslü parantezle başlayan ve biten yapılardır. Yani { ve } işaretlerinin arasında kalan bir yapı kuracağız.

Yine önceki yazılardan hatırlayacağınız üzere bir sınıfı tanımlarken ona bir isim vermemiz gerekiyor. Javada kültür olarak sınıf isimleri büyük harfle başlar ve isimlendirme için PascalCase yöntemi izlenir. Ben bu sınıfa KaraAraclari diyeceğim. Türkçe karakter kullanmamaya özen göstermeniz ve hatta isimlendirmeleri ingilizce yapmanız genel programlama kültürüne uygun olacaktır.

Bu sınıfı, sonraki yazılarda değineceğimiz public erişim düzenleyicisiyle yaratacağım. Bu herkes tarafından erişilebilir anlamına geliyor. Buraya çok takılmadan devam edebiliriz.

Son olarak KaraAraclari ismindeki sınıfımızın, nasıl sınıf olarak belirtileceğine değinelim. Yine sözdizim ile ilgili yazıda bahsettiğimiz gibi sınıflar class sözcüğü ile nitelendirilir. Şimdi elimizdeki bilgilerle KaraAraclari sınıfımızı yaratalım.

Öncelikle merhaba dünya yazısında anlattığım gibi yeni bir proje yaratalım. Projemizin ismini 01 – ClassExamples olarak belirleyelim. Proje isimlendirmesini bu şekilde yapmamın bir sebebi var. Editörü açtığınızda projelerinizin belirli bir sırada görünmesi öğrenme ve hatırlama açısından size yardımcı olacaktır.

Projemizi oluşturduktan sonra, proje içerisindeki src klasörüne sağ tıklıyoruz ve yeni bir sınıf oluşturuyoruz. Bunun da örneğini merhaba dünya projesinde yapmıştık. Yeni sınıfımıza
KaraAraclari ismini veriyoruz. Merhaba dünya sınıfından farklı olarak main methodu oluşturmayacağız. Dolayısıyla bu seçeneği seçmemeniz gerekiyor.

Bu noktada finish butonuna tıkladığınızda yeni sınıfı yaratmış olacaksınız. Karşınızda şöyle bir sınıf görmeniz gerekiyor.

public class KaraAraclari {

}

Şimdi yazının girişinde değindiğimiz maddeleri bu sınıfın içeriğine ekleyelim. Temel olarak sınıfları 2 ayrı parçadan oluşuyormuş gibi düşünebiliriz.

  • Özellikler (field, attribute)
  • Fonksiyonlar (method)

Öncelikle kara araçlarını düşünürsek bir çok araç aklımıza gelecektir. Bisiklet, buldozer, otomobil, traktör gibi örnekler bu tanıma uymakta. Bunları bir arada düşünürsek; hem özellik olarak, hem de fonksiyon olarak benzerlikler bulabiliriz. Bu araçların tamamında “hareket etme”, “yön verme”, “hareketi durdurma” gibi fonksiyonlar bulunur. Bunun dışında fonksiyon olarak sayamayacağımız, ancak özellik olarak niteleyebileceğimiz, ortak noktalar da bulunur. Bisiklet, buldozer ve traktör için tek kişilik oturma yeri bulunurken otomobil için 4 kişilik yer bulunur. Aralarında fark varmış gibi gözükse de, “oturma yeri” kavramı hepsinde ortaktır. O halde bu detayları, kodladığımız sınıfımıza ekleyelim.

public class KaraAraclari {

	public int koltukSayisi;

	public void hareketEt() {
		System.out.println("Hareket başladı");
	}

	public void dur() {
		System.out.println("Hareket bitirildi");
	}

	public void yonVer() {
		System.out.println("Yön verildi");
	}
}

Yukarıda paylaştığım sınıf 1 adet field ve 3 adet method ile oluşturulmuş bir sınıftır. Bunların detayına biraz değinirsek;

  • Tüm tanımlamalar public anahtar sözcüğü ile başlamaktadır. Bu da uygulamanın her yerinden bu sınıfa ve içeriğine ulaşılabileceği anlamına gelmektedir.
  • Methodlarımız public sözcüğünden sonra void ile devam etmektedir. Bu da geriye herhangi bir değer dönmedikleri anlamına gelir. Method bloklarının içlerine bakarsanız “return” ifadesini görmemekteyiz.
  • koltukSayisi isimli field, isminden de anlaşılacağı üzere sayısal bir değer taşımaktadır. buna uygun olarak “int” anahtar sözcüğü ile nitelendirilmiştir.

Bir Sınıfa Ait Bir Nesne Yaratmak

Bildiğiniz gibi java OOP (Object Oriented Programming) yapısı ile çalışacak şekilde tasarlanmış bir dildir. Bunu gerçek hayata benzetmek oldukça kolay. “Kara araçları” kavramını düşündüğümüzde günlük hayatta karşımıza bir çok örnek çıkar. İşte o aklınıza gelen her türlü araç, yazılım perspektifinden bir “nesne” olarak kabul edilir. Günlük hayatımızda karşımıza çıkan bu araçları javada siz yaratırsınız. Bu işi yapmanıza yarayan fonksiyonlara constructor ismi verilir.

Peki constructor nasıl kullanılır? Gelin bunu bir örnek ile inceleyelim. Az önce yarattığımız KaraAraclari sınıfına müdahale etmeden, farklı bir sınıf daha yaratalım. Bu sınıf test amaçları için yaratılmış olsun. src klasörüne sağ tıklayın ve yeni bir sınıf oluşturun. Sınıfımızın ismi TestClass olsun ve içeriğinde bir main barındırsın.

Şimdi bu sınıf içerisinde, KaraAraclari sınıfına ait bir nesne yaratalım. Bunun için “new” anahtar sözcüğünü, main methodu içerisinde kullanacağız.

public class TestClass {

	public static void main(String[] args) {
		
		KaraAraclari otomobil = new KaraAraclari();

	}
}

Buradaki main methodunun içerisinde gördüğünüz satırı yorumlayalım.

  • Javada bir nesne tanımı yapılırken öncelikle “tipi” belirtilir. Burada tanımlayacağımız nesnemizin tipi “KaraAraclari” olacağından ilk sözcük bu olmuştur.
  • Nesne tanımlarında tipten sonra, programın geri kalanında o nesnenin isminin ne olacağını belirtiriz. Buradaki “otomobil” sözcüğü bu nesnenin ismidir. İsimlendirme kuralları için değişkenler yazımıza göz atabilirsiniz.
  • Değişken isminden sonra eşittir, yani atama operatörü, yer alır. Bu operatör kendisinden sağda kalan değeri, kendisinin solundaki değere atar. Buraya kadar olan kısmı konuşma diliyle anlatırsak; “İsmi otomobil olan bir kara aracı yaratmak istiyorum ve değeri şudur: “
  • new anahtar sözcüğü constructor çağrısı yapacağımızın bir göstergesidir. Javada constructor çağrısı olmadan da yeni bir nesne yaratmak mümkündür. Bunu ilerleyen konularda ele alacağız. Ancak bizim buradaki amacımız constructor konusuna değinmek olduğundan bu detaya girmeyeceğiz.
  • new anahtar sözcüğünü tekrar KaraAraclari sözcüğünün takip ettiğini görüyoruz. Yine konuşma diline yakın bir ifadeyle düşünürsek, eşitliğin sağ tarafını “Yeni bir kara aracı yaratmak istiyorum” diye niteleyebiliriz.

Tüm bu noktaları birleştirdiğimizde karşımıza çıkan sonuç, ismi otomobil olan yeni bir değişken yaratmış olmamızdır ki bu değişkenin tipini de KaraAraclari olarak belirtmiş bulunuyoruz. İşte bu değişken, diğer isimleri ile nesne, object veya instance olarak da nitelenir.

Bu yazıyı burada noktalıyoruz. Sonraki yazımız yine sınıflar üzerine olacak.

1 Comment

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir