मान लें कि आपके पास निम्नलिखित हैं:
+--------+ +------+
| Animal | | Food |
+-+------+ +----+-+
^ ^
| |
| |
+------+ +-------+
| Deer | | Grass |
+------+ +-------+
Deer
से विरासत में मिला है Animal
, और से Grass
विरासत में मिला है Food
।
अब तक सब ठीक है। Animal
वस्तुओं को खा सकते हैं Food
।
अब इसे थोड़ा ऊपर से मिक्स करें। Lion
जो एक विरासत में मिला देता है Animal
।
+--------+ +------+
| Animal | | Food |
+-+-----++ +----+-+
^ ^ ^
| | |
| | |
+------+ +------+ +-------+
| Deer | | Lion | | Grass |
+------+ +------+ +-------+
अब हमारे पास एक समस्या है क्योंकि Lion
दोनों खा सकते हैं Deer
और Grass
, लेकिन Deer
यह नहीं Food
है Animal
।
एकाधिक वंशानुक्रम का उपयोग करने और ऑब्जेक्ट ओरिएंटेड डिज़ाइन का उपयोग करने के साथ, आप इस समस्या को कैसे हल करते हैं?
FYI करें: मैंने ASCII चित्र बनाने के लिए http://www.asciiflow.com का उपयोग किया ।
IHuntable
, भेड़ और गाय IHerdable
(मानव द्वारा नियंत्रणीय) हैं, और लायन केवल IAnimal को लागू करता है, जो उन इंटरफेसों में से किसी को भी प्रभावित नहीं करता है। AOE3 एक विशेष वस्तु (इसी तरह instanceof
) द्वारा समर्थित इंटरफेस के सेट को क्वेरी करने का समर्थन करता है जो प्रोग्राम को अपनी क्षमताओं को क्वेरी करने की अनुमति देता है।