Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Bölüm 4 Sınıflar ve Metotlar

Benzer bir sunumlar


... konulu sunumlar: "Bölüm 4 Sınıflar ve Metotlar"— Sunum transkripti:

1 Bölüm 4 Sınıflar ve Metotlar
Bil 102 Bölüm 4 Sınıflar ve Metotlar Bil 102

2 Sınıf ve Metot Tanımları
Nesnesel diller yazılım projelerini daha kolay yönetilir, programları daha kolay okunur yapmak, gelişime ve değiştirilmeye daha uygun olmalarını sağlamak üzere geliştirilmiştir. Programlar nesnelerin tanımı (sınıflar) ve nesnelerin işlenmeleri (metotlar) çerçevesinde oluşturulur. (1) Nesnelerin ortak özellikleri sınıf yapıları kullanılarak tanımlanır (class). (2) Bu yapılar içinde nesne özellikleri (alanlar) ve nesneleri işleyen metotlar tanımlanır. (3) Tanımlı sınıflar kullanılarak nesneler oluşturulur ve bu nesnelerle problemler çözülür. Bil 102

3 Sınıflar ve Metotlar Nesneler (object) -- etrafımızda bulunan herşey
Sınıf (class) -- aynı cins nesnelerin genel tanımı Kitap sınıfı fizik kitabı, java kitabi, matematik kitabi (her biri ayrı birer nesne) Aynı sınıfa ait nesneler ortak özelliklere sahiptir fakat bu özellikler herbir nesne için farklılık gösterebilir Bil 102

4 Örnek Her kitabın Adı Yazarları Yayıncısı Sayfa sayısı ... Bil 102

5 Örnek Java kitabı: Özellikler: ad: Java ile Programlama
Yazarlar: Ali Yazıcı, ... Yayıncı: Palme Sayfa: 270 Matematik kitabı: ad: Calculus Yazar: Thomas Yayıncı: Pearson Sayfa: ... Bil 102

6 Örnek Personel Sınıfı Sınıf adı: Personel
Özellikleri (veriler): özellikler nesne bilgilerini tutmak isim için kullanılır sicilNo vergiNo ePosta Metotlar: metotlar bilgileri işlemek için kullanılır + maasHesabı(); +ePostaYollama(); Bil 102

7 Örnek Nesne adı: bilgisayarMuhBlmBaskani Özellikler:
isim: Erdogan Dogdu sicilNo: Axxx vergiNo: 900xxxxx ePosta: Bil 102

