Polimorfizm kavramını kullandığınızda bir sınıf hiyerarşisi yaratırsınız ve ebeveyn referansını kullanarak, hangi türün nesneye sahip olduğunu bilmeden arayüz işlevlerini çağırırsınız. Bu harika. Misal:
Hayvan koleksiyonunuz var ve tüm hayvan fonksiyonlarını çağırıyorsunuz eat
ve bir köpek yemi mi yoksa kedi mi olduğunu umursamıyorsunuz. Miras ve sınıftan uygulanan diğerinden daha - Ama aynı sınıf hiyerarşisinde ek sahip hayvanlar var Animal
örneğin makeEggs
, getBackFromTheFreezedState
vb. Bu nedenle, bazı durumlarda işlevinizde ek davranışları çağırmak için belirli türü bilmek isteyebilirsiniz.
Örneğin, durumunda bu sabah zamanıdır ve o zaman çağrı sadece bir hayvan ise eat
bir insandır aksi takdirde, daha sonra ilk çağrı washHands
, getDressed
ve ancak o zaman diyoruz eat
. Bu davalar nasıl ele alınır? Çok biçimlilik ölür. Kod kokusu gibi görünen nesnenin türünü bulmanız gerekir. Bu davaları ele almak için ortak bir yaklaşım var mı?
Eater
arabirim tanımlarsanız eat()
, o zaman bir istemci olarak, bir Human
uygulamanın ilk çağırması gerekmediğini washHands()
ve getDressed()
bu sınıfın bir uygulama ayrıntılarını umursamadığını unutmayın . Bir müşteri olarak, bu gerçeği önemsiyorsanız, büyük olasılıkla iş için doğru aracı kullanmıyorsunuzdur.
getDressed
onlardan önce yapması gerekebileceğini eat
, öğle yemeği için durumun böyle olmadığını da düşünmelisiniz . Koşullarınıza bağlı olarak, washHands();if !dressed then getDressed();[code to actually eat]
bunu bir insan için uygulamanın en iyi yolu olabilir. Başka bir olasılık, başka şeyler gerektirdiğinde washHands
ve / veya getDressed
çağrıldığında ne olur ? Varsayalım leaveForWork
? Program akışınızı, bundan çok önce çağrılmış olacak şekilde yapılandırmanız gerekebilir.