İleri Programlama Dersi 6. Ünite Sorularla Öğrenelim

Java’da Soyut Sınıflar ve Arayüzler

Java Platformu

1- Java dilinde soyut sınıflar ne anlama gelmektedir?

Cevap: Soyut sınıf, girişbölümünde de bahsedildiği gibi temel olarak kendisi türünde bir nesne oluş- turulamayacak olan bir sınıftır. Nesneye yönelik programlamada sınıflar arasındaki kalıtım iliş- kileri bir hiyerarşi şeklinde ifade edilebilir.

2- Java dilinde bir metodun önünde abstract anahtar kelimesinin bulunması ne anlama gelmektedir?

Cevap: Bir metodun önünde abstract anahtar kelimesinin bulunması o metodun içeriğinin belirlenmesinin kendisinden kalıtım yoluyla türeyecek olan yeni sınıflara bırakıldığı anlamına gelmektedir. Böyle metotlar, soyut metot olarak adlandırılmaktadır.

3- Aşağıdaki örnekte kaç metod verilmiştir? /* Sekil.java */ public abstract class Sekil { double alan; public abstract void alanHesapla(); public double alanGoster() { }

Cevap: Soyut sınıf kullanımına temel bir örnek olarak Sekil isimli Java sınıfı verilmiştir. Sekil sınıfı tanımlanırken abstract anahtar kelimesinin kullanıldığını görmekteyiz. Bu sınıf, alanHesapla ve alanGoster isimli iki adet metoda sahiptir.

4- Aşağıda verilen örnekte tanımlanması gereken örnekler nelerdir? /* Daire.java */ public class Daire extends Sekil{ double yaricap; double piSayisi = 3.14; public void alanHesapla() { } alan = piSayisi * yaricap * yaricap; public Daire(double yaricapDegeri) { yaricap = yaricapDegeri; }} /* Dikdortgen.java */ public class Dikdortgen extends Sekil{ double uzunluk, genislik; public void alanHesapla() { } alan = uzunluk * genislik; { public Dikdortgen(double uzunlukDegeri, double genislikDegeri) uzunluk = uzunlukDegeri; } }

Cevap: Soruda, Sekil soyut sınıfından kalıtım yoluyla türetilen Daire ve Dikdörtgen sınıflarına ait Java kodları bulunmaktadır. Bu sınıflar içerisinde Sekil sınıfında yer alan soyut metotların içeriklerinin tanımlanması gerekmektedir. İlgili Java program kodları içerisinde bu metodun her iki sınıf için de farklı içeriklerle tanımlandığını görmekteyiz. Bir diğer metot olan alanGoster metodu ise kalıtım yoluyla Daire ve Dikdörtgen sınıflarına aktarılmaktadır. Dolayısıyla alanGoster metodunun herhangi bir yeni tanımlama yapılmadan bu sınıf türündeki nesneler tarafından çağrılabilmesi mümkün olacaktır.

5- Aşağıda verilen örnekte hangi metodlar kullanılmıştır?

Cevap: SekilUygulamasi sınıfı içerisinde Daire ve Dikdörtgen türündeki nesneler oluşturulmuşve bu nesnelere ait metotlar çağrılmıştır. Sonuç olarak iki nesne için de alanHesapla ve alanGoster metotlarının çalıştırıldığını görmekteyiz. Bu metotlardan birisi soyut sınıf olan Sekil sınıfı içerisinde, diğeri de bu sınıftan kalıtım yoluyla türetilmişolan Daire ve Dikdörtgen sınıfları içerisinde tanımlanmıştır.

6- Java kodlama da arayüz kavramı ne anlama gelmektedir?

Cevap: Arayüz, bir sınıfta olması gereken metotların tanımlandığı bir yapıdır fakat kesinlikle bir sınıf değildir.

7- Java kodlama da Arayüz'ün amacı nedir?

Cevap: Arayüzlerin amacı daha çok herhangi bir işlemin gerçekleşmesi için hangi metotların var olması gerektiğini belirlemektir. Bu metotların içerikleri ise arayüzleri uygulayan sınıflar tarafından oluşturulur.

8- Arayüzler Java kodlama dilinde hangi anahtar kelime ile tanımlanır?

Cevap: Arayüzler, Java programlama dilinde interface anahtar kelimesi ile tanımlanır.

9- /* Bilgilendir.java */ public interface Bilgilendir { public void turGoster ();} Verilen arayüzde alınamayan veriler nelerdir?

Cevap: Bilgilendir ismindeki arayüz içerisinde turGoster isminde bir metot tanımlanmıştır. Metodun içeriği belirli olmamakla birlikte herhangi bir değer döndürmeyeceği ve parametre almadığı görülmektedir.

10- Aşağıda verlen arayüz örneğinde hangi metodlar tanımlanmıştır? /* MuzikAletiUygulamasi.java */ public class MuzikAletiUygulamasi { public static void main(String[] args) { Gitar gitar = new Gitar(); Keman keman = new Keman(); gitar.sesCikar(); keman.sesCikar(); } }

Cevap: Bu sınıfların tamamının kullanımını bir uygulama içerisinde görebilmek için MuzikAletiUygulamasi isimli sınıfını soruda görmekteyiz. MuzikAletiUygulamasi sınıfı içerisinde Gitar ve Keman türündeki nesneler oluşturulmuşve bu nesnelere ait sesCikar metodu çağrılmıştır. Bu metot, MuzikAleti sınıfı içerisinde bir soyut metot olarak tanımlanmıştır. Bu sebepten dolayı, Gitar ve Keman sınıfları içerisinde bu soyut metodun içeriğinin tanımlandığını görmekteyiz.

11- Aşağıda verlen arayüz örneğinde hangi metodlar tanımlanmıştır? /* Kus.java */ public abstract class Kus { } public abstract void turGoster(); /* Karga.java */ public class Karga extends Kus { public void turGoster() { } } System.out.println(“Tür = Karga”); /* Serce.java */ public class Serce extends Kus { public void turGoster() { System.out.println(“Tür = Serçe”);  } }

Cevap: Bu sınıfların tamamının kullanımını bir uygulama içerisinde görebilmek için ise aşağıda KusUygulamasi isimli bir sınıf bulunmaktadır. KusUygulamasi sınıfı içerisinde Karga ve Serce türündeki nesneler oluşturulmuşve bu nesnelere ait turGoster metodu çağrılmıştır. Bu metot, Kus sınıfı içerisinde bir soyut metot olarak tanımlanmıştır. Bu sebepten dolayı, Karga ve Serce sınıfları içerisinde bu soyut metodun içeriğinin tanımlandığını görmekteyiz. Ayrıca, KusUygulamasi sınıfı içerisindeki son iki satırın yorum satırı şeklinde olduğunu görmekteyiz. Bu satırlar soyut sınıf olan Kus sınıfı türünde bir nesne oluşturulamaya- cağını göstermek amaçlıdır. Eğer bu iki satır, yorum satırı olmaktan çıkarılıp aktif hâle getirilirse derleyici hatası ile karşılaşılacak ve program çalıştırılamayacaktır.

12- Aşağıda verlen arayüz örneğinde hangi metodlar tanımlanmıştır? /* Kus.java */ public abstract class Kus { } public abstract void turGoster(); /* Karga.java */ public class Karga extends Kus { public void turGoster() { } } System.out.println(“Tür = Karga”); /* Serce.java */ public class Serce extends Kus { public void turGoster() { System.out.println(“Tür = Serçe”);  } }

Cevap: Bu sınıfların tamamının kullanımını bir uygulama içerisinde görebilmek için ise aşağıda KusUygulamasi isimli bir sınıf bulunmaktadır. KusUygulamasi sınıfı içerisinde Karga ve Serce türündeki nesneler oluşturulmuşve bu nesnelere ait turGoster metodu çağrılmıştır. Bu metot, Kus sınıfı içerisinde bir soyut metot olarak tanımlanmıştır. Bu sebepten dolayı, Karga ve Serce sınıfları içerisinde bu soyut metodun içeriğinin tanımlandığını görmekteyiz. Ayrıca, KusUygulamasi sınıfı içerisindeki son iki satırın yorum satırı şeklinde olduğunu görmekteyiz. Bu satırlar soyut sınıf olan Kus sınıfı türünde bir nesne oluşturulamaya- cağını göstermek amaçlıdır. Eğer bu iki satır, yorum satırı olmaktan çıkarılıp aktif hâle getirilirse derleyici hatası ile karşılaşılacak ve program çalıştırılamayacaktır.

13- Aşağıda verilen arayüzde Javakodları hangi amaçla kullanılmıştır? /* Insan.java */ public class Insan implements Comparable { private String isim; private int yas; public Insan(String isim, int yas) { this.isim = isim; } this.yas = yas; public int yasGetir() { } return this.yas; public String isimGetir() { } return this.isim; public int compareTo(Object deger) { int sonuc = 0; Insan insan2 = (Insan) deger; if(this.yas == insan2.yas) sonuc = 0; else if(this.yas > insan2.yas) sonuc = 1; else if(this.yas < insan2.yas) sonuc = -1; return sonuc; } }

Cevap: Arayüzler, programcılar tarafından gerekli durumlarda oluşturulabilir. Bununla birlikte, Java standart kütüphanesi içerisinde de kullanılabilir hazır arayüzler mevcuttur. Soru örneğinde kodları verilen Insan sınıfı Comparable adlı Java kütüphanesi arayüzünü uygulayan bir sınıftır. Bu sınıfın içerisinde, compareTo isimli metodun içeriğinin tanımlandığını görmekteyiz. Bu metot, Comparable arayüzü içerisinde tanımlı olan ve int türünde değer döndürmesi beklenen bir metottur. Karşılaştırılan iki nesnenin birbirinden büyük veya küçük olması durumunda bu metodun 1 veya -1 döndürmesi beklenir. Eşitlik durumunda ise 0 değerini döndürmesi beklenmektedir. Insan sınıfının kullanımını bir uygulama içerisinde görebilmek için ise Java kodlarını içeren HazirArayuzUygulamasi1 isimli sınıf kullanılmaktadır. HazirArayuzUygulamasi1 sınıfı içerisinde Insan türünde nesneler oluşturulmuştur. Daha sonra, bu nesnelere ait compareTo metodu kullanılarak insanların birbiriyle yaşbazında kıyaslamaları yapılmıştır.

14- Aşağıda verilen arayüzde Javan kodları hangi amaçla kullanılmıştır? /* Sirket.java */ public class Sirket implements Comparable { private int calisanSayisi; private String isim; public Sirket (String isim, int calisanSayisi) { this.isim = isim; } this.calisanSayisi = calisanSayisi; public int calisanSayisiGetir() { } return this.calisanSayisi; public String isimGetir() { } return this.isim; public int compareTo(Object deger) { int sonuc = 0; Sirket sirket2 = (Sirket) deger; if(this.calisanSayisiGetir() == sirket2.calisanSayisiGetir()) sonuc = 0; else if(this.calisanSayisiGetir() > sirket2.calisanSayisiGetir()) sonuc = 1; else if(this.calisanSayisiGetir() < sirket2.calisanSayisiGetir()) sonuc = -1; return sonuc; }

Cevap: Program kodları verilen Sirket sınıfı, bir önceki örnekteki gibi Comparable adlı Java kütüphanesi arayüzünü uygu-layan bir sınıftır. Bu sınıfın içerisinde de, compareTo isimli metodun içeriğinin tanımlandığını görmekteyiz. Sirket sınıfının kullanımını bir uygulama içerisinde görebilmek için ise aşağıdaki Java kodlarını içeren HazirArayuzUygulamasi2 isimli sınıf kullanılmaktadır. HazirArayuzUygulamasi2 sınıfı içerisinde Sirket türündeki nesneler oluşturulmuştur. Daha sonra, bu nesnelere ait compareTo metodu kullanılarak şirketlerin büyüklük- lerinin birbiriyle kıyaslamaları yapılmıştır. Kıyaslama ölçütü olarak şirketlerin çalışan sayıları kullanılmaktadır.

15- Aşağıda verilen arayüzde Javan kodları hangi amaçla kullanılmıştır? /* OzellesmisMetin.java */ import java.util.Iterator; public class OzellesmisMetin implements Iterable, Iterator { private String metin; private int sayac = 0; public OzellesmisMetin (String s) { } metin = s; public boolean hasNext() { if (sayac < metin.length()){ return true; else {} } } return false; public Character next() { sayac++; } return metin.charAt(sayac - 1); public Iterator iterator() { } } return this; /* HazirArayuzUygulamasi3.java */ public class HazirArayuzUygulamasi3 { public static void main(String[] args) { OzellesmisMetin x = new OzellesmisMetin (“Bu bir deneme”); for (Object ch : x){ } } }

Cevap: Kodları verilen OzellesmisMetin sınıfı Iterable ve Iterator adlı Java kütüphanesi arayüzlerini uygulayan bir sınıftır. Bu sınıfın içerisinde, bu iki arayüze ait hasNext, next ve iterator isimli metotların içeriklerinin tanımlandığı görülmektedir. hasNext metodu, metnin içerisindeki karakterler üzerinde iler- lenirken metnin sonuna gelinip gelinmediğini algılamak için kullanılmaktadır. Metnin sonuna gelinme- diği sürece true değeri döndürecektir. Sonuna gelindiğinde ise false değerini döndürecektir. next metodu, metnin içerisindeki bir sonraki karaktere erişmek için kullanılmaktadır. iterator metodunun, bir Iterator arayüzü döndürmesi beklenmektedir. Bu uygulamanın amacı, bir döngü kullanılması vasıtasıyla içeriğin- deki karakterlerin sırasıyla ayrı ayrı görüntülenebildiği bir metin sınıfı oluşturmaktır. Arayüzler, bu işlevi sağlayan bir metin sınıfının oluşturulması için kullanılmıştır. OzellesmisMetin sınıfının kullanımını bir uygulama içerisinde görebilmek için ise aşağıdaki Java kodlarını içeren HazirArayuzUygulamasi3 isim- li sınıf kullanılmaktadır. HazirArayuzUygulamasi3 sınıfı içerisinde OzellesmisMetin türündeki nesneler oluşturulmaktadır.

16- Aşağıda verilen arayüzde Javan kodları hangi amaçla kullanılmıştır? /* Daire.java */ public class Daire implements SekilHakkindaBilgi { double yaricap, sonuc; double piSayisi = 3.14; public double cevreGoster() { sonuc = 2 * piSayisi * yaricap; } return sonuc; public double alanGoster() { sonuc = piSayisi * yaricap * yaricap; } return sonuc; public Daire(double yaricapDegeri) { } } yaricap = yaricapDegeri; /* Dikdortgen.java */ public class Dikdortgen implements SekilHakkindaBilgi{ double uzunluk, genislik, sonuc; public double cevreGoster() { sonuc = 2 * (uzunluk + genislik); } return sonuc; public double alanGoster() { sonuc = uzunluk * genislik; } return sonuc; public Dikdortgen(double uzunlukDegeri, double genislikDegeri) { uzunluk = uzunlukDegeri; } } genislik = genislikDegeri; /* SekilUygulamasi.java */ public class SekilUygulamasi { public static void main(String[] args) { Daire daire = new Daire(4.0); Dikdortgen dortgen = new Dikdortgen(3.0, 4.0); System.out.println(“Dairenin çevresi = “+daire.cevreGoster()); System.out.println(“Dairenin alanı = “+daire.alanGoster()); System.out.println(“Dikdörtgenin çevresi = “+dortgen.cevreGoster()); System.out.println(“Dikdörtgenin alanı = “+dortgen.alanGoster()); } }

Cevap: Örnekte kodları verilen Daire ve Dikdortgen isimli sınıflar SekilHakkindaBilgi arayüzünü uygulayan sınıflardır. Bu sınıfların içerisinde, ilgili metotların içeriklerinin tanımlandığını görmekteyiz. Daire ve dik- dörtgenin çevre ve alan hesapları farklı şekillerde yapıldığı için bu metotların içerikleri farklıdır. Bu sınıf- ların tamamının kullanımını bir uygulama içerisinde görebilmek için ise aşağıdaki Java kodlarını içeren SekilUygulamasi isimli sınıf kullanılmaktadır. SekilUygulamasi sınıfı içerisinde Daire ve Dikdortgen türün- deki nesneler oluşturulmuştur. Daha sonra bu nesnelere ait cevreGoster ve alanGoster metotları çağrılmıştır.

17- hasNext metodu hangi amaçla kullanılmakadır?

Cevap: hasNext metodu, metnin içerisindeki karakterler üzerinde ilerlenirken metnin sonuna gelinip gelinmediğini algılamak için kullanılmaktadır. Metnin sonuna gelinmediği sürece true değeri döndürecektir. Sonuna gelindiğinde ise false değerini döndürecektir.

18- iterator hangi amaçla kullanılmakadır?

Cevap: iterator metodunun, bir Iterator arayüzü döndürmesi beklenmektedir. Bu uygulamanın amacı, bir döngü kullanılması vasıtasıyla içeriğindeki karakterlerin sırasıyla ayrı ayrı görüntülenebildiği bir metin sınıfı oluşturmaktır.

19- Aşağıda verilen kodlama da hangi metodlar bulunmaktadır? /* SekilHakkindaBilgi.java */ public interface SekilHakkindaBilgi { public double cevreGoster(); public double alanGoster(); }

Cevap: Soruda SekilHakkindaBilgi isminde bir arayüz ve bu arayüzü uygulayan sınıflar yer almaktadır. SekilHakkindaBilgi arayüzü, çevre ve alan değerle- rinin gösterilmesi amacı taşıyan iki adet metoda sahiptir. Bu arayüzü uygulayan herhangi bir sınıfın çevre ve alan değerlerini hesaplayarak görüntülemesi gerekmektedir. Çevre ve alan değerlerinin hesaplanma şekli her bir geometrik şekil için farklı olacağından bu metotların içeriklerinin detayları arayüzü uygulayacak sınıflara bırakılmıştır.

20- next metodu hangi amaçla kullanılmakadır?

Cevap: next metodu, metnin içerisindeki bir sonraki karaktere erişmek için kullanılmaktadır.

Sıra-(Soruid) 1-(909321) 2-(909333) 3-(909343) 4-(909349) 5-(909362) 6-(909367) 7-(909371) 8-(909380) 9-(909386) 10-(909409) 11-(909399) 12-(909560) 13-(909502) 14-(909523) 15-(909531) 16-(909539) 17-(909475) 18-(909493) 19-(909469) 20-(909483)