"Merhaba Amigo! Bugün size arayüzlerin var olma nedenlerini anlatmak istiyorum. Belirli bir sınıfın, nesnenin veya varlığın belirli bir arayüzü desteklediğini sık sık duyarsınız. Bir arayüzü desteklemek ne anlama gelir ? "

Belirli davranışları desteklemek için arayüzler mevcuttur - 1

Daha geniş anlamda, herhangi bir arayüz, bir şeyin başka bir şeyle etkileşime girmesi için bir mekanizmadır. Örneğin, bir TV uzaktan kumandası bir uzak arabirimdir. Bir köpek komutları anlar ve yürütür; bu, köpeğin bir ses (kontrol) arayüzünü desteklediği anlamına gelir. Özetlemek gerekirse, bir arayüzün, iki tarafın da standardı bildiği, iki şeyin etkileşime girmesi için standartlaştırılmış bir yol olduğunu söyleyebiliriz. Bir kişi bir köpeğe "otur" dediğinde, verdiği komut "köpek sesli kontrol arayüzünün" bir parçasıdır ve köpek komuta itaat ederse, o zaman köpeğin arayüzü desteklediğini söyleriz.

Yani programlamada. Yöntemler, bir nesne üzerinde, verileri üzerinde gerçekleştirilen eylemlerdir. Ve eğer bir sınıf belirli yöntemleri uygularsa, o zaman belirli komutların «yürütülmesini destekler». Yöntemleri bir arayüzde birleştirerek ne kazanırız?

1) Her arayüzün tıpkı bir sınıf gibi benzersiz bir adı vardır. Her iki taraf da diğer tarafın benzer bir arayüzü değil, tam olarak bildikleri arayüzü desteklediğinden %100 emin olabilir.

2) Her arayüz, kendisini destekleyecek bir sınıfa belirli kısıtlamalar getirir. Bir arayüzden kalıtılan metotlar çağrıldığında ne yapacağına sınıf (geliştiricisi) karar verir, ancak sonuç makul beklentiler dahilinde olmalıdır. Bir köpeğe "otur" emri verirsek ve ardından 5 dakika boyunca yerinde yuvarlanıp oturursa, o zaman arayüzü destekler. Ancak bunun yerine sizi ayağınızdan yakalarsa, arayüzü desteklediğini pek söyleyemeyiz. Komutun yürütülmesi beklenen sonucu vermedi.

Diyelim ki siz ve arkadaşlarınız bir bilgisayar oyunu yazıyorsunuz. Ve bir karakterin davranışını programlamakla görevlendirildiniz. Meslektaşlarınızdan biri, ekrandaki tüm karakterleri görüntülemek için zaten bir kod yazmıştır. Oyunu diske kaydetmekten sorumlu ikinci bir meslektaşım, tüm oyun nesnelerini bir dosyaya kaydetmek için kod yazmıştır. Her biri çok sayıda kod yazdı ve bu kodla etkileşime geçmek için bir arayüz yaptı. Örneğin, şöyle görünebilir:

java kodu Tanım
interface Saveable
{
 void saveToMap(Map<String, Object> map);
 void loadFromMap(Map<String, Object> map);
}
— Bir haritadan bir nesneyi depolamak / yüklemek için arayüz.
interface Drawable
{
 void draw(Screen screen);
}
— Geçen Screen nesnesinin içine bir nesne çizmek için arayüz.
class PacMan implements Saveable, Drawable
{}
— İki arayüzü destekleyen sınıfınız.

Diğer bir deyişle, herhangi bir arabirimi (arabirim grubu) desteklemek için sınıfınızın şunları yapması gerekir:

1) Onları miras alın

2) İçlerinde beyan edilen yöntemleri uygulayın

3) Yöntemler, amaçlanan şeyi yapmalıdır.

Ardından, sınıfınız ve nesneleri hakkında hiçbir şey bilmeyen programın kodunun geri kalanı, sınıfınızla birlikte çalışabilir.

"Kod neden sınıfım hakkında hiçbir şey bilmiyor?"

"Diyelim ki 1 yıl önce birisinin yazdığı bir programın kodunu aldınız. Ya da arkadaşlarınızın oyun motorunu başka birinden satın aldığını/lisansladığını varsayalım. Oyun için çalışan bir kodunuz var. Binlerce nesne birbiriyle etkileşim halinde. Eğer bu etkileşimi sınıflarınızın doğru bir şekilde uyguladığı arayüzler aracılığıyla gerçekleştirirseniz, nesnelerinizle kolayca doğru şekilde etkileşime girebilir."

"Çok uzak! Bunun mümkün olduğunu bilmiyordum."

"Bütün büyük projeler böyle çalışır. İnsanlar sıfırdan yazmayı uzun zaman önce bıraktı."

İnsanlar ayrıca matematiği ve alfabeyi her seferinde yeniden icat etmezler. Bunun yerine, kendilerinden önce icat edilen her şeyi incelerler.