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 Giriş n Alt Sınıflar n Metot Tanımlarının Yeniden Yapılması n Alt Sınıflarla Programlama Yaklaşımları n Birden Fazla Seviyeli Kalıtım n Soyut Sınıflar ve Arayüzler n Dinamik Bağlama ve Çok Biçimlilik (Polymorphism) n 1 Giriş n n n n 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ş n 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ş n 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ş n Alt Sınıflar n Metot Tanımlarının Yeniden Yapılması n Alt Sınıflarla Programlama Yaklaşımları n Birden Fazla Seviyeli Kalıtım n Soyut Sınıflar ve Arayüzler n Dinamik Bağlama ve Çok Biçimlilik (Polymorphism) n 3 Alt Sınıflar n 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 n 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 n 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 n Otomobil sınıfı içindeki public class Otomobil extends Tasit n 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 n 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ş n Alt Sınıflar n Metot Tanımlarının Yeniden Yapılması n Alt Sınıflarla Programlama Yaklaşımları n Birden Fazla Seviyeli Kalıtım n Soyut Sınıflar ve Arayüzler n Dinamik Bağlama ve Çok Biçimlilik (Polymorphism) n 6 Metot Tanımlarının Yeniden Yapılması n n n n 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ı n n n 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ş n Alt Sınıflar n Metot Tanımlarının Yeniden Yapılması n Alt Sınıflarla Programlama Yaklaşımları n Birden Fazla Seviyeli Kalıtım n Soyut Sınıflar ve Arayüzler n Dinamik Bağlama ve Çok Biçimlilik (Polymorphism) n Alt Sınıflarla Programlama Yaklaşımları n Önceki örnekte super anahtar kelimesi kullanılmıştır. public Otomobil(String marka, int plakaNumarasi) { super(marka); plakaNo = plakaNumarasi; } n super(marka) komutu Tasit sınıfında bulunan public Tasit(String ilkIsim) nesne kurucusunu çağırır. Eğer, Tasit()ilkIsim; n şeklinde kullanılsaydı hatalı sonuç oluşacaktır. super() komutu ilk komut olmalıdır. 16 8 Alt Sınıflarla Programlama Yaklaşımları n 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); } n Bu durumda Otomobil sınıfındaki public Otomobil(String marka, int plakaNumarasi) n 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ı n Önceki örnekte çiktiYaz() metodu aşağıdaki gibi yapılandırılabilir. public ciktiYaz() { super.ciktiYaz(); System.out.println(“Plaka Numarası: ” + plakaNo); } n 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ş n Alt Sınıflar n Metot Tanımlarının Yeniden Yapılması n Alt Sınıflarla Programlama Yaklaşımları n Birden Fazla Seviyeli Kalıtım n Soyut Sınıflar ve Arayüzler n Dinamik Bağlama ve Çok Biçimlilik (Polymorphism) n Birden Fazla Seviyeli Kalıtım n n 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 n n 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); } n 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ş n Alt Sınıflar n Metot Tanımlarının Yeniden Yapılması n Alt Sınıflarla Programlama Yaklaşımları n Birden Fazla Seviyeli Kalıtım n Soyut Sınıflar ve Arayüzler n Dinamik Bağlama ve Çok Biçimlilik (Polymorphism) n 13 Soyut Sınıflar ve Arayüzler n 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ı n Arayüzler ise tüm sınıflar tarafından kullanılabilirler. public interface Arayuz { public int test(); public void ciktiYaz(); } n 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ş n Alt Sınıflar n Metot Tanımlarının Yeniden Yapılması n Alt Sınıflarla Programlama Yaklaşımları n Birden Fazla Seviyeli Kalıtım n Soyut Sınıflar ve Arayüzler n Dinamik Bağlama ve Çok Biçimlilik (Polymorphism) n 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 n 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