ऑब्जेक्ट ओरिएंटेड डिज़ाइन


23

मान लें कि आपके पास निम्नलिखित हैं:

     +--------+     +------+
     | 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 का उपयोग किया ।


14
वास्तविक दुनिया की मॉडलिंग आमतौर पर जल्द या बाद में एक समस्या है, क्योंकि हमेशा कुछ अजीब चल रहा होता है (जैसे कि उड़ने वाली मछली, मछली या पक्षी? लेकिन एक पेंगुइन एक पक्षी है, उड़ नहीं सकता है और मछली खाता है)। @Ampt क्या कहता है, यह बहुत अच्छा लगता है, एक जानवर के पास खाने के सामान का संग्रह होना चाहिए।
रोब वैन डेर वीर

2
मुझे लगता है कि पशु को भोजन से विरासत में मिलना चाहिए। यदि कोई शेर खाने की कोशिश करता है, तो बस InvalidOperationException को फेंक दें।
राल्फचेपिन

4
@ राल्फचेपिन: सभी प्रकार की चीजें शेर (गिद्ध, कीड़े, आदि) खाते हैं। मुझे लगता है कि जानवर और भोजन कृत्रिम भेद हैं जो टूट जाएंगे क्योंकि वे पर्याप्त व्यापक नहीं हैं (सभी जानवर कुछ अन्य जानवर भोजन हैं, अंततः)। यदि आप "LivingThing" पर वर्गीकृत करते हैं, तो आपको केवल उन पौधों के साथ किनारे के मामलों से निपटना होगा जो गैर-जीवित चीजें (खनिज, आदि) खाते हैं, और यह LivingThing.Eat (LivingThing) के लिए कुछ भी नहीं तोड़ देगा।
शैतानिकप्यूपी

2
अपने शोध को साझा करना हर किसी की मदद करता है। हमें बताएं कि आपने क्या प्रयास किया है और यह आपकी आवश्यकताओं को पूरा क्यों नहीं करता है। यह दर्शाता है कि आपने खुद को मदद करने का प्रयास करने के लिए समय लिया है, यह हमें स्पष्ट उत्तरों को दोहराने से बचाता है, और सबसे अधिक यह आपको अधिक विशिष्ट और प्रासंगिक उत्तर प्राप्त करने में मदद करता है। यह भी देखें कि कैसे पूछें
gnat

9
इस सवाल का जवाब गेम ऑफ़ एम्पायर III द्वारा दिया गया है। ageofempires.wikia.com/wiki/List_of_Animals हिरण और गज़ल लागू IHuntable, भेड़ और गाय IHerdable(मानव द्वारा नियंत्रणीय) हैं, और लायन केवल IAnimal को लागू करता है, जो उन इंटरफेसों में से किसी को भी प्रभावित नहीं करता है। AOE3 एक विशेष वस्तु (इसी तरह instanceof) द्वारा समर्थित इंटरफेस के सेट को क्वेरी करने का समर्थन करता है जो प्रोग्राम को अपनी क्षमताओं को क्वेरी करने की अनुमति देता है।
२०:१३

जवाबों:


38

आईएस ए रिलेशनशिप = वंशानुक्रम

शेर एक जानवर है

एक रिश्ता = रचना

कार में एक पहिया है

रिश्ते कर सकते हैं = इंटरफेस

मैं खा सकता हूँ


5
+1 यह इतना सरल और अभी तक 3 अलग-अलग रिश्ते प्रकारों का एक अच्छा सारांश है
dreza

4
वैकल्पिक: ICanBeEatenयाIEdible
माइक वेलर

2
कर सकते हैं HAZ रिश्ते = lolcats
स्टीवन ए लोव

1
यह प्रश्न का उत्तर कैसे देता है?
user253751

13

OO केवल एक रूपक है जो वास्तविक दुनिया के बाद ही प्रतिमान करता है। लेकिन रूपक केवल इतनी दूर जाते हैं।

आम तौर पर ओओ में कुछ मॉडल करने का कोई सही तरीका नहीं है। किसी विशेष डोमेन में किसी विशेष समस्या के लिए इसे करने का एक सही तरीका है और आपको यह उम्मीद नहीं करनी चाहिए कि यदि आप अपनी समस्या को बदलते हैं, भले ही डोमेन ऑब्जेक्ट समान हो।

