Algorithms and Data Structures

advertisement
BİL-141 Bilgisayar Programlama I
(Java)
Hazırlayan: M.Ali Akcayol
Gazi Üniversitesi
Bilgisayar Mühendisliği Bölümü
Not: Bu dersin sunumları, “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







Giriş
Alt Sınıflar
Metot Tanımlarının Yeniden Yapılması
Alt Sınıflarla Programlama Yaklaşımları
Birden Fazla Seviyeli Kalıtım
Soyut Sınıflar ve Arayüzler
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
1
Giriş




Java dilinde bir sınıf daha sonra oluşturulacak sınıflarda
kullanılabilir.
Yeni oluşturulacak sınıfa değişkenleri ve metotları
aktarılabilir.
Bu şekilde özellik aktarımına kalıtım (inheritance)
denir.
Öncelikle temel sınıf oluşturulur daha sonra diğer sınıflar
bu sınıftan türetilir.
3
Giriş

Aşağıda temel bir sınıf olarak Tasit oluşturulmuştur.
public class Tasit
{
private String isim;
public Tasit()
{
isim = " ";
}
public Tasit(String ilkIsim)
{
isim = ilkIsim;
}
public void setIsim(String yeniIsim)
{
isim = yeniIsim;
}
public String getIsim()
{
return isim;
}
4
2
Giriş

Tasit sınıfı - devam
public void ciktiYaz()
{
System.out.println("Isim: " + isim);
}
public boolean ayniIsim(Tasit digerTasit)
{
return (this.isim.equalsIgnoreCase(digerTasit.isim));
}
}
5
Konular







Giriş
Alt Sınıflar
Metot Tanımlarının Yeniden Yapılması
Alt Sınıflarla Programlama Yaklaşımları
Birden Fazla Seviyeli Kalıtım
Soyut Sınıflar ve Arayüzler
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
3
Alt Sınıflar

Bir sınıf kullanılarak yeni sınıflar oluşturulabilir. Tasit
sınıfı kullanılarak Otomobil sınıfı oluşturulmuştur.
public class Otomobil extends Tasit
{
private int plakaNo;
public Otomobil()
{
super();
plakaNo = 0;
}
public Otomobil(String marka, int plakaNumarasi)
{
super(marka);
plakaNo = plakaNumarasi;
}
7
Alt Sınıflar

Otomobil sınıfı - devam
public void reset(String yeniMarka, int yeniPlakaNumarasi)
{
setIsim(yeniMarka);
plakaNo = yeniPlakaNumarasi;
}
public int getOtomobilPlakasi()
{
return plakaNo;
}
public void setPlakaNumarasi(int yeniPlakaNumarasi)
{
plakaNo = yeniPlakaNumarasi;
}
8
4
Alt Sınıflar

Otomobil sınıfı - devam
public void ciktiYaz()
{
System.out.println("Marka: " + getIsim());
System.out.println("Plaka Numarasi: " + plakaNo);
}
public boolean equals(Otomobil digerOtomobil)
{
return (this.ayniIsim(digerOtomobil)
&& (this.plakaNo == digerOtomobil.plakaNo));
}
}
9
Alt Sınıflar

Otomobil sınıfı içindeki
public class Otomobil extends Tasit

satırı ile Tasit sınıfının özelliklerini kullanan Otomobil
adında yeni bir sınıf türetilmiştir.
Bu tanımdan sonra
Otomobil c = new Otomobil;
tanımı yapıldığında,
c.setIsim(“Fiat”);
geçerli bir tanım olacaktır.
10
5
Alt Sınıflar

Aşağıdaki örnekte Tasit ve Otomobil sınıflarının
kullanımı görülmektedir.
public class KalitimDemo
{
public static void main(String[] args)
{
Otomobil c = new Otomobil();
c.setIsim("Fiat");
c.setPlakaNumarasi(1234);
c.ciktiYaz();
}
}
Çıktı:
Marka: Fiat
Plaka Numarası: 1234
11
Konular







Giriş
Alt Sınıflar
Metot Tanımlarının Yeniden Yapılması
Alt Sınıflarla Programlama Yaklaşımları
Birden Fazla Seviyeli Kalıtım
Soyut Sınıflar ve Arayüzler
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
6
Metot Tanımlarının Yeniden Yapılması




Eğer hem temel sınıf hemde türetilen sınıfta aynı metot
oluşturulmuşsa alt sınıf nesneleri kendi sınıflarına ait
metodu kullanır.
Önceki örnekte hem Tasit sınıfı hemde Otomobil
sınıfı ciktiYaz() isimli metoda sahiptir. Her nesne
kandi sınıfına ait metodu kullanır.
Bir metot alt sınıfta tanımlanırken içeriği ve başlık
kısmındaki parametereler istenildiği gibi değiştirilebilir.
Bu yaklaşım, aynı isimle çok sayıda metot oluşturmaya
yarayan metot fazladan yüklemeden farklıdır.
13
Metot Tanımlarının Yeniden Yapılması



