Arayüzlere Giriş
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 34 / 87.
Soyut sınıfların, alt sınıfların uyması gereken sözleşmeleri nasıl tanımladığını gördünüz. Peki ya bir sınıfın birden fazla sözleşmeye uymasını isterseniz? Java, bir sınıfın birden fazla sınıfı genişletmesine izin vermez, ancak bu sorunu arayüzler ile çözer.
Bir arayüz (interface), bir sınıfın bunu nasıl yapacağını belirtmeden neler yapabileceğini tanımlayan bir sözleşmedir. Soyut sınıfların aksine, arayüzler (varsayılan olarak) herhangi bir uygulama içermeden yalnızca metot imzalarını içerir:
public interface Drawable {
void draw();
}
public interface Resizable {
void resize(int width, int height);
}Bir arayüzü (interface) bir söz olarak düşünün. Bir sınıf bir arayüzü uyguladığında (implements), o arayüzde bildirilen tüm metotlar için uygulama sağlamayı vaat eder. Arayüz yeteneği tanımlar ve sınıf ise davranışı sağlar.
Arayüzler, class yerine interface anahtar kelimesi kullanılarak bildirilir. Bir arayüzdeki tüm metotlar örtük olarak public ve abstract'tır, bu nedenle bu anahtar kelimeleri yazmanıza gerek yoktur:
public interface Playable {
void play(); // örtük olarak public abstract
void pause();
void stop();
}Arayüzler ayrıca, örtük olarak public static final olan sabitler de bildirebilirler:
public interface GameConstants {
int MAX_PLAYERS = 4; // örtük olarak public static final
}Bir sonraki derste, sınıfların implements anahtar kelimesini kullanarak arayüzleri nasıl uyguladığını öğreneceksiniz.
Görev
KolayFarklı cihazların neler yapabileceğini tanımlayan arayüzler (interfaces) oluşturarak bir cihaz kontrol sistemi kuralım. Bu meydan okuma, yeteneklerin nasıl çalıştığını belirtmeden onları tanımlayan sözleşmeler olan arayüzleri oluşturmaya odaklanmaktadır.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
Switchable.java: Bir cihazın açılıp kapanabilir (switchable) olmasının ne anlama geldiğini tanımlayan bir arayüz oluşturun. Herhangi bir açılıp kapanabilir cihaz, açılabilmeli ve kapanabilmelidir. İki metot bildirin:turnOn()veturnOff(). Unutmayın, arayüz metotları örtük olarak public ve abstract'tır, bu nedenle sadece metot imzalarına ihtiyacınız vardır.Adjustable.java: Bir cihazın ayarlanabilir (adjustable) olmasının ne anlama geldiğini tanımlayan başka bir arayüz oluşturun. Ayarlanabilir bir cihaz, seviyesini ayarlayabilmelidir.setLevel(int level)adında bir metot bildirin. Ayrıca100değerine sahip birMAX_LEVELsabiti ekleyin; arayüzlerdeki sabitlerin örtük olarakpublic static finalolduğunu unutmayın.Main.java: Arayüzleriniz hakkında bilgi yazdırarak bunların düzgün tanımlandığını gösterin. Bir girdi alacaksınız: bir seviye değeri (int). Aşağıdaki üç satırı yazdırın:"Switchable methods: turnOn, turnOff""Adjustable methods: setLevel""Max level constant: "+Adjustable.MAX_LEVEL(sabite Adjustable arayüzünden erişin)
"Setting level to: "+level
Bir girdi alacaksınız: bir seviye değeri (int).
Bu meydan okuma tamamen yetenekleri tanımlayan taslaklar olan arayüzleri tanımlamaya odaklanmaktadır. Bir sonraki derste, sınıfların gerçek davranışı sağlamak için bu arayüzleri nasıl uyguladığını (implement) öğreneceksiniz!
Kopya kağıdı
Bir arayüz (interface), bir sınıfın ne yapabileceğini, bunu nasıl yapacağını belirtmeden tanımlayan bir sözleşmedir. Arayüzler, uygulama (implementation) içermeyen yalnızca metot imzalarını barındırır.
Arayüzler, interface anahtar kelimesi kullanılarak bildirilir:
public interface Drawable {
void draw();
}Bir arayüzdeki tüm metotlar örtük olarak public ve abstract'tır:
public interface Playable {
void play(); // örtük olarak public abstract
void pause();
void stop();
}Arayüzler, örtük olarak public static final olan sabitler tanımlayabilir:
public interface GameConstants {
int MAX_PLAYERS = 4; // örtük olarak public static final
}Bir sınıf, birden fazla sınıfı genişletmenin (extending) aksine, birden fazla arayüzü uygulayabilir (implement).
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int level = scanner.nextInt();
// TODO: Arayüzler hakkında bilgi yazdırın
// Yazdır: "Switchable methods: turnOn, turnOff"
// Yazdır: "Adjustable methods: setLevel"
// Yazdır: "Max level constant: " ardından Adjustable.MAX_LEVEL
// Yazdır: "Setting level to: " ardından giriş seviyesi
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici Kalıbı