मुझे लगता है कि यह एक सामान्य गलतफहमी है सबसे कॉम्प। अभियांत्रिकी। छात्रों को अपने पहले वर्षों में है। OO एक सार्वभौमिक समाधान नहीं है, बस कुछ प्रकार की समस्याओं के लिए एक सभ्य उपकरण है जो आपके डोमेन को काफी अच्छी तरह से मॉडल कर सकते हैं।

मैंने सवाल का जवाब नहीं दिया, ठीक है क्योंकि हमारे पास डोमेन जानकारी का अभाव है। लेकिन मन में ऊपर के साथ आप अपनी आवश्यकताओं के अनुरूप कुछ डिजाइन करने में सक्षम हो सकते हैं।


3
+1 OO एक उपकरण है, धर्म नहीं।
मौविसील

मैं मानता हूं, अगर इस समस्या को बदलना और विकसित करना जारी है, तो कोई सटीक समाधान नहीं हो सकता है। वर्तमान स्थिति में इस समस्या में समाधान के साथ आने के लिए डोमेन जानकारी का अभाव है?
माइकल इरे

क्या आप गंभीरता से सोच रहे हैं कि एक वास्तविक दुनिया ओपी में मॉडलिंग की जा रही है? एक रिलेशनशिप मॉडल को एक उदाहरण के माध्यम से दर्शाया जाता है।
बसिलेव्स

@ बासीलेव्स का अर्थ इस तरह का है, वास्तव में, क्योंकि वह उल्लेख करता है कि जानवर वास्तविक जीवन में कैसे व्यवहार करते हैं। किसी को इस बात से चिंतित होने की आवश्यकता है कि कार्यक्रम में उस व्यवहार की आवश्यकता क्यों है, आईएमओ। उस ने कहा, मुझे कुछ अच्छा डिज़ाइन सुझाना अच्छा लगा होगा।
DPM

10

आप जानवरों को उनकी उप-कक्षाओं में तोड़ना चाहते हैं (या कम से कम जहाँ तक आप क्या कर रहे हैं इसके लिए समझ में आता है)। यह देखते हुए कि आप बुनियादी जानवरों और दो प्रकार के भोजन (पौधों और मांस) की तरह क्या काम कर रहे हैं, यह एक जानवर को परिभाषित करने और उन्हें अलग रखने के लिए मांसाहारी और शाकाहारी लोगों का उपयोग करने के लिए समझ में आता है। यहाँ मैं तुम्हारे लिए क्या आकर्षित किया है।

             +----------------+                   +--------------------+
             |    Animal      |                   |      Food          |
             |----------------|<--+Interfaces+--->|--------------------|
             |                |                   |                    |
             +----------------+                   +--------------------+
                +           +                       +                 +
                |           |    Abstract Classes   |                 |
                |           |        |          |   |                 |
                v           v        v          v   v                 v
   +-----------------+  +----------------+     +------------+      +------------+
   |   Herbivore     |  |  Carnivore     |     |   Plant    |      |   Meat     |
   |-----------------|  |----------------|     |------------|      |------------|
   |Eat(Plant p)     |  |Eat(Meat m)     |     |            |      |            |
   |                 |  |                |     |            |      |            |
   +-----------------+  +----------------+     +------------+      +------------+
            +                    +                    +                   +
            |                    |                    |                   |
            v                    v                    v                   v
   +-----------------+  +----------------+     +------------+      +------------+
   |  Deer           |  |   Lion         |     |  Grass     |      |  DeerMeat  |
   |-----------------|  |----------------|     |------------|      |------------|
   |DeerMeat Die()      |void Kill(Deer) |     |            |      |            |
   +-----------------+  +----------------+     +------------+      +------------+
                                 ^                    ^
                                 |                    |
                                 |                    |
                              Concrete Classes -------+

जैसा कि आप देख सकते हैं, वे दोनों एक खाने की विधि को उजागर करते हैं, लेकिन वे क्या खाते हैं बदलाव। शेर अब एक हिरण को मार सकता है, हिरण मर सकता है और हिरण को वापस कर सकता है, और ओपी का मूल प्रश्न है कि एक शेर को हिरण खाने की अनुमति कैसे दी जाए लेकिन इंजीनियरिंग पूरे पारिस्थितिकी तंत्र के बिना घास का जवाब नहीं दिया जाता है।

