Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Nesne Tabanlı Programlama ve Metotlar

Benzer bir sunumlar


... konulu sunumlar: "Nesne Tabanlı Programlama ve Metotlar"— Sunum transkripti:

1 Nesne Tabanlı Programlama ve Metotlar

2 Nesne Tabanlı Programlamaya Giriş
Sınıflar ve nesneler Java programlamanın temelini oluştururlar. Java ile geliştirilmiş bütün uygulamalarda sınıf ve nesne kavramını kullanmak zorunluluğu vardır. Örneğin C++ dilinde böyle bir zorunluluk yoktur. Bu dilde sınıf ve nesneler olmadan da program geliştirmek mümkündür. Java da ise mümkün değildir. Bu sebeple Java için pure(saf) nesne tabanlı programlama dilidir denilir. Nesne Tabanlı Programlamaya Giriş

3 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.

4 Nesne Tabanlı Programlama (OOP) kavramında ilk bilinmesi gereken şey sınıf(class)kavramıdır.
Sınıflar, içerisinde değişken/değişken grupları , metot/metotlar barındıran bir şablon oluştururlar. Bir sınıf oluşturulduktan sonra bu sınıfı yeni bir veri tipiymiş gibi kullanabiliriz. Bu amaçla kullanılan yapılara ise nesne denir. Nesneler, yaratıldıkları sınıfların özelliklerini taşırlar ve artık ilgili sınıfın birer somut örneğidir diyebiliriz. Örneğin şehir kelimesini bir sınıf olarak düşünürsek Elazığ, Ankara ve İstanbul şehir sınıfının birer örneği olarak düşünülebilir. Sınıflar ve Nesneler

5 Sınıflar java programlamada kullanılan temel programlama elemanlarıdır
Sınıflar java programlamada kullanılan temel programlama elemanlarıdır. Bütün kod içeriği sınıflar içerisinde bulunur. Asıl kullanım amacı, verileri tek tek değişkenlerde tutmak yerine, birbirleriyle ilişkisi olan verileri bir araya getirmek ve bunlara tek bir referans aracılığıyla erişmeyi sağlamaktır. Örneğin öğrenci bilgisini tutabilmek için ad, soyad, öğrenci numarası, yaş ve adres gibi bilgilere ihtiyacımız olduğunu düşünelim. Bunların hepsini her bir öğrenci için ayrı ayrı değişkenlerde tutmak yerine öğrenci isimli bir sınıf oluşturabilir ve ihtiyacımız olan değişkenleri bu sınıf içinde gruplayabiliriz. Daha sonra sınıfımızdan oluşturacağımız her yeni nesne sınıfımızın özelliklerini taşıyacağı için yükten kurtulmuş olunur diyebiliriz. Sınıflar

6 Bir sınıfı tanımladıktan sonra aslında yeni bir veri tipi oluşturmuş oluruz. Java dilinde oluşturduğumuz bu yeni veri tipine sahip değişkenlere nesne adı verilir. Nesneler oluşturulan sınıfların birer somut örneği, hafızada yer alan, ilgili sınıfın tipinde birer somut değişkendir diyebiliriz. Şimdiye kadarki uygulamalarımızda kullanmış olsak ta burada bir kez daha bir sınıfta nelerin bulunabileceğine değinelim. Bir sınıf, üye değişkenler, yapılandırıcı metotlar, üye değişkenlere dışarıdan erişim sağlayan getter/setter metotlar ve çeşitli metotlar içerebilir. Şimdi kısaca bunların ne anlama geldiğini görelim. Nesneler