Eğer bir metodun alt sınıflarda değiştirilmesi
istenmiyorsa aşağıdaki gibi tanımlanmalıdır.
public final void metotAdi()
Türetilmiş sınıflardan temel sınıflarda private olan üyeye
erişim engellenmiştir.
Alt sınıfta oluşturulan yeni bir metot, temel
sınıfta private tanımlanmış olan bir üyeye
erişemez.
14
7
Konular







Giriş
Alt Sınıflar
Metot Tanımlarının Yeniden Yapılması
Alt Sınıflarla Programlama Yaklaşımları
Birden Fazla Seviyeli Kalıtım
Soyut Sınıflar ve Arayüzler
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
Alt Sınıflarla Programlama Yaklaşımları

Önceki örnekte super anahtar kelimesi kullanılmıştır.
public Otomobil(String marka, int plakaNumarasi)
{
super(marka);
plakaNo = plakaNumarasi;
}

super(marka) komutu Tasit sınıfında bulunan
public Tasit(String ilkIsim)
nesne kurucusunu çağırır. Eğer,
Tasit()ilkIsim;

şeklinde kullanılsaydı hatalı sonuç oluşacaktır.
super() komutu ilk komut olmalıdır.
16
8
Alt Sınıflarla Programlama Yaklaşımları

Bir alt sınıf içindeki bir metodun çağırılması için this
anahtar kelimesi kullanılmalıdır.
public Otomobil(String ilkIsim)
{
this(“Fiat”, 1234);
}

Bu durumda Otomobil sınıfındaki
public Otomobil(String marka, int plakaNumarasi)

metodu çağırılmış olur.
Bir alt sınıf içinde temel sınıfın metodu
super.ciktiYaz();
şeklinde çağırılabilir.
17
Alt Sınıflarla Programlama Yaklaşımları

Önceki örnekte çiktiYaz() metodu aşağıdaki gibi
yapılandırılabilir.
public ciktiYaz()
{
super.ciktiYaz();
System.out.println(“Plaka Numarası: ” + plakaNo);
}

Bu durumda önce Tasit sınıfındaki ciktiYaz()
metodu çalışacak ardından Otomobil sınıfındaki
işlemler yapılacaktır.
18
9
Konular







Giriş
Alt Sınıflar
Metot Tanımlarının Yeniden Yapılması
Alt Sınıflarla Programlama Yaklaşımları
Birden Fazla Seviyeli Kalıtım
Soyut Sınıflar ve Arayüzler
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
Birden Fazla Seviyeli Kalıtım


Otomobil sınıfından bir alt sınıfı olarak Sedan adlı bir
sınıf oluşturulmuş olsun.
Yeni oluşturulan Sedan alt sınıfı hem Otomobil
sınıfının hemde Tasit sınıfının metotlarını
kullanabilecektir.
20
10
Birden Fazla Seviyeli Kalıtım
Örnek - Sedan - devam
public class Sedan extends Otomobil
{
private int fiyat;
public Sedan()
{
super();
fiyat = 10000;
}
public Sedan(String marka, int plakaNo, int ilkFiyat)
{
super(Marka, plakaNo);
setFiyat(ilkFiyat);
}
21
Birden Fazla Seviyeli Kalıtım
Örnek - Sedan - devam
public void reset(String yeniMarka,int yeniPlakaNo,int
yeniFiyat)
{
reset(yeniMarka,yeniPlakaNo);
setFiyat(yeniFiyat);
}
public getFiyat()
{
return fiyat;
}
setFiyat(int yeniFiyat)
{
fiyat = yeniFiyat;
}
22
11
Birden Fazla Seviyeli Kalıtım
Örnek - Sedan - devam
public void ciktiYaz()
{
super.ciktiYaz();
System.out.println("otomobil fiyati " + fiyat);
}
public boolean equals(Sedan digerSedan)
{
return(super.equals(digerSedan)&&(this.fiyat ==
digerSedan.fiyat));
}
}
23
Birden Fazla Seviyeli Kalıtım


Aşağıdaki nesne kurucusu 3 değişken almaktadır.
Metot içerisinde, Otomobil ana sınıfına ait nesne
kurucusu iki parametreyle çağırılmaktadır.
public Sedan(String marka, int plakaNo, int ilkFiyat)
{
super(Marka, plakaNo);
setFiyat(ilkFiyat);
}