बेशक, यह बहुत जल्दी दिलचस्प हो जाता है क्योंकि एक हिरण को एक प्रकार का मांस माना जा सकता है, लेकिन चीजों को सरल रखने के लिए, मैं हिरण के नीचे मार () के तहत एक विधि बनाऊंगा, जो हिरण का मांस लौटाता है, और इसे एक के रूप में डालता है मांस का विस्तार करने वाला ठोस वर्ग।


फिर हिरण एक IMeat इंटरफ़ेस को उजागर करेगा?
Dan Pichelman

मांस एक इंटरफ़ेस नहीं है, यह एक सार वर्ग है। मैंने कहा कि मैं आपके लिए कैसे लागू करूंगा
Ampt

Eat(Plant p)और Eat(Meat m)दोनों एलएसपी का उल्लंघन करते हैं।
ट्यूलेंस कोरडोवा

ऐसा कैसे @ user61852? मैंने जानबूझकर पशु इंटरफ़ेस में ईट का खुलासा नहीं किया है ताकि प्रत्येक प्रकार के जानवर के पास स्वयं खाने की विधि हो सके।
Ampt

1
टीसीडब्ल्यूएल (बहुत जटिल, लीक हो जाएगा)। समस्या वितरित और आकस्मिक है और आपका समाधान स्थिर, केंद्रीकृत और पूर्व-परिभाषित है। TCWL।
ट्यूलेंस कोर्डोवा

7

मेरा डिजाइन इस तरह होगा:

  1. खाद्य पदार्थों को इंटरफेस के रूप में घोषित किया जाता है; एक IFood इंटरफ़ेस है और इसमें से दो व्युत्पन्न इंटरफेस हैं: IMeat और IVegetable
  2. पशु IMeat को लागू करते हैं और सब्जियां IVegetable को लागू करती हैं
  3. जानवरों के दो वंशज हैं, कार्निवोर्स और हेबिवोर्स
  4. कार्निवोर्स में ईट विधि है जो IMeat का एक उदाहरण प्राप्त करती है
  5. हर्बीवोर्स में ईट विधि होती है जो IVegetable का एक उदाहरण प्राप्त करती है
  6. शेर कार्निवोर से उतरता है
  7. हिरण हरिवोर से उतरता है
  8. सब्जी से घास निकलती है

क्योंकि पशु IMeat को कार्यान्वित करते हैं और हिरण एक (Herbivore) पशु, शेर है, जो कि (Carnivore) पशु है, जो IMeat खा सकता है, वह हिरण भी खा सकता है।

हिरण एक शाकाहारी है, इसलिए यह घास खा सकता है क्योंकि यह IVegetable को लागू करता है।

कार्निवोर्स आईविट और हर्बीवोरस नहीं खा सकते हैं IMeat खा सकते हैं।


1
जब मैं विरासत में मिला हुआ कुछ उपयोग कर रहा हूँ तो बहुत अधिक संकेंद्रित प्रकार देख रहा हूँ जब प्रकार विरासत में मिला तो कुछ भी लागू नहीं होने वाला ... जब भी आप अपने आप को ऐसे प्रकार बनाते हैं जो किसी भी प्रकार की कार्यक्षमता को लागू नहीं करते हैं, तो यह किसी चीज का एक पैर है; आपने उस प्रकार के सिस्टम में एक मॉडल का विस्तार किया है जो कोड में प्रयोज्य के लिए कोई मूल्य नहीं देता है
जिमी हॉफ

याद रखें कि मानव, वानर और भालू की तरह सर्वाहारी मौजूद हैं।
ट्यूलेंस कोर्डोवा

तो आप कैसे जोड़ते हैं कि शेर और हिरण दोनों स्तनधारी हैं? :-)
जोहान्स

2
@JimmyHoffa जिन्हें "मार्कर इंटरफेस" कहा जाता है और इंटरफ़ेस का पूरी तरह से वैध उपयोग है। यह तय करने के लिए कोड-समीक्षा की आवश्यकता है कि क्या उपयोग उचित है, लेकिन कई उपयोग के मामले हैं (जैसे कि यह एक है, जहां एक शेर घास खाने की कोशिश कर रहा है एक NoInterface अपवाद फेंक देगा)। मार्कर इंटरफ़ेस (या की कमी) एक अपवाद को foretell करने के लिए कार्य करता है जिसे फेंक दिया जाएगा यदि किसी विधि को असमर्थित तर्कों के साथ कहा जाता है।
२०'१३