7 Üye değişkenler: Sınıfta tutulacak bilginin depolandığı özel değişkenlerdir. Sınıfımızın değişkenlerinin ne olacağı uygulamamızın tipine göre şekillenecek bir şeydir ve programlama mantığımızla alakalı bir durumdur. Nesne tabanlı programlamada amaç bir anlamda gerçek hayatın programlama dili ile kodlanabilmesidir. Sınıf üye değişkenlerin ne olacağı problemimizin doğasına bağlıdır. Yapılandırıcı metotlar: Sınıf ilk oluşturulurken new operatoru ile çağrılan metotlar. Üye değişkenlere dışarıdan erişim sağlayan metotlar: genelde public kelimesi ile tanımlanırlar ve üye değişkenlere dışarıdan erişimi sağlarlar Diğer metotlar: sınıf içerisindeki verileri kullanarak genellikle sınıf ile ilgili çeşitli çıktılar üreten metotlardır. Bir sınıfın üyeleri

8 Örnek: public class Ogrenci{ public Ogrenci(){ } Üye Değişkenler
private String ad; private String soyad; private int ogrenciNo; private String bolum; public Ogrenci(){ ad=‘’ ’’; soyad=‘’ ’’; ogrenciNo=-1; bolum=‘’ ’’; } public void setAd(String ad){ this.ad=ad; public void setSoyad(String soyad){ this.soyad=soyad; Üye Değişkenler Yapılandırıcı Metot Üye değişkenlere dışarıdan erişim sağlayan metotlar (setter).

9 Değişkenlere erişim sağlıyan metotlar

10 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.

11 Anahtar kelimeler Public, private, protected, friendly
Public, private ve protected ;üye değişkenler ve sınıf metotları için erişim seviyeleri tanımlamak için kullandığımız anahtar kelimelerdir. Bunlar sınıf içerisinde bulunan değişkenlere nasıl erişim sağlanacağını belirlemek için kullanılır. public: bu anahtar kelime önüne geldiği değişkenin veya metotların bütün sınıflardan erişilebilir olmasını sağlar. Private: önüne getirildiği değişken veya metodun dışarıdaki sınıflardan erişilmez olmasını sağlar. Private değişkenler sadece kendi sınıfı içerisinde kullanılabilir . Protected: önüne getirildiği değişken veya metotlara sadece kendi paketi içerisindeki sınıflar tarafından erişim izni verir. Friendly: Protected ‘tan farkı alt sınıflardan erişime de izin vermemesidir. Anahtar kelimeler Public, private, protected, friendly

12

13 Nesneler, sınıflardaki veri yapılarını kullanabilmek için oluşturulan değişlenlerdir.
Örneğin, NESNELER (OBJECTS)

14 Bu operatör bir sınıf adıyla birlikte kullanılır
Bu operatör bir sınıf adıyla birlikte kullanılır. Bellekte ilgili sınıfa ait bir nesne oluşturur. Bir örnek olarak; Ogrenci o1=new Ogrenci(); İfadesi ile o1 nesnesi için Ogrenci sınıfına özel bir bellek ayrılmasını sağlar. Çok defa örneklerde kullandığımız new operatörü javada sıklıkla kullandığımız bir ifadedir. Temel tip değişken tanımlamalarımızda veya kendi sınıfımızın bir nesnesini yaratacağımız zaman kullandığımız bir kelimedir. Aşağıda bir başka örnek olarak oku ismiyle Scanner sınıfının bir örnek nesnesi yaratılmaktadır. Scanner oku= new Scanner(System.in); new operatörü

15 Nesneler tanımlandıktan sonra ve new operatörü aracılığı ile oluşturulduktan sonra nesnelerin public ve protected anahtar kelimeleri kullanılarak tanımlanmış üye değişken veya metotlarına dışarıdan erişim sağlayabilmek için java nokta operatörünü kullanır. Yukarıda tanımladığımız Ogrenci sınıfının bir nesnesini yaratarak üye değişkenlere erişim sağlayalım; //… Ogrenci yeniogrenci=new Ogrenci(); yeniogrenci.setAd(‘’Abdullah’’); yeniogrenci.setSoyad(‘’Çelik’’); Nokta(.) operatörü

16 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

17 DeneOgrenciKayit.java OgrenciKayit.java
Örnek

18 package deneogrencikayit;
/** * unveren */ public class DeneOgrenciKayit { args the command line arguments public static void main(String[] args) { // TODO code application logic here OgrenciKayit ogrenci1=new OgrenciKayit(); ogrenci1.veriGir(); ogrenci1.setToplam(); ogrenci1.setNot(); ogrenci1.ciktiYaz(); }

19 package deneogrencikayit; import java. util
package deneogrencikayit; import java.util.*; 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:"); this.ad = klavye.next(); System.out.print("Kisa sinav1 ve kisa sinav2 notlari:"); this.kisaSinav1 = klavye.nextInt(); this.kisaSinav2 = klavye.nextInt(); System.out.print("Ara sinav ve final notlari:"); this.araSinav = klavye.nextInt(); this.finalSinavi = klavye.nextInt(); } public void ciktiYaz() { System.out.println ("Isim = " + this.ad); System.out.println("Toplam puan ve notu:"); System.out.println(this.toplamPuan+" "+this.notu); public void setToplam() this.toplamPuan=0.25*(this.kisaSinav1+this.kisaSinav2)/ *this.finalSinavi+0.25*this.araSinav; public void setNot() if(this.toplamPuan>=90.0) this.notu='A'; else if(this.toplamPuan>=80.0) this.notu='B'; else if(this.toplamPuan>=70.0) this.notu='C'; else if(this.toplamPuan>=60.0) this.notu='D'; else this.notu='F';} }

20 Genel olarak metotlar, parametre olarak dışarıdan verilen veriler üzerinde çeşitli işlemler gerçekleştiren isteğe bağlı olarak yapılan bu işlemlerin sonucunu geri döndüren programlama ifadeleridir. Java dilindeki metotlar, C/C++,C# dillerinde fonksiyon, bazı dillerde procedure ve module olarak isimlendirilir. Özetle ,metotlar, hemen hemen tüm programlama dillerinde kullanılan ve belirli işlevleri yerine getirmek için kullanılan yapılardır. Metotlar değer döndürmek zorunda değillerdir. Metotlar parametre alabilir veya almayabilirler. METOTLAR

21 Bir metodun içinde başka bir metot çağrılabilir.
Aynı sınıfın içinden çağrılıyorsa sadece metot adı ile çağrılır (veya this kullanılabilir  this.metotadı). Farklı bir sınıf içinden çağrılıyorsa, nesneadı.metotadı şeklinde çağrılmalıdır. Farklı bir sınıf içinden çağrılabilmesi için metodun public olarak tanımlanmış olması gerekir.

22

23

24 Örnek

25 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”);

26 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

27 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.

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

29 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, …) { ---; }

30 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);

31 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);

32 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

33 Metotlar bir defa tanımlandıktan sonra normal java komutları gibi kullanabiliriz.
Örneğin yukarıda tanımladığımız topla metodunu kullanmak için; //… int a=50; int b=20; int toplam=topla(a,b); //topla metodu kullanımı System.out.println(toplam); //... Metotların kullanımı

34 Metotlar bir kez tanımlanırlar ve main metot içerisinde istenildiği kadar çağrılıp kullanılabilir. Önemli olan metodun geri dönüş tipine ve alacağı parametrelerle bizim kullanım şeklimizin uyumlu olmasıdır. Metot tanımında yer alan parametreler hafızada yer kaplamazlar, bu parametreler formal(biçimsel)’dır. Gerçek program içerisinde metot çağrımında (metot kullanımında)kullandığımız parametreler ise gerçek parametrelerdir ve bunlar hafızada yer kaplarlar.

35 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

36 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’);

37 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.

38 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

39 Ö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);

40 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(); }

41 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:

42 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);

43 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()

44 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;

45 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()

46 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:

47 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.

48 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);

49 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

50 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.

51 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.

52 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

53 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

54 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.

55 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ı.

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

57 … 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

58 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.

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


"Nesne Tabanlı Programlama ve Metotlar" indir ppt

Benzer bir sunumlar


Google Reklamları