System - Piazza

Transkript

System - Piazza
BİL-141 Bilgisayar Programlama I
(Java)
TOBB Ekonomi ve Teknoloji Üniversitesi
Bilgisayar Mühendisliği Bölümü
Not: Bu dersin sunumları, M. Ali Akcayol tarafından “Java Bilgisayar Programlamaya Giriş, A.
Yazıcı, E. Doğdu, M.
Özbayoğlu, M. Erten, O. Ergin” kitabı kullanılarak hazırlanmıştır.
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Sınıf ve Metot Tanımları
n 
n 
n 
n 
n 
n 
Önceki kuşak diller yapısal programlama dilleriydi.
Java nesne yönelimli bir programlama dilidir.
Yapısal dillerde akış denetim komutları ve metot
yapıları öne çıkmaktaydı.
Nesne yönelimli dillerde ise programlar nesneler
halinde oluşturulmaktadır.
Nesne yönelimli dillerde program geliştirirken aşağıdaki
aşamalar gerçekleştirilir:
n  Nesnelerin ortak özellikleriyle sınıf (class) oluşturmak
n  Tanımlı sınıfları kullanılarak nesneler oluşturmak
(instantiation)
Java programı nesneler ile sınıf içinde tanımlanmış
metotları çağırır (method invocation)
3
Sınıf ve Metot Tanımları
n 
Kitap sınıfı için ortak özellikler aşağıdaki gibi olabilir.
Java kitabı:
Özellikler:
Adı: Java ile Programlama
Yazarlar: Ali Yazıcı, Y.Murat Erten, Erdoğan Doğdu, A.Murat Özbayoğlu, Oğuz Ergin
Yayıncı: Palme Kitabevi
Sayfa: 270
Fiyat: 50 YTL
Matematik kitabı:
Özellikler:
Adı:
Yazarlar:
Yayıncı:
Sayfa: 270
Fiyat: 50 YTL
Fizik kitabı:
Özellikler:
Adı:
Yazarlar:
Yayıncı:
Sayfa:
Fiyat:
4
Sınıf ve Metot Tanımları
n 
Personel sınıfı için ortak özellikler aşağıdaki gibi olabilir.
Personel sınıfı:
Sınıf Adı: Personel
Özellikleri (verileri):
- isim
- sicilNo
- vergiNo
- ePosta
Metotları:
+ maasHesabi();
+ ePostaYollama();
n 
Aşağıda Personel sınıfından oluşturulmuş bir nesne
görülmektedir.
Nesne Adı: bilgisayarMuhBlmBaskani
Özellikleri:
- isim: Ali Yazici
- Axxxx
- 900......
- ePosta: [email protected]
5
Sınıf ve Metot Tanımları
n 
Personel sınıfı Java’da aşağıdaki gibi tanımlanabilir.
public class Personel
{
// Özellikler (veriler)
public String isim;
public String sicilNo;
public String vergiNo;
public String ePosta;
// Metotlar
public void maasHesabi()
{
// metot işlemleri ...
}
public void ePostaYollama()
{
// metot işlemleri ...
}
}
6
Sınıf ve Metot Tanımları
n 
n 
Personel sınıfı başka bir program tarafından
kullanılabilir.
Bu programda bir main() metodu olması zorunludur.
public class PersonelDene
{
public static void main(String [] args)
{
Personel bilgisayarMuhBlmBaskani;
// nesneyi oluşturur
bilgisayarMuhBlmBaskani = new Personel;
bilgisayarMuhBlmBaskani.maasHesabi();
bilgisayarMuhBlmBaskani.ePostaYollama();
}
}
7
Sınıf ve Metot Tanımları
n 
n 
n 
Sınıflar gösterilirken UML (Unified Modeling Language)
gösterimi kullanılabilir.
UML gösteriminde bir sınıf isim, özellikler ve metotlar
olarak üç kısımdan oluşur.
Personel için UML gösterimi aşağıdaki gibi yapılabilir.
Personel
+isim : String
+sicilNo : String
+vergiNo : String
+ePosta : String
+maasHesabi() : void
+ePostaYollama() : void
8
Sınıf ve Metot Tanımları
n 
Aşağıda YeniSinif adlı sınıfın oluşturulması ve
DeneYeniSinif sınıfında kullanılması görülmektedir.
public class YeniSinif
{
public void veriYazdir()
{
System.out.println("Sadece mesaji yazdiralim.");
}
Çıktı:
}
Sadece mesaji yazdiralim.
-+-+-+-+-+-+-+-+-+-+-+-+-+Sadece mesaji yazdiralim.
-+-+-+-+-+-+-+-+-+-+-+-+-+-
class DeneYeniSinif
{
public static void main(String [] args)
{
YeniSinif uye = new YeniSinif();
uye.veriYazdir();
System.out.println("-+-+-+-+-+-+-+-+-+-+-+-+-+-");
uye.veriYazdir();
System.out.println("-+-+-+-+-+-+-+-+-+-+-+-+-+-");
}
}
9
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Metotların Çağırılması
n 
n 
n 
n 
Sınıf içinde tanımlanan metotlar nesneler kullanılarak
çağırılabilir.
İki tür metot vardır: değer döndüren metotlar ve
değer döndürmeyen metotlar.
Geri değer döndüren metotlarda dönecek verinin türü
metot tanımında verilir. Değer döndürülecek yerde de
return komutu kullanılır.
double numara;
numara = Math.random();
Geri değer döndürmeyen metotlarda ise metot
tanımında void kullanılır ve return komutu
kullanılmaz.
System.out.println(“Ekrandaki mesaj”);
11
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
void Metot Tanımları
n 
n 
n 
n 
void metotlar çağırıldıkları yere değer döndürmezler.
public void metot_adi()
{
- - }
Yukarıdaki ilk satır metot başlığı (heading), parantez
arasındaki kısım ise gövde (body) olarak adlandırılır.
public, metodun her isteyen tarafından
kullanılabileceğini gösterir.
void merodun çağırılan yere değer döndürmeyeceğini
gösterir.
13
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Değer Döndüren Metotlar
n 
n 
n 
Değer döndüren metotlar aşağıdaki gibi tanımlanır.
public döndürülen_değer_türü metot_adi()
{
- - }
Döndürülen değer türü Java’da tanımlı veri türlerinden
birisi veya kullanıcı tanımlı bir tür olmalıdır.
Metodun gövde kısmınd bir veya daha fazla return
komutu kullanılmalı ve döndürülen değer bir ifadeyle
hesaplanmalı veya bir değişkenle gönderilmelidir.
15
Değer Döndüren Metotlar
n 
Aşağıdaki örnekte veriYazdir() metodu int türünde değer
döndürmektedir.
public class VeriDondur
{
public int veriYazdir()
{
int say;
String mesaj = "Sadece bu mesaji yazdiralim.";
System.out.println(mesaj);
say = mesaj.length();
return say;
}
}
16
Değer Döndüren Metotlar
n 
Aşağıdaki örnekte veriYazdir() metodu int türünde değer
döndürmektedir.
class DeneVeriDondur
{
public static void main(String [] args)
{
int sembolSayisi;
VeriDondur eleman = new VeriDondur();
sembolSayisi = eleman.veriYazdir();
System.out.println("Sembol sayisi="+sembolSayisi);
sembolSayisi = eleman.veriYazdir();
System.out.println("Sembol Sayisi="+sembolSayisi);
}
}
Çıktı:
Sadece
Sembol
Sadece
Sembol
mesaji yazdiralim.
sayisi=28
mesaji yazdiralim.
sayisi=28
17
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Parametreli Metotlar
n 
n 
n 
Metot dışarıdan (çağırıldığı yerden) girdi alabilir.
Metot adının yanında parantez içinde alacağı
değişkenlerin adları ve türleri bildirilir.
Değer döndürmeyen ve değer döndüren metotlar
dışarıdan parametre alabilir.
public döndürülen_değer_türü
metot_adi(param_türü1 param_adı1,
param_türü2 param_adı2, ...)
{
- - }
19
Parametreli Metotlar
import java.util.Scanner;
public class VeriYolla
{
public int veriYazdir(String mesaj)
{
int say;
System.out.println("Gelen mesaj:"+mesaj);
say = mesaj.length();
return say;
}
}
20
Parametreli Metotlar
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);
}
}
Çıktı:
Java
>> Klavyeden girildi
Gelen mesaj:Java
Sembol sayisi=4
21
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
this Parametresi
n 
Bir metodun içinden, ait olduğu sınıftaki başka bir metot
veya değişkene ulaşılmak isteniyorsa this parametresi
kullanılabilir.
import java.util.Scanner;
public class VeriYolla2
{
public String mesaj;
public int veriYazdir()
{
int say;
System.out.println("Gelen mesaj:" + this.mesaj);
say = mesaj.length();
return say;
}
}
23
this Parametresi
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);
}
}
Çıktı:
Java
>> Klavyeden girildi
Gelen mesaj:Java
Sembol sayisi=4
24
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Yerel Değişkenler
n 
n 
n 
n 
Değişkenler tanımlandıkları blok içinde geçerlidir.
Bir metodun içinde tanımlanan değişkenin geçerliliği
metot bittiğinde sona erer.
Aynı değişken adı farklı metotlarda kullanılabilir.
Her değişkenin geçerliliği ait olduğu metot başladığında
başlar ve bittiğinde sona erer.
// i değişkeni for bloğu içinde tanımlıdır
for(int i = 1; i < 100; i++)
toplam = toplam + i;
System.out.println(i); // Hatalıdır! i tanımlı değildir.
26
Yerel Değişkenler
n 
Aşağıdaki örnekte yeniMiktar isimli iki ayrı değişken hem
sınıf içinde hemde main() metodunda kullanılmıştır.
public class BankaHesabi
{
public double miktar;
public double faiz;
public void yeniToplamGoster ()
{
double yeniMiktar = miktar + (faiz/100.0) * miktar;
System.out.println ("Faizli miktar " + yeniMiktar + "
YTL.");
}
}
27
Yerel Değişkenler
class DeneBankaHesabi
{
public static void main (String [] args)
{
BankaHesabi benimHesabim = new BankaHesabi ();
benimHesabim.miktar = 100.00;
benimHesabim.faiz = 5;
double yeniMiktar = 800.00;
benimHesabim.yeniToplamGoster ();
System.out.println ("Hesapta " + yeniMiktar + " YTL
olmaliydi.");
}
}
Çıktı:
Faizli miktar 105.0 YTL.
Hesapta 800.0 YTL olmaliydi.
28
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Parametrelerin Metotlara Gönderimi
n 
n 
n 
n 
Metotların başlığında tanımlanan parametrelere
biçimsel parametre (formal parameter) denir.
Bir metot çağrıldığında 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 (call-by-value): Argümanların
sadece değeri metoda gönderilir.
Referans ile çağırma (call-by-reference):
Argümanların referansı (adresi) metoda gönderilir.
// bir nesne metoduna farklı değerler gönderilmektedir.
birNesne.notKayitIslemi(1010598, “Ahmet”, ‘E’, “Matematik”,
78.89);
30
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Bilgi Saklanması ve Kuşatması
n 
n 
n 
n 
Parametre ve değişkenlerin sadece gerekli durumlarda
ve yerlerde kullanılması ve program ayrıntılarının
mümkün olduğunca saklanmasına kuşatma veya
saklama denir.
Bir sınıfın değişkenlerinin her yerden ve herkes
tarafından erişime açık olması (public) tercih edilmez.
Bunun için erişim değiştiricileri (access modifiers)
denilen kelimeler kullanılır.
Bunlardan yaygın kullanılanlar public ve private
kelimeleridir.
32
Bilgi Saklanması ve Kuşatması
public ve private
n  public : herhangi bir program veya sınıf tarafından
çağrılabilir, kullanılabilir.
n  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.
n  Private değişkenlere genellikle set ve get
fonksiyonları kullanılarak erişilir.
n  Fonksiyonlarla değişkenlere erişirken değerlerin
kontrolü, düzeltilmesi veya hatalı girişleri kaydetmeden
kullanıcıya bilgi verilmesi işlemleri kolaylıkla yapılabilir.
33
Bilgi Saklanması ve Kuşatması
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);
}
}
34
Bilgi Saklanması ve Kuşatması
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";
bil.ePosta="[email protected]";
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);
Çıktı:
bil.maas=netMaas;
Brut maasi giriniz:4500
bil.kayitYazdir();
Brut Maas=4500.0
}
Net Maas=3645.00000005
Personel ismi:Ahmet Cakir
}
Personel ePosta:[email protected]
Personel maasi:3645.00000005
35
Bilgi Saklanması ve Kuşatması
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;
}
}
36
Bilgi Saklanması ve Kuşatması
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;
// Derleyici hata gösterecek.
// Bakiye has private access in BankaHesabi
kalan = hesap.yeniBakiye(miktar);
System.out.println("Yeni bakiye = “ + amount);
}
}
37
Bilgi Saklanması ve Kuşatması
private değişkenlere erişim
n  Özel değişkenlere (private) ulaşılması gerektiğinde
erişim (accessor) metodu (get), özel değişkenleri
değiştirmek gerektiğinde değiştirici (mutator) metodu
(set) kullanılır.
n  Erişim ve değiştirici metotlar diğer sınıfların ve
nesnelerin erişebilmesi için public tanımlanır.
n  Erişim metodu adı à getDegiskenAdı() şeklinde
tanımlanmalıdır.
n  Değiştirici metodu adı à setDegiskenAdi() şeklinde
tanımlanmalıdır.
38
Bilgi Saklanması ve Kuşatması
set ve get metotları
n  Set metodu: Değişkenin değerini değiştirmek için
kullanılır.
n  Get metodu: Değişkenin değerine ulaşmak için kullanılır.
n  Metot isimlerinde set ve get kullanılması zorunlu değildir.
(Örneğin yaz ve oku kullanılabilir.)
public void setDegisken(int sayi)
{
privateDegisken = sayi;
}
public int getDegisken()
{
return privateDegisken;
}
39
Bilgi Saklanması ve Kuşatması
set ve get metotları - örnek
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;
}
40
Bilgi Saklanması ve Kuşatması
set ve get metotları - örnek
public double getHesapBakiyesi()
{
return hesapBakiyesi;
}
}
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();
41
Bilgi Saklanması ve Kuşatması
set ve get metotları - örnek
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();
System.out.println("Yeni bakiye= "+kalan);
}
}
Çıktı:
Hesabinizdaki para: 10000
Cekilecek para: 400
Yeni bakiye= 9600.0
Yeni bakiye= 10560.0
42
Bilgi Saklanması ve Kuşatması
set ve get metotları
n  setHesapBakiyesi() 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
değiştirilmesi işlemleri yapılabilir.
n  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.
43
Bilgi Saklanması ve Kuşatması
set ve get metotları
n  OgrenciKayit sınıfı için UML gösterimi aşağıdaki gibi
yapılabilir.
OgrenciKayit
‒ ad: String
‒ kisaSinav1: int
‒ kisaSinav2: int
‒ araSinav: int
‒ final: int
‒ toplamPuan: double
‒ not: char
+veriGir(): void
+ciktiYaz(): void
+setToplam(): void
+setNot(): void
44
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
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();
}
45
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
public void ciktiYaz()
{
System.out.println ("Isim =" + ad);
System.out.println("Toplam puan ve notu:");
System.out.println(toplamPuan + " " + notu);
}
public void setToplam()
{
toplamPuan = 0.25 * (kisaSinav1 + kisaSinav2) / 2.0 +
0.5 * finalSinavi + 0.25 * araSinav;
}
46
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
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';
}
}
47
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
public class deneOgrenciKayit
{
public static void main(String[]args)
{
OgrenciKayit ogrenci1 = new OgrenciKayit();
ogrenci1.veriGir();
ogrenci1.setToplam();
ogrenci1.setNot();
ogrenci1.ciktiYaz();
}
}
Çıktı:
Ogrenci adini giriniz: Ahmet
Kisa sinav1 ve kisa sinav2 notlari: 45 67
Ara sinav ve final notlari: 55 80
Isim = Ahmet
Toplam puan ve not:
67.75 D
48
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
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;
}
49
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
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);
}
}
50
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
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);
51
Bilgi Saklanması ve Kuşatması
set ve get metotları – örnek
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();
}
}
Çıktı:
Birinci sayinin pay ve paydasi: 10 2
Ikinci sayinin pay ve paydasi: 10 5
70/10
7/8
52
Bilgi Saklanması ve Kuşatması
Kuşatma prensiplerine göre iyi bir sınıf oluşturmak
n  Sınıf tanımından hemen önce sınıfın, verilerin ve
metodların amacını açıklayan bir yorum konmalıdır.
n  Bütün sınıf değişkenleri “private” olarak tanımlanmalıdır.
n  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ı
oluşturulmalıdır.
n  Bütün public metotların başında metot hakkında bilgi
veren kısa bir açıklama bulunmalıdır.
n  Sınıf içinde kullanılan, dışarıdan erişilmeyecek 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.
53
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Nesneler ve Gösterimleri
Değer ile çağırma
n  Değişkenin aldığı değer metoda gönderilir.
n  Metot içinde yapılan işlemler orjinal nesneyi değiştirmez.
Referans ile çağırma
n  Metoda değişkenin (nesnenin) kendisi göderilmiş gibi
olur ve nesnenin bellekteki adresi yollanır.
n  Metot içinde yapılan işlemler orjinal nesneyi değiştirir.
55
Nesneler ve Gösterimleri
Değer ile çağırma
int i, j;
i = 10;
j = i;
i = 20;
System.out.println(i + “ ve “ + j);
20 ve 10.
Çıktı:
20 ve 10
56
Nesneler ve Gösterimleri
Referans ile çağırma
n  İ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.
n  Nesne kullanıldığında atama işlemi esnasında “=”
işaretinin sağındaki nesnenin referansı (adresi) işaretin
solundaki referansa (adrese) eşitlenir.
n  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.
n  Bunun sebebi iki nesnenin de referanslarının
(adreslerinin) aynı olmasıdır.
57
Nesneler ve Gösterimleri
Nesneleri karşılaştırma
n  İki nesne == ile karşılaştırılırsa nesnelerin bellek
adresleri karşılaştırılmış olacaktır.
n  İki nesnenin eşitliği bütün nesne özelliklerinin
karşılaştırılmasını gerektirir ve bunun için equals()
metodu yazılmalıdır.
n  İki nesnenin alanlarının tek tek karşılaştırılması gerekir.
public boolean equals(KesirliSayi sayi)
{
return (this.pay == sayi.pay && this.payda == sayi.payda);
}
public KesirliSayi kopya()
{
KesirliSayi yeniSayi = new KesirliSayi();
yeniSayi.setSayi(this.pay, this.payda);
return yeniSayi;
}
58
Nesneler ve Gösterimleri
Nesneleri karşılaştırma – örnek
public class DeneKesirliSayi3
{
public static void main(String [] args)
{
KesirliSayi s1 = new KesirliSayi();
s1.setSayi(3,5);
Çıktı:
KesirliSayi s2 = s1.kopya();
3/5 ve
s2.setSayi(3,5);
3/5 esittir
s1 ve s2 farkli nesnelerdir
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");
else
System.out.println("s1 ve s2 farkli nesnelerdir");
}
59
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
toString() Metodu
n 
n 
Java otomatik olarak tüm sınıflar için toString()
metodunu sağlar.
Bu metot herhangi bir nesne için çağırıldığında o
nesnenin kimlik numarasını döndürür.
KesirliSayi s1 = new KesirliSayi();
s1.setSayi(3, 5);
System.out.println(s1.toString());
System.out.println(s1);
Çıktı:
KesirliSayi@60aeb0
KesirliSayi@60aeb0
61
toString() Metodu
n 
Kesirli sayı sınıfı için ayrı bir toString() metodu
tanımlanabilir.
public class KesirliSayi
{
// ...
public String toString()
{
return pay + “/” + payda;
}
}
KesirliSayi s1 = new KesirliSayi();
s1.setSayi(3, 5);
System.out.println(s1.toString());
System.out.println(s1);
Çıktı:
3/5
3/5
62
Konular
Sınıf ve Metot Tanımları
n  Metotların Çağırılması
n  void Metot Tanımları
n  Değer Döndüren Metotlar
n  Parametreli Metotlar
n  this Parametresi
n  Yerel Değişkenler
n  Parametrelerin Metotlara Gönderimi
n  Bilgi Saklanması ve Kuşatması
n  Nesneler ve Gösterimleri
n  toString() Metodu
n  Nesne Kurucuları
n 
Nesne Kurucuları
n 
n 
n 
n 
n 
Nesne kurucusu (constructor) nesnenin
oluşturulması sırasında değişkenlerin istenildiği gibi
düzenlenmesini sağlar.
Nesne kurucusunun adı sınıf adıyla aynıdır.
Nesne kurucusu değer döndürmez ve void kullanılmaz.
Nesne kurucusu dışarıdan parametre alabilir.
Bir sınıfta nesne kurucusu yoksa alan adalrına ilk
değerler atanır. (int için 0, nesne için null)
public class Sınıf_Adı
{
public Sınıf_Adı(param_türü1 param_adı1, ...)
{
--}
}
64
Nesne Kurucuları
n 
n 
n 
Bir sınıfta birden fazla nesne kurucusu olabilir.
Hangi nesne kurucusunun kullanılacağına gönderilen
parametre sırası ve türlerine göre karar verilir.
Buna metot aşırı yükleme (method overloading)
denir.
65
Nesne Kurucuları
import java.util.Scanner;
public class Kisi
{
private String
private String
private String
private double
isim;
ePosta;
dogumYeri;
genelNot;
public Kisi(String a, String b, String c, double o)
{
isim = a;
ePosta = b;
dogumYeri = c;
genelNot = o;
}
public Kisi()
{
}
66
Nesne Kurucuları
public void setIsim(String adSoyad)
{
isim = adSoyad;
}
public void setePosta(String eMail)
{
ePosta = eMail;
}
public void setDogumYeri(String yer)
{
dogumYeri = yer;
}
public void setgenelNot(double ortalama)
{
genelNot = ortalama;
}
67
Nesne Kurucuları
public double getgenelNot()
{
return genelNot;
}
public void bilgiOku()
{
Scanner klavye = new Scanner(System.in);
System.out.print("Ismi giriniz: ");
isim = klavye.nextLine();
System.out.print("e-Postayi giriniz: ");
ePosta = klavye.nextLine();
System.out.print("D. Yeri giriniz: ");
dogumYeri = klavye.nextLine();
System.out.print("GPA giriniz: ");
genelNot= klavye.nextDouble();
}
68
Nesne Kurucuları
public void bilgiYaz()
{
System.out.println("Ogrenci Ismi: "+isim);
System.out.println("Ogrenci e-Posta adresi: "+ePosta);
System.out.println("Ogrenci Dogum Yeri: "+dogumYeri);
}
public boolean equals(Kisi birKisi)
{
if (isim.equals(birKisi.isim)&&
ePosta.equals(birKisi.ePosta)&&
dogumYeri.equals(birKisi.dogumYeri))
return true;
else
return false;
}
}
69
Nesne Kurucuları
class DeneKisi
{
public static void main(String [] args)
{
Kisi ogrenci1 = new Kisi("Erdogan Dogdu",
"[email protected]","Konya",2.49);
Kisi ogrenci2 = new Kisi("Erdogan Dogdu",
"[email protected]","Konya",3.90);
Kisi ogrenci3 = new Kisi();
ogrenci3.setIsim("Sertac Dogdu");
ogrenci3.setePosta("[email protected]");
ogrenci3.setDogumYeri("Ankara");
ogrenci3.setgenelNot(3.28);
ogrenci1.bilgiYaz();
ogrenci2.bilgiYaz();
System.out.println(ogrenci1 + " " + ogrenci2);
if (ogrenci1.equals(ogrenci2))
System.out.println("ayni ogrenciler " +
ogrenci1.getgenelNot());
else
System.out.println("farkli ogrenciler...");
}
}
70
Nesne Kurucuları
Çıktı:
Ogrenci Ismi: Erdogan Dogdu
Ogrenci e-Posta adresi: [email protected]
Ogrenci Dogum Yeri: Konya
Ogrenci Ismi: Erdogan Dogdu
Ogrenci e-Posta adresi: [email protected]
Ogrenci Dogum Yeri: Konya
Kisi@1f6a7b9 Kisi@7d772e
ayniOgrenciler 2.49
71
Nesne Kurucuları
Nesnelerin metotlara girdi ve çıktı olarak kullanımı
n  Nesneler metotlara parametre olarak gönderilebilir veya
dönen değer olarak alınabilir.
public Sınıf_Adı2 metotAdı(Sınıf_Adı1 nesne_adı1, ...)
{
--return nesne_adı1;
}
n 
Metot nesne alabilir farklı bir değer veya nesne
döndürebilir.
public BankaHesabi hesapBul(Personel P)
{
BankaHesabi b = new BankaHesabi();
--return b;
}
72
Nesne Kurucuları
public class DeneKesirliSayi4
{
public static void birArtir(KesirliSayi sayi)
{
sayi.setSayi(sayi.getPay() + 1, sayi.getPayda + 1);
}
public static vodi birArtir(int i)
{
i++;
}
public static void main(String [] args)
{
KesirliSayi s = new KesirliSayi();
s.setSayi(3, 5);
birArtir(s);
s.yazdir();
int j = 5;
birArtir(j);
System.out.println(j);
}
}
73

Benzer belgeler