1
@ मैं अवधारणा को समझता हूं, इसे पहले कभी औपचारिक रूप से नहीं सुना; बस मेरा अनुभव हर बार एक कोड आधार रहा है जिसमें मैं काम कर रहा हूं, यह चीजों को अधिक जटिल और बनाए रखने के लिए कठिन बनाता है। हालांकि मेरा अनुभव सिर्फ इतना है कि लोगों ने उन्हें गलत तरीके से इस्तेमाल किया है।
जिम्मी हॉफ

5

खाद्य पदार्थ जो कोई जानवर खा सकता है, वह वास्तव में एक पदानुक्रम नहीं बना सकता है, इस मामले में प्रकृति साधारण वस्तु उन्मुख मॉडलिंग के अनुरूप होने में अक्षम रूप से विफल रही (ध्यान दें कि अगर यह किया भी था, तो पशु को भोजन से विरासत में प्राप्त करना होगा, क्योंकि यह भोजन है)।

एक जानवर क्या खा सकता है इसका ज्ञान पूरी तरह से दोनों वर्गों के साथ नहीं रह सकता है , इसलिए केवल भोजन पदानुक्रम के कुछ सदस्य के संदर्भ में यह बताने के लिए पर्याप्त नहीं हो सकता है कि आप क्या चीजें खा सकते हैं।

यह कई संबंधों के लिए एक है। इसका मतलब है कि हर बार जब आप एक जानवर जोड़ते हैं, तो आपको यह पता लगाने की आवश्यकता होती है कि वह क्या खा सकता है, और हर बार जब आप एक भोजन जोड़ते हैं, तो आपको यह पता लगाने की आवश्यकता होती है कि वह क्या खा सकता है। शोषण करने के लिए आगे की संरचना है या नहीं, यह इस बात पर निर्भर करता है कि आप किन जानवरों और खाद्य पदार्थों की मॉडलिंग कर रहे हैं।

कई विरासत वास्तव में या तो यह बहुत अच्छी तरह से हल नहीं करता है। आपको किसी तरह की चीजों के संग्रह की आवश्यकता होती है, जिसे कोई जानवर खा सकता है, या कोई जानवर खा सकता है।


जैसे वे रेगेक्स के बारे में कहते हैं "मुझे एक समस्या थी इसलिए मैंने रेगेक्स का उपयोग किया, अब मुझे दो समस्याएं हैं", एमआई की तर्ज पर है "मुझे एक समस्या थी इसलिए मैंने एमआई का उपयोग किया, अब मेरे पास 99 समस्याएं हैं" अगर मैं तुम थे ' घ का पालन करें कि आप व्यर्थ में भोजन के बारे में जानते हुए भी इसे खा सकते हैं, यह वास्तव में एक टन मॉडल को सरल करता है। निर्भरता उलटा एफटीडब्ल्यू।
जिमी हॉफ

1

मैं अलग-अलग तरफ से समस्या का सामना करूंगा: ओओपी व्यवहार के बारे में है। आपके मामले में, Grassबच्चा होने के लिए कुछ व्यवहार है Food? तो आपके मामले में, Grassवर्ग नहीं होगा , या कम से कम, यह विरासत में नहीं मिलेगा Food। इसके अलावा, यदि आपको यह निर्धारित करने की आवश्यकता है कि संकलित समय पर कौन क्या खा सकता है, तो यह आवश्यक है कि क्या आपको Animalगर्भपात की आवश्यकता है। इसके अलावा, मांसाहारियों को घास खाते हुए देखना दुर्लभ नहीं है , यद्यपि जीविका के लिए नहीं।

इसलिए मैं इसे डिजाइन करूंगा (एएससीआई कला से परेशान नहीं):

IEdibleसंपत्ति के साथ Type, जो मांस, पौधे, शव, आदि की पहचान है। (यह अक्सर नहीं बदलेगा और इसका कोई विशिष्ट व्यवहार नहीं है, इसलिए इसे वर्ग hiearchy के रूप में मॉडल करने की कोई आवश्यकता नहीं है)।