Sedan sınıfı içindeki reset() metodu 3 parametreye
sahiptir ve kendi içinden Otomobil sınıfı içindeki ik
parametreye sahip reset() metodunu çağırmaktadır.
public void reset(String yeniMarka,int yeniPlakaNo,int
yeniFiyat)
{
reset(yeniMarka,yeniPlakaNo);
setFiyat(yeniFiyat);
}
24
12
Birden Fazla Seviyeli Kalıtım
Örnek – KalitimDemo
public class KalitimDemo2
{
public static void main(String[] args)
{
Sedan c = new Sedan("Toyota", 1234, 10000);
c.ciktiYaz();
}
}
Çıktı:
Marka: Toyota
Plaka Numarası: 1234
Otomobil fiyati 10000
25
Konular







Giriş
Alt Sınıflar
Metot Tanımlarının Yeniden Yapılması
Alt Sınıflarla Programlama Yaklaşımları
Birden Fazla Seviyeli Kalıtım
Soyut Sınıflar ve Arayüzler
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
13
Soyut Sınıflar ve Arayüzler

Soyut sınıflar kendileri kullanılmak için değil sadece
kendisinden türetilecek alt sınıflarda kullanılmak üzere
tanımlanırlar.
public abstract class SınıfAdı

Arayüzler ise tüm sınıflar tarafından kullanılabilirler.
public interface Arayuz
{
public int test();
public void ciktiYaz();
}

Arayüz tanımında metot isimlerinden sonra ; kullanılır.
27
Soyut Sınıflar ve Arayüzler
Örnek - ArayuzSedan
public class ArayuzSedan extends Otomobil implements Arayuz
{
private int fiyat;
public ArayuzSedan()
{
super();
fiyat = 10000;
}
public ArayuzSedan(String Marka, int plakaNo, int ilkFiyat)
{
super(Marka, plakaNo);
setFiyat(ilkFiyat);
}
28
14
Soyut Sınıflar ve Arayüzler
Örnek - ArayuzSedan - devam
public int test()
{
System.out.println("Su anda arayuz icindeki test");
System.out.println("metodu yerine yazilan metot
calisiyor");
return (222);
}
public void reset(String yeniMarka, int yeniPlakaNo, int
yeniFiyat)
{
reset (yeniMarka,yeniPlakaNo);
setFiyat(yeniFiyat);
}
public void setFiyat(int yeniFiyat)
{
fiyat = yeniFiyat;
}
29
Soyut Sınıflar ve Arayüzler
Örnek - ArayuzSedan - devam
public int getFiyat()
{
return fiyat;
}
public void ciktiYaz()
{
super.ciktiYaz();
System.out.println("otomobil fiyati " + fiyat);
}
public boolean equals(arayuzSedan digerSedan)
{
return(super.equals(digerSedan)&&(this.fiyat
==digerSedan.fiyat));
}
}
30
15
Soyut Sınıflar ve Arayüzler
Örnek - ArayuzSedan - devam - Program
public class ArayuzDemo
{
public static void main(String [] args)
{
Arayuz c = new arayuzSedan(“Toyota”, 1234, 10000);
int a = c.test();
c.ciktiYaz();
}
}
Çıktı:
Su anda arayuz icindeki test
metodu yerine yazilan metot calisiyor
Marka: Toyota
Plaka Numarası: 1234
Otomobil fiyati 10000
31
Konular







Giriş
Alt Sınıflar
Metot Tanımlarının Yeniden Yapılması
Alt Sınıflarla Programlama Yaklaşımları
Birden Fazla Seviyeli Kalıtım
Soyut Sınıflar ve Arayüzler
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
16
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
Bir metodun aynı isimle farklı parametrelerle
çağırılmasına çok biçimlilik (polymorphism) denir.
Örnek

class Personel
{
public void calis();
{
System.out.println(“Bu is yerinde farkli insanlar
calisir”);
}
}
class Sekreter extends Pesonel
{
public void calis()
{
System.out.println(“Sekreter kadrolardan birisidir”);
}
}
33
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
Örnek - devam
class Ogretmen extends Pesonel
{
public void calis()
{
System.out.println(“Ayrica hocalar da vardir”);
}
}
public class CokBicimlilikDemo
{
public static void main(String [] args)
{
Personel kisi = new Personel();
Sekreter s = new Sekreter();
Ogretmen m = new Ogretmen();
isYap(kisi);
isYap(s);
isYap(m);
}
34
17
Dinamik Bağlama ve Çok Biçimlilik (Polymorphism)
Örnek - devam
public static void isYap(Personel kisi)
{
kisi.calis();
}
}
 Programda isYap() metodu farklı parametrelerle

kullanılabilmektedir.
Hangi parametrelerle çağırılırsa ilgili metot çağırılarak
işlem yapılmaktadır.
Çıktı:
Bu is yerinde farkli insanlar calisir
Sekreter kadrolardan birisidir
Ayrica hocalar da vardir
35
18
Download