"Merhaba, Amigo! Sonunda gerçekten ilginç bir şeye geldik. Bugün size çoklu kalıtımdan bahsedeceğim . Çoklu kalıtım gerçekten çok büyüleyici ve güçlü bir araçtır. Ve birkaç sorun olmasaydı, o zaman Java sınıfların çoklu kalıtımını desteklerdi. Ama desteklemiyor, bu yüzden arayüzlerin çoklu kalıtımından memnun olmalıyız . Bu da oldukça harika."

Birden çok arayüzün devralınması - 1

Bir bilgisayar oyunu yazdığınızı hayal edin. Ve karakterleri (nesneleriniz) çok karmaşık şekillerde davranmalıdır: bir haritada dolaşın, öğeler toplayın, görevler gerçekleştirin, diğer karakterlerle iletişim kurun, birini öldürün, başka birini kurtarın. Diyelim ki tüm nesneleri 20 kategoriye ayırdınız. Bu, eğer şanslıysanız, nesnelerinizi tanımlamak için yalnızca 20 sınıfla yetinebileceğiniz anlamına gelir. Ama işin püf noktası şu: Bu nesnelerin kaç tane benzersiz etkileşim biçimi olacak? Her nesne türü, diğer 20 nesne türüyle benzersiz etkileşimlere sahip olabilir (aynı türdeki nesnelerle etkileşimleri de sayıyoruz). Başka bir deyişle, 20 x 20 = 400 etkileşim için kod yazmanız gerekecek! Ve benzersiz nesne türlerinin sayısı 20 değil, 100 ise, etkileşim sayısı 10.000 olabilir!

"Vay canına! Şimdi programlamanın neden bu kadar zor bir iş olduğunu anlıyorum."

"Çok basit. Çok sayıda soyutlama sayesinde. Ve arayüzlerin birden çok kalıtımı sayesinde hiç de azımsanmayacak."

Nesnelerin kendilerinden ziyade roller ve/veya yetenekler etkileşime giriyorsa, genellikle nesne etkileşimini basitleştirebiliriz. Ve zaten bildiğimiz gibi, bazı arayüzler uyguladığında, bir sınıfa yetenekler kolayca eklenebilir.

Büyük bir program yazarken, geliştiriciler bunu genellikle en baştan yaparlar:

1) Tüm yetenekleri/rolleri tanımlayın.

2) Bu roller arasındaki etkileşimi tanımlar.

3) Ardından tüm sınıflara roller atayın.

"Belki bir örnek?"

"Tabii ki. «Tom ve Jerry» çizgi filmindeki rollere bakalım.

java kodu Tanım
interface Moveable
{}
— Rol/hareket etme yeteneği.
interface Eatable
{}
— Yenilecek rol/yetenek.
interface Eat
{}
— Birini yeme rolü/yeteneği.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom üç rolü olan bir kedidir:
1) Hareket edebilir
2) Birini yiyebilir
3) Biri (köpek) tarafından yenebilir.
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry iki rolü olan bir faredir:
1) Hareket edebilir
2) Birisi tarafından yenebilir.
class Killer extends Dog implements Moveable, Eat
{}
Katil iki rolü olan bir köpektir: 1) Hareket edebilir 2) Birini yiyebilir

Yalnızca bu üç rolü (arayüzleri) bilerek, bir program yazabilir ve bu roller arasındaki doğru etkileşimi tanımlayabilirsiniz. Örneğin, bir nesne (Moveable arabirimi aracılığıyla) "yiyebileceğiniz"in peşinden koşacak ve "sizi yiyebilecek olan"dan kaçacaktır. Ve tüm bunlar, belirli nesneleri bilmeden. Programa daha fazla nesne (sınıf) ekler ve bu rolleri korursanız, nesnelerinizin davranışını kontrol ederek yine de güzel bir şekilde çalışacaktır.