Animalविधियों के साथ CanEat(IEdible food)और Eat(IEdible food), जो तार्किक हैं। फिर, विशिष्ट जानवर जांच कर सकते हैं कि जब भी दिए गए परिस्थितियों में दिया गया भोजन खा सकते हैं और तब निर्वाह / कुछ और प्राप्त करने के लिए उस भोजन को खाएं। साथ ही, मैं जानवरों के पदानुक्रम के हिस्से के रूप में कार्निवोर, हर्बिवोर, ओम्निवोर को रणनीति पैटर्न के रूप में मॉडल करूँगा ।


1

TL; DR: एक संदर्भ के साथ डिजाइन या मॉडल।

मुझे लगता है कि आपका प्रश्न कठिन है क्योंकि इसमें उस वास्तविक समस्या का संदर्भ नहीं है जिसे आप हल करने का प्रयास कर रहे हैं। आपके पास कुछ मॉडल और कुछ रिश्ते हैं, लेकिन उस ढांचे की कमी है जिसमें उसे काम करने की आवश्यकता है। संदर्भ के बिना, मॉडलिंग और रूपक अच्छी तरह से काम नहीं करते हैं, द्वार को कई व्याख्याओं के लिए खुला छोड़ देते हैं।

मुझे लगता है कि डेटा का उपभोग कैसे किया जाएगा, इस पर ध्यान देना अधिक उत्पादक है। एक बार जब आपके पास डेटा उपयोग का पैटर्न होता है, तो मॉडल और रिश्तों के लिए पीछे की ओर काम करना आसान होता है।

उदाहरण के लिए अधिक विस्तृत आवश्यकताओं को अलग-अलग ऑब्जेक्ट संबंधों की आवश्यकता होगी:

  • समर्थन Animals eatआईएनजी गैर की FoodतरहGastroliths
  • के Chocolateरूप में समर्थन Poisonहै Dogs, लेकिन के लिए नहींHumans

यदि हम इस बात की कवायद शुरू करते हैं कि सरल संबंध को कैसे प्रस्तुत किया जाए तो फूड इंटरफेस सबसे अच्छा हो सकता है; और यदि वह योग कुल है तो सिस्टम में रिश्ते कैसे हैं तो आपका जुर्माना। हालांकि, बस कुछ अतिरिक्त आवश्यकताएं या रिश्ते सरलता से काम करने वाले मॉडल और रिश्तों को प्रभावित कर सकते हैं।


मैं सहमत हूं लेकिन इसका सिर्फ एक छोटा सा उदाहरण दुनिया को मॉडल बनाने की कोशिश नहीं कर रहा था। उदाहरण के लिए आपके पास एक शार्क हो सकता है जो टायर और लाइसेंस प्लेट खाती है। आप बस एक अभिभावक सार वर्ग बना सकते हैं, जो किसी भी प्रकार की वस्तु खाए और भोजन इस अमूर्त वर्ग का विस्तार कर सके।
हैगन्सॉफ्ट

@ फगेंसॉफ्ट: सहमत। मुझे कभी-कभी दूर किया जाता है क्योंकि मैं लगातार डेवलपर्स को एक रूपक के आधार पर मॉडलिंग करते देखता हूं, जिस पर उन्हें तुरंत जब्त कर लिया जाता था, बजाय यह देखने के कि डेटा का उपभोग और उपयोग कैसे किया जाना चाहिए। वे एक प्रारंभिक विचार के आधार पर एक OO डिजाइन से शादी करते हैं और फिर समस्या को हल करने के बजाय उनके समाधान को फिट करने के लिए प्रयास करने के लिए मजबूर करते हैं।
आहारबुद्ध

1

ईसीएस रचना-ओवर-इनहेरिटेंस दृष्टिकोण:

An entity is a collection of components.
Systems process entities through their components.

Lion has claws and fangs as weapons.
Lion has meat as food.
Lion has a hunger for meat.
Lion has an affinity towards other lions.

Deer has antlers and hooves as weapons.
Deer has meat as food.
Deer has a hunger for plants.

Grass has plant as food.

स्यूडोकोड:

lion = new Entity("Lion")
lion.put(new Claws)
lion.put(new Fangs)
lion.put(new Meat)
lion.put(new MeatHunger)
lion.put(new Affinity("Lion"))

