JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 • Java’da Kalıtım Kavramı • Java’da Çok Biçimlilik Kavramı – Fonksiyonların Çok Biçimliliği – Yapıcı Fonksiyonun Çok Biçimliliği Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da Kalıtım Kavramı JAVA’DA KALITIM KAVRAMI • • 4 • • • Kalıtım; aynı özellikleri içerisinde barındıran fakat, farklı özellikleri ile ana sınıftan ayrılan anlamına gelmektedir. Bir sınıf oluşturulur, bu sınıf bir varlığın ortak özelliklerini içerir, bu sınıftan başka sınıflar kalıtım yoluyla türetilir ve yeni sınırlar hem ana sınıfın özelliklerine sahiptir, hem de kendine has özelliklere sahiptir. Kalıtım kullanımı, bir kod parçasının tekrar tekrar yazılmasını engellemektedir. Sınıflar arasında gerçek hayata benzer bağlantılar oluşturur. Bir sınıf kullanılarak kalıtım yoluyla birden fazla sınıf türetilebilir, fakat birden türetilen bir sınıf birden fazla sınıftan türeyemez. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • • Kalıtım yoluyla yeni sınıflar türetmek için extends kelimesi kullanılmaktadır. Java’da kalıtım yoluyla yeni sınıflar aşağıdaki gibi türetilebilir; ANA SINIF 5 public class AnaSinif{ ……. } TÜRETİLEN BİRİNCİ SINIF public class Sinif1 extends AnaSinif{ ……. } TÜRETİLEN İKİNCİ SINIF public class Sinif2 extends AnaSinif{ ……. } Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 1; aşağıda çizelge olarak verilmiş olan ana sınıf ve kalıtım ile oluşturulan diğer sınıfları Java kodları ile oluşturunuz. 6 Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 1 (Devam); çizelgede verilen Degiskenler sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. 7 Sınıf-Kalıtım çizelgesinde gösterildiği gibi sayi1 ve sayi2 isimli tamsayı değişken oluşturulmuştur. Bu değişkenlerin konsola yazdırılması için de gosterSayi1 ve gosterSayi2 isimli iki fonksiyon oluşturulmuştur. Değişkenler ana sınıfının Java dilinde tanımı bu şekildedir. Diğer sınıflar bu sınıftan türetilecektir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 1 (Devam); çizelgede verilen Toplama sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. 8 Degiskenler sınıfından (extends kullanılarak) türetilen Toplama sınıfı, Degiskenler sınıfının sayi1 ve sayi2 değişkenlerini kullanabildiği gibi kendine ait toplam isimli tamsayı değişkenine de sahiptir. Topla fonsksiyonu, değişkenler sınıfının sayi1 ve sayi2 değişkenlerini toplamıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 1 (Devam); çizelgede verilen Cikarma sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. 9 Degiskenler sınıfından (extends kullanılarak) türetilen Cikarma sınıfı, Degiskenler sınıfının sayi1 ve sayi2 değişkenlerini kullanabildiği gibi kendine ait fark isimli tamsayı değişkenine de sahiptir. Cikar fonsksiyonu, değişkenler sınıfının sayi1 ve sayi2 değişkenlerini birbirinden çıkarmıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 1 (Devam); çizelgede verilen sınıfların denenmesi için kullanılan DortIslem sınıfının kodları aşağıdaki gibi oluşturulmuştur. DortIslem sınıfın içerisinde main sınıfı bulunmaktadır ve oluşturulan türemiş sınıfları denemek için kullanılmştır. 10 Toplama türemiş sınıfından t1 isimli bir nesne oluşturulmuştur. Bu nesne, hem değişkenler sınıfının sayi1 ve sayi2 değişkenlerine erişebilmektedir hem de kendi fonksiyonlarını kullanabilmektedir. Cikarma türemiş sınıfından c1 isimli bir nesne oluşturulmuştur. Bu nesne, hem değişkenler sınıfının sayi1 ve sayi2 değişkenlerine erişebilmektedir hem de kendi fonksiyonlarını kullanabilmektedir. Toplama ve Çıkarma işlemlerinin konsoldaki sonuçları Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 2; aşağıda çizelge olarak verilmiş olan ana sınıf ve kalıtım ile oluşturulan diğer sınıfları Java kodları ile oluşturunuz. 11 Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 2 (Devam); çizelgede verilen Insan sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. 12 Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • 13 Örnek 2 (Devam); çizelgede verilen Ogrenci sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. super kelimesi üst sınıf yani Insan sınıfına erişim için kullanılmaktadır. Bu kodlamada Ogrenci constructor’ı içinde kullanılan süper, Insan sınıfının constructor’ına parametre gönderilmek için kullanılmıştır. GsoterNo fonksiyonu içerisinde kullanılan süper üst sınıfın fonksiyonuna erişmek için kullanılmıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 2 (Devam); çizelgede verilen Ogretmen sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. 14 super kelimesi üst sınıf yani Insan sınıfına erişim için kullanılmaktadır. Bu kodlamada Ogretmen constructor’ı içinde kullanılan süper, Insan sınıfının constructor’ına parametre gönderilmek için kullanılmıştır. GosterSicilNo fonksiyonu içerisinde kullanılan süper üst sınıfın fonksiyonuna erişmek için kullanılmıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 2 (Devam); çizelgede verilen sınıfların denenmesi için kullanılan KalitimOrnegi sınıfının kodları aşağıdaki gibi oluşturulmuştur. 15 Kalıtım sınıfında main fonksiyonu bulunduğu için çalıştırılabilir bir sınıftır ve yandaki sonuç elde edilmiştir. Türetilen Ogrenci ve Ogretmen sınıfları, türetildiği Insan sınıfında tanımlanan Isim değişkenine erişim içeriğini değiştirebilmektedir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 3; aşağıda çizelge olarak verilmiş olan ana sınıf ve kalıtım ile oluşturulan sınıfın Java kodları ile oluşturunuz. 16 Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 3 (Devam); çizelgede verilen Baba sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. 17 Baba sınıfında private olarak Göz Rengi ve Boy Uzunluğu olmak üzere iki değişken tanımlanmıştır. Bu değişkenler, private olarak tanımlandığı için türetilen bir sınıfta kullanılamazlar. Bu nedenle; bu değişkenlerin değiştirilmesi ve alınabilmesi için ekstradan fonksiyonlar yazılmıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Örnek 3 (Devam); çizelgede verilen ve Baba sınıfından türeyen Ogul sınıfının Java kodları aşağıdaki gibi oluşturulmuştur. 18 Baba sınıfından türeyen Ogul sınıfının kodları verilmiştir. Bu sınıf içerisinde türetilen sınıfın denenmesi için main fonksiyonu da yazılmıştır. Baba sınıfın private olarak tanımlanmayan değişken ve fonksiyonlarını Ogul sınıf kullanabilmektedir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KALITIM KAVRAMI • Kalıtım ile İlgili Önemli Bilgiler; 19 – Kalıtım yoluyla türetilmiş bir sınıf içerisinden, doğrudan doğruya üst sınıfın yapıcı fonksiyonuna erişebilmek için super kelimesi kullanılır. Super kelimesi ile üst sınıfın constructor’ına parametre gönderilebilir. – Eğer oluşturulan bir sınıfın başka sınıflar tarafından miras alınmasını, yani oluşturulan sınıftan başka sınıflar türetilmesini engellemek istiyorsak, temel sınıf oluşturulurken final kelimesi kullanılır. public class final AnaSinif{ ………. } – Temel sınıfta (Ana sınıf), private olarak tanımlanan değişkenler, türetilmiş sınıflarda kullanılamazlar. Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da Çok Biçimlilik Kavramı JAVA’DA ÇOK BİÇİMLİLİK KAVRAMI • • • 21 • • • Bir fonksiyona farklı durumlarda, farklı parametreler ile farklı işler yaptırmaya çok biçimlilik denir. Çok biçimlilik, fonksiyon ismi karmaşasını engellemek için kullanılır. Aynı isimli, farklı işler yapan fonksiyonlar çok biçimlilik kullanılarak oluşturulabilir. Bir sınıf içerisindeki sıradan fonksiyonlara çok biçimlilik uygulanabildiği gibi, yapıcı fonksiyonlara (constructor) da çok biçimlilik uygulanabilmektedir. Sıradan fonksiyonlara çok biçimlilik uygulandığında fonksiyon aşırı yükleme (function overload) denilmektedir. Yapıcı fonksiyonlara çok biçimlilik uygulandığında yapıcı fonksiyonun aşırı yüklenmesi (constructor overload) ismini almaktadır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA ÇOK BİÇİMLİLİK KAVRAMI • Fonksiyonun Çok Biçimliliği (Aşırı Yüklenmesi): – Aynı ismi kullanarak fonksiyonlara başka işler yaptırılmasıdır. – Fonksiyona çok biçimlilik uygulamak için farklı sayıda parametreler kullanılabilir veya parametrelerin veri tipleri farklı olabilir. – Fonksiyonun aşırı yüklenmesi aşağıdaki gibi yapılmaktadır; 22 public double toplama(double a, double b){ return a+b; } public int toplama(int a, int b){ return a+b; } Bu iki fonksiyonun ismi de toplama’dır. Fakat aldığı parametreler birinde double diğerinde ise; int şeklindedir. Bu fonksiyonlara double değer gönderildiğinde sonuç double tipinde olacaktır; int değer gönderildiğinde sonuç int tipinde olacaktır. public int toplama(int a, int b){ return a+b; } public int toplama(int a, int b,int c){ return a+b+c; } Bu iki fonksiyonda ise; parametre tipleri aynıdır. Fakat parametre sayıları farklıdır. Bu toplama fonksiyonuna 2 tane değer gönderildiğinde 2 sayıyı toplamaktadır, 3 tane değer gönderildiğinde ise; 3 sayıyı toplamaktadır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA ÇOK BİÇİMLİLİK KAVRAMI • Fonksiyonun Çok Biçimliliği (Aşırı Yüklenmesi): – Örnek; toplama fonksiyonlarının çok biçimliliğinin Java ile kodlanması aşağıdaki gibidir; 23 Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA ÇOK BİÇİMLİLİK KAVRAMI • Yapıcı Fonksiyonun Çok Biçimliliği (Constructor Overload): – Fonksiyonlara çok biçimlilik uygulandığı gibi sınıfların yapıcı fonksiyonlarına da çok biçimlilik uygulanabilmektedir. – Yapıcı fonksiyonların aşırı yüklenmesi ile sıradan fonksiyonların aşırı yüklenmesi arasında büyük fark yoktur. – Yapıcı fonksiyonun aşırı yüklenmesi aşağıdaki gibi yapılmaktadır; 24 public class Degiskenler{ int sayi1; int sayi2; public Degiskenler(){ sayi1=0; sayi2=0; } public Degiskenler(int a, int b){ sayi1=a; sayi2=b; } } Degiskenler isimli sınıfta iki tane tamsayılı değişken tanımlanmıştır. Değişkenler sınıfının yapıcı fonksiyonu (kırmızı ile gösterilen) ilk tanımlamada parametresiz olarak tanımlanmıştır ve böylece sayi1 ve sayi2 değişkenlerinin 0 değerini alması sağlanmıştır. İkinci tanımlamasında ise; içerisine parametre atılmış ve sayi1 ve sayi2 değişkenlerinin bu parametreleri alması sağlanmıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA ÇOK BİÇİMLİLİK KAVRAMI • Yapıcı Fonksiyonun Çok Biçimliliği (Constructor Overload): – Örnek; Degiskenler sınıfının yapıcı fonksiyonunun çok biçimliliğinin Java ile kodlanması aşağıdaki gibidir; Yapıcı fonksiyonun aşırı yüklenmesi nesne tanımlanırken kullanılmaktadır. İki tane nesne tanımlanmıştır. d1 nesnesinde nesne oluşturulurken herhangi değer gönderilmemiştir. Böylelikle d1’in sayi1 ve sayi2 değişkenleri 0 olmuştur. d2 oluşturulurken 3 ve 6 değerleri gönderilmiştir. Böylelikle d2’nin sayi1 ve sayi2 değerleri 3 ve 6 olmuştur. 25 Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA ÇOK BİÇİMLİLİK KAVRAMI • 26 Örnek: nesne oluşturulurken parametre olarak isim yazıldığında konsola «Merhaba isim» yazacak, hiçbir parametre gönderilmediğinde sadece «Merhaba» yazacak Java kodu aşağıdaki gibidir. Sınıf tanımlanırken ilk constructor parametre almamaktadır. Parametre almayan constructor ile nesne oluşturulduğunda konsola sadece Merhaba yazmaktadır. İkinci constructor String tipinde isim parametresi ile oluşturulmuştur. İkinci constructor kullanarak nesne oluşturulursa konsola Merhaba isim şeklinde yazılır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi GENEL BAKIŞ • 27 • • • Java’da kalıtım yoluyla bir sınıftan başka sınıflar türetilebilir. Kalıtım yoluyla yeni sınıfların türetilmesi ile, aynı kodların sürekli tekrar tekrar yazılmasının önüne geçilir. Kalıtım tanımlanan ana sınıfın istenen özelliklerinin türetilmiş sınıflara geçmesini sağlar. Java’da çok biçimlilik yardımıyla fonksiyon isim karmaşasının önüne geçilmiş olunur. Aynı isimli fonksiyonlara başka başka işler yaptırılabilir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi Ders Bitti. Dinlediğiniz için teşekkürler… •Uzaktan Eğitim Uygulama ve Araştırma Merkezi