5.HAFTA Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi Sınıf Kavramı: Sınıf (class) soyut bir veri tipidir. Nesne (object) onun somutlaşan bir cismidir. Java da sınıf (class) kavramını doğada cins isimlere benzetebiliriz. Bir cins kendi başına belirli bir nesne değildir; ancak belirli türden nesnelerin ortak özelliklerini belirten soyut bir kavramdır. Örneğin, kitap bir cins isimdir. Kitap diyerek genel bir sınıfı anlatıyoruz Ama Ali nin elindeki kırmızı kitap dediğimiz de bu belirli bir nesnedir. Java da sınıfları doğadaki cinsler gibi düşürsek, konuyu kavramamız kolaylaşacaktır. Java sınıfı, tıpkı bir cinste olduğu gibi, ortak özelikleri belirlenmiş bir topluluğun adıdır. Bir java sınıfının niteliklerini değişkenlerle (attributes, fields), davranışlarını metotlarla (fonksiyon, procedure) belirleriz. Java programları sınıf (class) lardan oluşur. Bütün sınıflar aynı yapıya sahiptirler. Aralarındaki farkı yaratan şey, içerdikleri değişkenler ve metotlardır. Bazıları hiç değişken ve/veya metot içermez, bazıları az, bazıları çok değişken ve metot içerebilir. Java dilinde bir sınıfın genel tanımı şu şekildedir. Class Sınıf_İsmi // Sınıfa ait değişkenler listesi değişken_türü değişken_ismi;... // sınıfa ait method listesi değişken_türü method_adı(method_girdi_değişkenler_listesi) //methoda ait değişken tanımlamaları değişken_türü değişken_ismi;... return çıkış_değişkeni; Sınıf tanımlamasında metotların bulunması şart değildir. Örnek Sınıf Bildirimi: Java dilinde sınıf tanımı çok kolaydır. Örneğin, deyimi bir sınıf bildirir. Burada class anahtar sözcüktür. İnsan sınıfın adıdır. İstediğiniz adı verebilirsiniz. Yukardaki insan sınıfı boş olarak tanımlanmıştır. Bu sınıfı kullanılabilir hale getirebilmek için çeşitli değişkenler veya methodlar tanımlanabilir.örneğin, bir İnsan ın boyu, kilosu, yaşı, cinsiyeti, uyruğu, sac_rengi, ayakkabı_numarası vb. bilgilerden istediklerimizi sınıfın gövdesine koyabiliriz.
Nesne Kavramı: Bir sınıfın özelleştirilmesi ve onu yeni bir isimle yaratılması ile oluşan yapıya nesne denir. Java dilinde bir sınıf bir tasarımdır. Onu somut olarak göremez, kullanamayız. Onun için sınıftan somut nesne(ler) kurmalıyız. Yani tanımladığımız sınıf sadece bir yapıdır bu yapıyı kullanabilmek için nesneler tanımlamak gerekir. Benzer olarak, bir sınıftan istediğimiz kadar nesne kurabiliriz. O nesnelerin bazı özelikleri ortaktır, ama daima birini ötekinden ayıran öznitelikleri vardır. Yeni bir nesne oluşturmak için New komutu kullanılır. İnsan sınıfından yeni bir nesne oluşturmak için; Insan insan1= new Insan(); Örnek: class Kitap string ad; int sayfa_sayisi; kitap ktp1= new kitap(); // kitap1 adında kitap sınıfına ait bir // nesne türetildi. kitap1.ad= Nesneye Yönelik Programlama ; kitap1.sayfa_sayisi=540; Metot Oluşturma: Sınıf ve nesne kavramı anladıktan sonra bu yapıları etkin bir şekilde kullanabilmek için metotlar oluşturulur. Metotlar (procedureler, fonksiyonlar ) oluşturduğumuz sınıfa her hangi bir işlem yaptırabilmek için kullanılır. Daha önce tanımladığımız insan sınıfını kullanalım. double boy; string cinsiyet; İnsan sınıfımız değişkenleri görüldüğü gibi belirlenmiştir. Bu sınıftan türeteceğimiz her nesne bu niteliklere de sahip olacaktır. Şimdi metodu oluşturalım. Burada yaş, kilo, boy ve cinsiyet değerleri alınarak ideal kilo hesaplaması yapılacaktır. Bu metot için kullanılacak değişkenler yukarda belirlenmiştir. Şimdi metodumuzu oluşturalım. String cinsiyet; public double id_kilo(int y,int k,int b, String c) double ideal_kilo=0.0;
if(c=="bayan") ideal_kilo=(b-100+y/10)*0.8; if(c=="bay") ideal_kilo=(b-100+y/10)*0.9; if(k< ideal_kilo) System.out.println("Zayıfsınız.Kilo almalısınız"); if(k>ideal_kilo) System.out.println("İdeal kilonuzun üzerindesiniz.zayıflayın."); return ideal_kilo; Yukarda id_kilo adında bir metot oluşturulmuştur. id_kilo metodunun başındaki double ifadesi metodun geri döndüreceği değerin tipini belirtir. Hem sınıfımız hem metodumuz hazır. Artık sınıfımızdan nesne türetebilir ve metodu kullanabiliriz. double ideal; Insan insan1=new Insan(); insan1.yas=23; insan1.kilo=65; insan1.boy=174; insan1.cinsiyet="bay"; ideal=insan1.id_kilo(insan1.yas, insan1.kilo, insan1.boy, insan1.cinsiyet); System.out.println("İdeal Kilonuz:"+ideal); Ekran Çıktısı: Zayıfsınız.Kilo almalısınız İdeal Kilonuz:68.4 Bu şekilde kullanarak bilgilerini girdiğimiz kişinin ideal kilosunu hesaplayabiliriz. Değişkenlerini kendi belirlediğimiz insan sınıfını yazdık. Bu insan sınıfa ait bir nesne türettik. Daha sonra ise değişkenlere ideal kilosunu hesaplamak istediğimiz kişinin bilgilerini vererek oluşturduğumuz yeni nesnenin sınıfına ait metodu kullanarak hesaplamamızı yaptık. Kurucu Metotlar: Kurucu metotlar nomal metotlardan farklı olarak nesne oluşturulduğunda onun hangi başlangıç değeri ile yükleneceğini tayin eder. Kurucu metotlar için; Kurucu metotların ve bulunduğu sınıfın adı aynıdır. Kurucu metotların geri dönüş tipi bulunmaz. Sınıfa ait özel bir kurucu metot tanımlanmamışsa programcı başlangıç değerlerini kendisi atayabilir ya da atamak için başka metotların çağrılmasını bekleyebilir.
Yukardaki örneğimizde bunu biz kendimiz atayarak yapmıştık şimdi aynı örneğe bir kurucu metot yazalım ve verilerin atama işlemini kurucu metot yapsın. String cinsiyet; Insan(int y,int k, int b, String c) //Kurucu Metot yas=y; kilo=k; boy=b; cinsiyet =c; public double id_kilo()// değişkenlere kurucu metot ile değer // atandığı için parametre almasına gerek yok double ideal_kilo=0.0; if(cinsiyet=="bayan") ideal_kilo=(boy-100+yas/10)*0.8; if(cinsiyet=="bay") ideal_kilo=(boy-100+yas/10)*0.9; if(kilo< ideal_kilo) System.out.println("Zayıfsınız.Kilo almalısınız"); if(kilo>ideal_kilo) System.out.println("İdeal kilonuzun üzerindesiniz.zayıflayın."); return ideal_kilo; Bu şekilde kurucu metodumuzu yazdık şimdi yeni bir nesne türetelim. Artık Insan sınıfımızda bir nesne türettiğimiz de kurucu metot ile direk değişkenlere değerleri atamış oluruz. Yazacağımız metotlar için de bu değişkenleri isimleri ile kullanarak işlem yapabiliriz. Insan insan1 = new Insan(23,65,174, Bay ); insan1.id_kilo(); Görüldüğü gibi değişkenleri tek tek tanımlamak yerine kurucu metot kullanarak bu işlemi daha kolay bir şekilde tamamladık. Böyle id_kilo metodunun da değişken almasına gerek kalmadı ve direk nesne üzerinden çağrılarak ideal kilo hesaplaması yapıldı.
this deyimi: this anahtar sözcüğü, içinde bulunulan nesneye ait bir referans döndürür; bunun sayesinde nesnelere ait global alanlara erişme fırsatı bulunur Bazen bir metodun içinde o metodun ait olduğu sınıftan yaratılacak nesneyi veya o nesnenin bir alt değişkenini tanımlamak gerekir. Nesne daha tanımlanmadığından direk olarak nesne ismini kullanamayız. Bunun yerine this deyimi kullanılır. Class Insan string cinsiyet; Insan(int yas,int kilo, int boy, string cinsiyet) this.yas=yas; this.kilo=kilo; this.boy=boy; this.cinsiyet =cinsiyet; Uygulamalar 1. Okul isminde yeni bir sınıf oluşturun. Bu sınıf String ve 2 integer tipinde üç üye değişkene sahip olsun. Bu değişkenleri okul_ismi, toplam_ogrenci ve derslik_sayısı olarak belirleyin. Oluşturduğunuz sınıfınıza bir dersliğe kaç öğrenci düştüğünü hesaplayan metodu yazın. Bu sınıfa ait yeni bir nesne türetin. Sınıfa ait metodu kullanarak okul ismi ve derslik başına düşen öğrenci sayısını ekrana yazdıran java kodunu yazın. 2. Kurucu metodu olacak şekilde bir dikdörtgenler sınıfı oluşturun. Daha sonra bu sınıftan türettiğiniz nesne ile bu dikdörtgenin çevresi ve alanını hesaplayan java kodunu yazınız. 3.Üye değişkenleri bir integer dizi ve integer sayi olan bir sınıfa verilen diziyi ve verilen sayıyı parametre olarak alan bir metot oluşturun. Bu metot verilen dizideki sayıları küçükten büyüğe sıralayarak, verilen sayi daki dizinin elemanını geri döndürsün. Yani ; Dizi[5]=9,22,5,1,17 ve sayi=3 ----> dizi[5]=1,5,9,17,22 dizi[3]=17 4. Bir sınıf içinde birden fazla kurucu metot olabilir mi araştırınız. 5.Ekran çıktısına bakın ve çıktının neden böyle olduğunu açıklayın. Insan sınıfı içindeki Degistir metodunun aldığı parametrenin tipine dikkat edin. String ad; void Degistir(Insan h) h.ad = Hsyn ; Insan yeni = new Insan(); yeni.ad = Hüseyin ; System.out.println("1: yeni.ad: " + yeni.ad); yeni.degistir(yeni); System.out.println("2: yeni.ad: " + yeni.ad);