deer = new Entity("Deer")
deer.put(new Antlers)
deer.put(new Hooves)
deer.put(new PlantHunger)

grass = new Entity("Grass")
grass.put(new Plant)

Naturesystemइन संस्थाओं के माध्यम से एक लूप है, सामान्यीकृत क्वेरी फ़ंक्शन के माध्यम से उनके पास कौन से घटक हैं। Natureजब तक कि वे उस इकाई के प्रति आत्मीयता नहीं रखते, तब तक उनके हथियारों का उपयोग करते हुए भोजन के रूप में मांस रखने वाली अन्य संस्थाओं पर हमला करने के लिए मांस के लिए भूख के साथ संस्थाओं का कारण होगा। यदि हमला सफल हो जाता है, तो इकाई अपने शिकार को खिलाएगी, जिस बिंदु पर शिकार मांस से वंचित लाश में बदल जाएगा। Natureखाद्य पदार्थों के रूप में पौधों को खिलाने के लिए पौधों के लिए भूख के साथ संस्थाओं का कारण होगा, बशर्ते कि वे मौजूद हों।

Nature({lion, deer, grass})

Nature(entities)
{
    for each entity in entities:
    {
       if entity.has("MeatHunger"):
           attack_meat(entity, entities.with("Meat", exclude = entity))
       if entity.has("PlantHunger"):
           eat_plants(entity, entites.with("Plant", exclude = entity))
    }
}

शायद हम Grassसूर्य के प्रकाश और पानी की आवश्यकता का विस्तार करना चाहते हैं , और हम सूरज की रोशनी और पानी को अपनी दुनिया में लाना चाहते हैं। फिर भी Grassये सीधे नहीं खोज सकते, क्योंकि इसके पास नहीं है mobilityAnimalsपानी की भी आवश्यकता हो सकती है, लेकिन जब से उनके पास है, सक्रिय रूप से इसकी तलाश कर सकते हैं mobility। पूरे मॉडल के कैस्केडिंग टूटने के बिना इस मॉडल को विस्तारित करना और इसे बदलना बहुत आसान है, क्योंकि हम सिर्फ नए घटकों को जोड़ते हैं और हमारे सिस्टम (या सिस्टम की संख्या) के व्यवहार का विस्तार करते हैं।


0

एकाधिक वंशानुक्रम का उपयोग करने और ऑब्जेक्ट ओरिएंटेड डिज़ाइन का उपयोग करने के साथ, आप इस समस्या को कैसे हल करते हैं?

ज्यादातर चीजों की तरह, यह निर्भर करता है

यह इस बात पर निर्भर करता है कि आप 'इस समस्या' को क्या देखते हैं।

  • क्या यह एक सामान्य कार्यान्वयन समस्या है , उदाहरण के लिए, आपके चुने हुए प्लेटफ़ॉर्म में एकाधिक उत्तराधिकार की अनुपस्थिति को 'कैसे प्राप्त करें'?
  • क्या यह केवल इस विशिष्ट मामले के लिए एक डिज़ाइन समस्या है , जैसे कि इस तथ्य को कैसे मॉडल किया जाए कि जानवर भी भोजन हैं?
  • क्या डोमेन मॉडल के साथ यह एक दार्शनिक समस्या है , उदाहरण के लिए 'व्यावहारिक' और 'पशु' मान्य, आवश्यक और व्यावहारिक वर्गीकरण के लिए पर्याप्त वर्गीकरण हैं?

यदि आप सामान्य कार्यान्वयन समस्या के बारे में पूछ रहे हैं, तो उत्तर आपके पर्यावरण की क्षमताओं पर निर्भर करेगा। IFood और IAnimal इंटरफेस काम कर सकते हैं, जिसमें EdibleAnimal subclass दोनों इंटरफेस को लागू करेगा। यदि आपका वातावरण इंटरफेस का समर्थन नहीं करता है, तो बस पशु को भोजन से विरासत में मिलाएं।

यदि आप इस विशिष्ट डिज़ाइन समस्या के बारे में पूछ रहे हैं, तो बस पशु को भोजन से विरासत में मिलाएं। यह सबसे सरल बात है जो संभवतः काम कर सकती है।

