को पुन: सक्रिय करने में सहायता मेरे पास सी पृष्ठभूमि है और सी ++ पर एक नया है। मेरे पास एक बुनियादी डिजाइन सवाल है। मैं एक वर्ग (मैं इसे "महाराज" ख/ग समस्या मैं यह करने के लिए बहुत अनुरूप लगता है फोन करता हूँ, दोनों जटिलता और मुद्दों के संदर्भ में) कि मूल रूप से इससी ++ राक्षस वर्ग
class chef
{
public:
void prep();
void cook();
void plate();
private:
char name;
char dish_responsible_for;
int shift_working;
etc...
}
छद्म कोड में
की तरह काम करता है, इस की तर्ज पर लागू किया जाता है:
int main{
chef my_chef;
kitchen_class kitchen;
for (day=0; day < 365; day++)
{
kitchen.opens();
....
my_chef.prep();
my_chef.cook();
my_chef.plate();
....
kitchen.closes();
}
}
महाराज वर्ग यहाँ एक राक्षस वर्ग हो रहा है, और एक बनने की क्षमता है। महाराज भी एक जिम्मेदारी सिद्धांत का उल्लंघन करने लगता है, इसलिए बजाय हम की तरह कुछ होना चाहिए:
class employee
{
protected:
char name;
int shift_working;
}
class kitchen_worker : employee
{
protected:
dish_responsible_for;
}
class cook_food : kitchen_worker
{
public:
void cook();
etc...
}
class prep_food : kitchen_worker
{
public:
void prep();
etc...
}
और
class plater : kitchen_worker
{
public:
void plate();
}
आदि ...
मैं वैसे अभी भी साथ कैसे के लिए संघर्ष कर रहा हूँ इसे रन टाइम पर कार्यान्वित करें ताकि, उदाहरण के लिए प्लाटर (या "प्लेटर के रूप में अपनी क्षमता में शेफ") रात्रिभोज सेवा के माध्यम से घर के माध्यम से जाने का फैसला करता है, तो शेफ को एक नई शिफ्ट करना पड़ता है।
यह एक व्यापक सवाल मुझे लगता है कि अगर एक ही व्यक्ति सदा ही prepping, खाना पकाने और इस उदाहरण में चढ़ाना करता है, क्या वर्गों के इस पदानुक्रम होने के वास्तविक व्यावहारिक लाभ क्या एक भी महाराज मॉडल करने के लिए है करने के लिए संबंधित प्रतीत होती है कर देता है? मुझे लगता है कि "कक्षाओं को जोड़ने का डर" चीज में चलता है, लेकिन साथ ही, अभी या भविष्य में भविष्य में मुझे नहीं लगता कि शेफ वर्ग को पूरी तरह से बनाए रखना बहुत ही बोझिल है। मुझे यह भी लगता है कि यह शेफ ऑब्जेक्ट में तीन अलग-अलग तरीकों को देखने और आगे बढ़ने के लिए कोड के एक बेवकूफ पाठक के लिए एक बहुत ही वास्तविक अर्थ में आसान है।
मुझे समझ में आता है कि अगर हम "cut_onions()", "cut_carrots()", आदि जैसे तरीकों को जोड़ते हैं, तो शायद प्रत्येक व्यक्ति अपने डेटा के साथ, लेकिन ऐसा लगता है कि उनको निपटाया जा सकता है प्री() फ़ंक्शन बनाने के साथ, अधिक मॉड्यूलर कहें। इसके अलावा, ऐसा लगता है कि एसआरपी अपने तार्किक निष्कर्ष पर ले जाने के लिए एक वर्ग "प्याज_कटर" "गाजर_कटर" आदि बनाएगा ... और मुझे अभी भी इसका मूल्य देखने में कठिनाई है, यह देखते हुए कि किसी भी तरह से कार्यक्रम को यह सुनिश्चित करना है कि एक ही कर्मचारी प्याज और गाजर को काटता है जो राज्य चर को विधियों में समान रखने में मदद करता है (उदाहरण के लिए, यदि कर्मचारी अपनी उंगली काटने वाले प्याज में कटौती करता है तो वह अब गाजर काटने के योग्य नहीं है), जबकि राक्षस वस्तु शेफ कक्षा में ऐसा लगता है कि सब कुछ ख्याल रखा जाता है।
बेशक, मैं समझता हूं कि यह अर्थपूर्ण "वस्तु उन्मुख डिजाइन" होने के बारे में कम हो जाता है, लेकिन ऐसा लगता है कि अगर हमें प्रत्येक शेफ के कार्यों के लिए अलग-अलग वस्तुएं होती हैं (जो कि अप्राकृतिक लगता है, वही व्यक्ति सभी तीन कार्य कर रहा है) तो ऐसा लगता है कि वैचारिक मॉडल पर सॉफ़्टवेयर डिज़ाइन को प्राथमिकता दी गई है। मुझे लगता है कि ऑब्जेक्ट ओरिएंटेड डिज़ाइन यहां उपयोगी है अगर हम कहें, "meat_chef" "sous_chef" "three_star_chef" जो अलग-अलग लोग हैं। इसके अलावा, रनटाइम समस्या से संबंधित यह है कि जटिलता में एक ओवरहेड होता है, जो कि एक जिम्मेदारी सिद्धांत के सख्त आवेदन के तहत होता है, जिसे यह सुनिश्चित करना होता है कि बेस क्लास कर्मचारी बनाने वाले अंतर्निहित डेटा को बदल दिया जाए और यह परिवर्तन हो बाद के चरणों में परिलक्षित होता है।
इसलिए मैं इसे कम या ज्यादा छोड़ने के लिए प्रेरित हूं। अगर कोई स्पष्टीकरण दे सकता है कि यह एक बुरा विचार क्यों होगा (और यदि आपके पास सुझाव है कि आगे बढ़ने के लिए सबसे अच्छा तरीका है) तो मैं सबसे अधिक बाध्य होगा।
कभी कभी असली दुनिया भूमिकाओं/जिम्मेदारियों/कोड में वस्तुओं के लिए कार्य मानचित्रण सिर्फ काम नहीं करता। शायद आपको कुछ सामान्य कार्य की आवश्यकता है जो एक व्यक्ति और एक कार्रवाई लेता है। वह कार्य व्यक्ति को कार्रवाई लागू करने के लिए मिलता है। –
प्रत्येक वर्ग इंटरफ़ेस पर मॉड्यूल आपको अधिक सुराग दे सकता है? एक प्लेटर क्या कर सकता है? क्या cook_food कर सकते हैं? क्या उन्हें विरासत में रहने की आवश्यकता है या यह सिर्फ एक कौशल (फ़ंक्शन कॉल) है? – billz
संरचना विधि को देखो। या शायद आपको यहां एक राज्य पैटर्न की आवश्यकता है? –