8 Personel Sınıfının Java’da Tanımlanması
public class Personel { // ozellikler (veriler) public String isim; public String sicilNo; public String vergiNo; public String ePosta; // metotlar public void maasHesabi() { //metot islemleri… } public void ePostaYollama() //metot islemleri Bil 102

9 Sınıf kullanımı Personel sınıfını kullanabilmek için PersonelDene programı Bu programın çalışması için içinde bir main() metodu olması gerekir Çalıştırılabilir programlar da sınıf olarak tanımlanır Bir programın çalıştırılabilmesi için static main () metodu olması gerekir Bil 102

10 Sınıf Kullanımı public class PersonelDene { public static void main(String [] args) Personel bilgisayarMuhBlmBaskani; //nesneyi olustur bilgisayarMuhBlmBaskani = new Personel(); bilgisayarMuhBlmBaskani.maasHesabi(); bilgisayarMuhBlmBaskani.ePostaYollama(); } Bil 102

11 Genel Sınıf Tanımı public class YeniSinif { -- (somutlasan ornek degiskenleri bildirimleri) public void VeriYazdir() --- System.out.println(“Mesaj”); //metot } public void VeriIsle() --- //metot Bil 102

12 UML Sınıfları gösterirken UML (Unified Modeling Language) gösterimi kullanılabilir Üstte “sınıf adı”, ortada “alan adları ve türleri”, altta “metot ve parametreleri” belirtilir Personel -isim : String //private String isim; +sicilNo: String //public String sicilNo; +vergiNo: String +ePosta: String +maasHesabi(): void +ePostaYollama(): void Bil 102

13 UML Utils ------------------------------------ +a:int -b:int
+toplamlariBul(int):int +toplamlariBulV2(int,int):int -carp(int,int):int Bil 102

14 Java kodu  derleme  Java bayt kodu (class dosyasi)
Eğer aynı klasörün içinde bir başka Java programı bu sınıfı kullanıyorsa, yaratılmış olan bu class dosyası tekrar derlenmeden doğrudan kullanılabilir Yeni bir sınıf tanımlandığında, bu sınıfın kullanımı için bu sınıftan bir nesne oluşturulması ve nesne üzerinden metotların çağrılması gerekir Bil 102

15 public class YeniSinif { public void VeriYazdir() System. out
public class YeniSinif { public void VeriYazdir() System.out.println(“Sadece mesaji yazdiralim”); } public class DeneYeniSinif public static void main(String [] args) YeniSinif uye = new YeniSinif(); uye.veriYazdir(); System.out.println(“ ”); Çıktı: Sadece mesaji yazdiralim Bil 102

16 Değişkenler  Gerçekleştirme değişkenleri (instance variables)
Bir sınıfın içinde yer alan değişken ve metotlar  o sınıfın üyeleri (member) Değişkenler  Gerçekleştirme değişkenleri (instance variables) Nesne yaratılırken özel bir metot olan nesne kurucusu (constructor) kullanılır Nesne kurucusu çağrılırken new komutu uygulanır. Bir nesneye ait özelliklere ve metotlara nokta notasyonu kullanılarak erişilir. Bil 102

17 Metotların Çağrılması
Metotlar iki şekilde kullanılabilir Bir değer geri döndüren metotlar double numara; numara = Math.random(); Bir değer geri döndürmeyen (void) metotlar System.out.println(“Ekrandaki mesaj”); Bil 102

18 void Metotlar Void metotlar çağrıldığı yere değer döndürmezler
public void metot_adi() Metot başlığı { ---; Metot gövdesi } public : metot her isteyen tarafından kullanılabilir void : metot geriye bir değer döndürmüyor nesneAdı.metotAdı(); Metot eğer başka bir sınıfta tanımlı ise, o sınıftan bir nesne oluşturup sonra o nesne ile metodu çağırmak gerekir Eğet çağrılan metot, çağrıldığı sınıf içinde tanımlı bir metottan çağrılıyorsa nesne olmaksızın doğrudan çağrılabilir Bil 102

19 Değer döndüren metotlar
public dondurulen_deger_turu metot_adi() { ---; return deger_turunde_degisken; } İçinde bir veya daha fazla return komutu olmalı Void metodlarda da return komutu olabilir, fakat bir veriyle kullanılamaz ve yalnızca return; şeklinde yazılabilir. Metodun sona ermesi gereken durumlarda kullanılabilir. Bil 102

20 Örnek public class VeriDondur { public int veriYazdir() int say;
String mesaj="Sadece bu mesaji yazdiralim."; System.out.println(mesaj); say=mesaj.length(); return say; } public class deneveriDondur public static void main(String[] args) int sembolSayisi; veriDondur eleman=new veriDondur(); sembolSayisi=eleman.veriYazdir(); System.out.println("Sembol sayisi="+sembolSayisi); Bil 102

21 Parametreli (veri alan) Metotlar
Metot bir veri döndürebildiği gibi çağrıldığı yerden girdi de alabilir Metot adı devamında parantezler içine parametre türleri ve adları virgüllerle ayrılmış şekilde yazılır public dondurulen_deger_turu metot_adi (param_turu param_adi1, …) { ---; } Bil 102

22 public class veriYolla { public int veriYazdir(String mesaj) int say; System.out.println("Gelen mesaj:"+mesaj); say=mesaj.length(); return say; } import java.util.Scanner; public class deneVeriYolla public static void main(String[] args) veriYolla veri=new veriYolla(); String ileti; int sembolSayisi; Scanner klavye = new Scanner(System.in); ileti=klavye.next(); sembolSayisi=veri.veriYazdir(ileti); System.out.println("Sembol sayisi="+sembolSayisi); Bil 102

23 this Parametresi Bir metodun içinde gerçekleştirme değişkenleri veya o sınıfa ait başka bir metot kullanılmak isteniyorsa bu verilere veya metotlara this parametresi kullanılarak ulaşılabilir. Bil 102

24 public class veriYolla2 { public String mesaj; public int veriYazdir() int say; System.out.println("Gelen mesaj:"+this.mesaj); say=mesaj.length(); return say; } import java.util.Scanner; public class deneVeriYolla public static void main(String[] args) veriYolla2 veri=new veriYolla2(); String ileti; int sembolSayisi; Scanner klavye = new Scanner(System.in); ileti=klavye.next(); veri.mesaj = ileti; sembolSayisi=veri.veriYazdir(); System.out.println("Sembol sayisi="+sembolSayisi); Bil 102

25 Yerel Değişkenler Değişkenler sadece tanımlandıkları alanda geçerlidir
Bir metodun içinde tanımlanan bir değişkenin geçerliliği metot bittiğinde sona erer Başka bir metotta aynı isimde bir değişken kullanılsa bile bunlar birbirinden farklı değişkenlerdir Bir değişken bir metotta sadece bir kez tanımlanabilir For döngüsü girişinde tanımlanan bir değişkenin geçerliliği döngü bitince sona erer for(int n=1; n<10;n++) toplam = toplam + n*n; System.out.println(n); // Gecersiz, n tanimli degil Bil 102

26 Kârla beraber yeni miktar 110 TL
public class KarHesabi { public double miktar; public double kar; public void karliToplamGoster () double yeniMiktar = miktar + (kar/100.0)*miktar; System.out.println (“Kârla beraber yeni miktar “ + yeniMiktar + “ TL.”); } public class TicariHesab public static void main (String [] args) KarHesabi karObj = new KarHesabi (); karObj.miktar = ; karObj.kar = 10; karObj.karliToplamGoster (); Kârla beraber yeni miktar 110 TL Bil 102

27 Parametrelerin Metoda Girişi
Metot başlığında tanımlanan parametrelere biçimsel parametre (formal parameter) veya sadece parametre denir. Bir metot çağrıldığında programa ait bazı değişkenler veya değerler parametrelere karşılık olarak metoda gönderilirler. Bunlara da gerçek parametre veya argüman denir. Değer ile çağırma: Argümanların sadece değeri metoda gönderilir. public void dortParametreliMetot(int n1, int n2, double toplam, char harf) { ---; } birNesne.dortParametreliMetot(42, 100, 9.99, ‘Z’); Bil 102

28 Bilgi Saklanması ve Kuşatma
Parametre ve değişkenlerin sadece gerekli durumlarda kullanılması ve program ayrıntılarının mümkün olduğunca saklanmasına kuşatma veya saklama denir. Bil 102

29 public & private Bir sınıfın gerçekleştirme değişkenlerinin genel (public) olarak tanımlanması tercih edilmez  private public : herhangi bir program veya sınıf tarafından çağrılabilir, kullanılabilir private : sadece sınıfının içindeki metotlar tarafından kullanılabilir, başka bir sınıf veya metot tarafından kullanılamaz Bil 102

30 Örnek public class personel { public String isim; public String ePosta; public double maas; public double maasHesabi(double brutMaas) double netMaas; netMaas = 0.81*brutMaas; return netMaas; } public void kayitYazdir() System.out.println("Personel ismi:"+isim); System.out.println("Personel ePosta:"+ePosta); System.out.println("Personel maasi:"+maas); Bil 102

31 Import java.util.Scanner; public class DenePersonel { public static void main(String[] args) personel bil = new personel(); //nesne kurucusu double maas, netMaas; bil.isim="Ahmet Cakir"; System.out.print("Brut maasi giriniz:"); Scanner klavye=new Scanner(System.in); maas = klavye.nextDouble(); netMaas = bil.maasHesabi(maas); System.out.println("Brut Maas="+maas); System.out.println("Net Maas="+netMaas); bil.maas=netMaas; bil.kayitYazdir(); } Bil 102

32 Brut maasi giriniz: 4500 Brut maas=4500. 0 Net maas=3645
Brut maasi giriniz: 4500 Brut maas= Net maas= Personel ismi:Ahmet Cakir Personel Personel maasi: Bil 102

33 public class BankaHesabi { private double bakiye; //public degiskeni public double yeniBakiye(double cekilenMiktar) double kalan; kalan=bakiye-cekilenMiktar; if(kalan<0.0) System.out.println("Yetersiz bakiye..."); return 0.0; } else return kalan; Import java.util.Scanner; public class deneBankaHesabi public static void main(String[]args) { Scanner klavye = new Scanner(System.in); double kalan=1000.0, miktar; BankaHesabi hesap=new BankaHesabi(); System.out.print("Cekilecek miktar:"); miktar=klavye.nextDouble(); hesap.bakiye=kalan; // Derleyicide burada hata gösterecek. // Bakiye has private access in BankaHesabi kalan=hesap.yeniBakiye(miktar); System.out.println("Yeni bakiye="+amount); Bil 102

34 Private Özel değişkenlere ulaşılması gerektiğinde erişim (accessor) metodu, özel değişkenleri değiştirmek gerektiğinde değiştirici (mutator) metodu kullanılır. Erişim ve değiştirici metotları diğer sınıfların erişebilmesi için public tanımlanır. Erişim metodu adı  getDegiskenAdı() Değiştirici metodu adı  setDegiskenAdi() Bil 102

35 set/get Metotları Set metodu: Değişkenin değerini değiştirir.
Get metodu: Değişkenlerin değerini kullanan programa döndürür (okur). Metot adı olarak set ve get kullanılması zorunlu değildir. (Örn. yaz ve oku) public void setDegisken (int sayi) { privateDegisken = sayi; } public int getDegisken () return privateDegisken; Bil 102

36 public class BankaHesabi3 { private double hesapBakiyesi; public void setHesapBakiyesi(double Miktar) hesapBakiyesi =Miktar; } public double paraCek(double cekilenMiktar) double bakiye = hesapBakiyesi; bakiye-=cekilenMiktar; if(bakiye<0.0) System.out.println("Yetersiz bakiye..."); else hesapBakiyesi = bakiye; return hesapBakiyesi; public double getHesapBakiyesi() Bil 102

37 import java.util.Scanner; public class deneBankaHesabi { public static void main(String[]args) Scanner klavye = new Scanner(System.in); double kalan, miktar; BankaHesabi3 hesap=new BankaHesabi3(); System.out.print("Hesabinizdaki para:"); kalan=klavye.nextDouble(); System.out.print("Cekilecek para:"); miktar=klavye.nextDouble(); hesap.setHesapBakiyesi(kalan); kalan=hesap.paraCek(miktar); System.out.println("Yeni bakiye="+kalan); hesap.setHesapBakiyesi(kalan*1.1); kalan=hesap.getHesapBakiyesi(); } Hesabinizdaki para:10000 Cekilecek para:400 Yeni bakiye: Yeni bakiye: Bil 102

38 set/get Metotları setHesapBakiyesı() ve getHesapBakiyesi() metotları genel erişimli (public) oldukları için sınıf dışından çağrılarak ilgili değişken alanının okunması ve yazılması sağlanabilir. Her değişken için bu metotların yazılması zorunlu ve gerekli değildir. Tasarımcının kararına göre değişkenlere bu erişim hakkı verilebilir. Her değişkene bu şekilde erişim yapılması halinde genel erişimden bir fark kalmaz. Bil 102

39 OgrenciKayıt UML ad: String kisaSinav1: int kisaSinav2: int
OgrenciKayit ad: String kisaSinav1: int kisaSinav2: int araSinav: int final: int toplamPuan: double not: char +veriGir(): void +ciktiYaz(): void +setToplam(): void +setNot(): void Bil 102

40 public class ogrenciKayit { private int kisaSinav1, kisaSinav2, araSinav, finalSinavi; private double toplamPuan; private char notu; private string ad; public void veriGir() { Scanner klavye = new Scanner(System.in); System.out.print(“Ogrenci adini giriniz:”); ad = klavye.next(); System.out.print(“Kisa sinav1 ve kisa sinav2 notlari:"); kisaSinav1 = klavye.nextInt(); kisaSinav2 = klavye.nextInt(); System.out.print(“Ara sinav ve final notlari:"); araSinav = klavye.nextInt(); finalSinavi = klavye.nextInt(); } public void ciktiYaz() System.out.println (“Isim = “ + ad); System.out.println("Toplam puan ve notu:"); System.out.println(toplamPuan+" "+notu); Bil 102

41 Ogrenci adini giriniz: Ahmet Kisa Sinav1, Kisa Sinav2 notlari: 45 67
public void setToplam() { toplamPuan=0.25*(kisaSinav1+kisaSinav2)/ *finalSinavi+0.25*araSinav; } public void setNot() if(toplamPuan>=90.0) notu='A'; else if(toplamPuan>=80.0) notu='B'; else if(toplamPuan>=70.0) notu='C'; else if(toplamPuan>=60.0) notu='D'; else notu='F'; public class deneOgrenciKayit public static void main(String[]args) OgrenciKayit ogrenci1=new OgrenciKayit(); ogrenci1.veriGir(); ogrenci1.setToplam(); ogrenci1.setNot(); ogrenci1.ciktiYaz(); Ogrenci adini giriniz: Ahmet Kisa Sinav1, Kisa Sinav2 notlari: 45 67 Ara sinav ve final notlari: 55 80 Isim = Ahmet Toplam puan ve not: 67.75 D Bil 102

42 Sınıfta Sorulan Sorular
Yeni bir sınıf yazınca bunu kullanmak için import yapmak gerekir mi: Hayır. import komutunu sınıfları değil paketleri (20-30 tane birbiriyle alakalı sınıftan oluşan gruplar) kullanmak için yazıyoruz. Bil 102

43 public class KesirliSayi { private int pay; private int payda; public void setSayi(int pay1, int pay2) { pay = pay1; payda = pay2; } public int getPay() return pay; public int getPayda() return payda; public KesirliSayi topla(KesirliSayi sayi1) KesirliSayi sayi2 = new KesirliSayi(); sayi2.pay = sayi1.pay * payda + pay * sayi1.payda; sayi2.payda = sayi1.payda * payda; return sayi2; public void yazdir() System.out.println(pay + "/" + payda); Bil 102

44 import java.util.Scanner; public class DeneKesirliSayi { public static void main(String[] args) { int pay1, pay2, payda1, payda2; KesirliSayi ilkSayi = new KesirliSayi(); KesirliSayi ikinciSayi = new KesirliSayi(); KesirliSayi sayilarToplami; KesirliSayi sonSayi = new KesirliSayi(); Scanner klavye = new Scanner(System.in); System.out.println("Birinci sayinin pay ve paydasi:"); pay1 = klavye.nextInt(); payda1 = klavye.nextInt(); ilkSayi.setSayi(pay1, payda1); System.out.println("Ikinci sayinin pay ve paydasi:"); pay2 = klavye.nextInt(); payda2 = klavye.nextInt(); ikinciSayi.setSayi(pay2, payda2); sayilarToplami = ilkSayi.topla(ikinciSayi); sayilarToplami.yazdir(); sonSayi.setSayi(7,8); sonSayi.yazdir(); } Bil 102

45 Kuşatma prensiplerine uygun iyi bir sınıf tasarımı için:
Sınıf tanımından hemen önce sınıfın, verilerin ve metodların amacını kısa şekilde açıklayan bir yorum konmalıdır. Bütün sınıf gerçekleştirme değişkenleri “private” olarak tanımlanmalıdır. Diğer sınıflar ve programlar tarafından değerlerinin değiştirilmesi veya atanması gerekebilecek değişken ve metotlar için erişim ve değiştirici (get,set) metotları yaratılmalıdır. Bütün public metotların başında metot hakkında bilgi veren kısa bir yorum bulunmalıdır. Sınıf içinde kullanılan, dışarıyla irtibatı olmayan bütün metotlar “private” olarak tanımlanmalıdır. Bunlara yardımcı metotlar denir ve yalnızca sınıf içinde tanımlı diğer metotlar tarafından kullanılırlar. Bil 102

46 Nesneler ve Gösterimleri
Değer ile çağırma: Değişkenin aldığı değer metoda gönderilir, eğer metoda giren veri türleri temel veri türleri (int vs.) ise. Metot içinde yapılan işlemler orjinal nesneyi değiştirmez. Referans ile çağırma: Eğer temel veri türlerinden değilse o zaman metoda değişkenin (nesnenin) kendisi göderilmiş gibi olur; nesnenin bellekteki adresi yollanır. Metot içinde yapılan işlemler orjinal nesneyi değiştirir. Bil 102

47 Nesneler ve Gösterimleri
Temel veri tipi ataması: int i,j; i = 10; j = i; i = 20; System.out.println(i + “ ve “ + j); 20 ve 10 Bil 102

48 Nesneler ve Gösterimleri
Nesnelerin atanmaları sonucu Araba ferrari, fiat; ferrari = new Araba (); fiat = new Araba (); ferrari.set (“kirmizi”, “450 HP”, “320 km/h”); fiat.set (“beyaz”, “70 HP”, “155 km/h”); fiat = ferrari; fiat.set (“mavi”, “80 HP”, “160 km/h”); System.out.println (“fiat: “ ); fiat.veriGöster (); System.out.println (“ferrari: “ ); ferrari.veriGöster (); fiat: mavi 80HP 160km/h ferrari: mavi 80HP 160km/h Bil 102

49 Referans ile Çağırma İki basit veri tipi kullanıldığında değişkenler birbirinden bağımsız hareket ederler ve iki ayrı değişken olarak değer alabilirler. Nesne kullanıldığında atama işlemi esnasında “=” işaretinin (atama işareti) sağındaki nesnenin referansı işaretin solundaki referansa eşitlenir. iki nesne ismi (değişken ismi) aynı nesneyi gösteriyor olmuştur. Dolayısıyla bir değişken ismi kullanarak yapılan bir değişim diğer değişkeni de (ismi farklı olsa da) aynı şekilde değiştirmektedir. Bunun sebebi iki nesnenin de referanslarının aynı olmasıdır. Bil 102

50 Nesneleri Karşılaştırma
İki nesne == ile karşılaştırılırsa nesnelerin bellek adresleri karşılaştırılmış olacaktır. İki nesnenin eşitliği bütün nesne özelliklerinin karşılaştırılmasını gerektirir  equals() metodu yazılmalı! İki nesnenin alanlarını tek tek karşılaştırmalı. Bil 102

51 KesirliSayı için equals()
{ public boolean equals(KesirliSayi sayi) return this.pay == sayi.pay && this.payda == sayi.payda; } Bil 102

52 … KesirliSayi s1 = new KesirliSayi(); s1
… KesirliSayi s1 = new KesirliSayi(); s1.setSayi(3,5); KesirliSayi s2 = new KesirliSayi(); s2.setSayi(3,5); if (s1.equals(s2)) System.out.println(s1.yazdir()+ " ve "+ s2.yazdir()+ " esittir"); else System.out.println(s1.yazdir()+ " ve "+ s2.yazdir()+ " esit degildir"); if (s1 == s2) System.out.println("s1 ve s2 ayni nesnelerdir"); System.out.println("s1 ve s2 farkli nesnelerdir"); 3/5 ve 3/5 esittir s1 ve s2 farkli nesnelerdir Bil 102

53 Nesne işlemleri Nesneleri karşılaştırmak için == kullanamıyoruz, equals() metodu yazmak gerekiyor. Nesne değerlerini birbirlerine atamak için de atama komutu = kullanamıyoruz, kopyalama amaçlı bir metot yazmak gerekiyor. Eğer = kullanırsak nesne değişkenlerinin adresleri eşitlenir ve iki değişken aynı nesneyi gösterir. Bil 102

54 ... public KesirliSayi kopya() { KesirliSayi yeniSayi = new KesirliSayi(); yeniSayi.setSayi(this.pay, this.payda); return yeniSayi; } KesirliSayi s2 = s1.kopya(); Bil 102

55 Referans: kadioğlu Bil 102


"Bölüm 4 Sınıflar ve Metotlar" indir ppt

Benzer bir sunumlar


Google Reklamları