यदि आप इन डिज़ाइन अवधारणाओं के बारे में पूछ रहे हैं, तो उत्तर दृढ़ता से इस बात पर निर्भर करता है कि आप मॉडल के साथ क्या करना चाहते हैं। यदि यह एक कुत्ते-खाने-कुत्ते वीडियो गेम या यहां तक ​​कि एक चिड़ियाघर में फीडिंग शेड्यूल को ट्रैक करने के लिए एक एप्लिकेशन है, तो यह काम करने के लिए पर्याप्त हो सकता है। यदि यह पशु व्यवहार पैटर्न के लिए एक वैचारिक मॉडल के लिए है, तो यह शायद एक उथला उथला है।


0

इनहेरिटेंस का उपयोग उस चीज के लिए किया जाना चाहिए जो हमेशा कुछ और होती है, और बदल नहीं सकती। घास हमेशा भोजन नहीं है। उदाहरण के लिए, मैं घास नहीं खाता हूं।

घास कुछ जानवरों के लिए एक खाद्य पदार्थों की भूमिका निभाता है


यह सिर्फ एक अमूर्त है। यदि यह आवश्यकता है तो आप और अधिक डिवीजनों का निर्माण कर सकते हैं जो प्लांट अमूर्त वर्ग का विस्तार करते हैं और मनुष्य को 'ह्यूमनटेबलप्लंट्स' की तरह एक अमूर्त वर्ग खाने के लिए बनाते हैं जो पौधों को मनुष्यों को ठोस वर्गों में खाने के लिए समूहित करते हैं।
हैगन्सॉफ्ट

0

आप अभी-अभी OO की मूल सीमा के पार आए हैं।

OO पदानुक्रमित संरचनाओं के साथ अच्छी तरह से काम करता है। लेकिन एक बार जब आप सख्त पदानुक्रम से दूर हो जाते हैं तो अमूर्त इतनी अच्छी तरह से काम नहीं करता है।

मैं सभी कायापलट की रचनाओं आदि के बारे में जानता हूं जो इन सीमाओं के आसपास पाने के लिए उपयोग की जाती हैं, लेकिन वे अनाड़ी हैं, और अधिक महत्वपूर्ण बात यह है कि अस्पष्ट और कोड का पालन करना कठिन है।

रिलेशनल डेटा बेस का आविष्कार मुख्य रूप से सख्त पदानुक्रमित संरचनाओं की सीमाओं से दूर जाने के लिए किया गया था।

आपके उदाहरण के लिए घास एक निर्माण सामग्री, कागज के लिए एक कच्चा माल, एक कपड़े की सामग्री, एक घास या एक फसल भी हो सकती है।

एक हिरण एक पालतू जानवर, पशुधन, एक चिड़ियाघर जानवर या एक संरक्षित प्रजाति हो सकता है।

एक शेर भी एक चिड़ियाघर जानवर या संरक्षित प्रजाति हो सकता है।

जीवन सरल नहीं है।


0

एकाधिक वंशानुक्रम का उपयोग करने और ऑब्जेक्ट ओरिएंटेड डिज़ाइन का उपयोग करने के साथ, आप इस समस्या को कैसे हल करते हैं?

क्या समस्या है? यह प्रणाली क्या करती है? जब तक आप जवाब नहीं देते, मुझे पता नहीं है कि कक्षाओं की क्या आवश्यकता हो सकती है। क्या आप भविष्य में प्रजातियों की आबादी को पेश करते हुए, मांसाहारी और शाकाहारी और पौधों के साथ एक पारिस्थितिकी को मॉडल करने की कोशिश कर रहे हैं? क्या आप कंप्यूटर पर 20 प्रश्न खेलने की कोशिश कर रहे हैं?

किसी भी उपयोग के मामलों को परिभाषित करने से पहले डिजाइन शुरू करना समय की बर्बादी है। मैंने इसे हास्यास्पद चरम सीमाओं पर ले जाया है जब लगभग दस की एक टीम ने चित्रों के माध्यम से सॉफ्टवेयर का उपयोग करके एयरलाइन के एक ओओ मॉडल का उत्पादन शुरू किया। उन्होंने दो साल तक मॉडलिंग की, जिसमें कोई वास्तविक व्यावसायिक समस्या नहीं थी। अंत में ग्राहक इंतजार करते-करते थक गया और टीम को एक वास्तविक समस्या हल करने के लिए कहा। वह सब मॉडलिंग पूरी तरह से बेकार था।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.