मैं ऑब्जेक्ट ओरिएंटेड तरीके से डिजाइन और सोचने का तरीका पाने की कोशिश कर रहा हूं और इस विषय पर समुदाय से कुछ प्रतिक्रिया प्राप्त करना चाहता हूं। निम्नलिखित एक शतरंज के खेल का एक उदाहरण है जिसे मैं एक OO तरीके से डिजाइन करना चाहता हूं। यह एक बहुत व्यापक डिजाइन है और इस स्तर पर मेरा ध्यान बस यह पहचानना है कि कौन से संदेश के लिए जिम्मेदार है और खेल को अनुकरण करने के लिए ऑब्जेक्ट एक-दूसरे से कैसे बातचीत करते हैं। कृपया ध्यान दें कि यदि खराब डिज़ाइन (उच्च युग्मन, खराब सामंजस्य आदि) के तत्व हैं और उन पर सुधार कैसे किया जाए।
शतरंज के खेल में निम्न वर्ग हैं
- मंडल
- खिलाड़ी
- टुकड़ा
- वर्ग
- शतरंज का खेल
बोर्ड वर्गों से बना है और इसलिए बोर्ड को स्क्वायर ऑब्जेक्ट बनाने और प्रबंधित करने के लिए जिम्मेदार बनाया जा सकता है। प्रत्येक टुकड़ा एक वर्ग पर भी होता है इसलिए प्रत्येक टुकड़े में उस वर्ग का संदर्भ भी होता है जो उस पर है। (इसका कोई मतलब भी है क्या?)। प्रत्येक टुकड़ा तब एक वर्ग से दूसरे में खुद को स्थानांतरित करने के लिए जिम्मेदार होता है। खिलाड़ी वर्ग अपने पास मौजूद सभी टुकड़ों का संदर्भ रखता है और उनके निर्माण के लिए भी ज़िम्मेदार है (खिलाड़ी को टुकड़ों का निर्माण करना चाहिए?)। प्लेयर में एक मेथड टेकटर्न होता है जो बदले में एक मेथड मूव को कॉल करता है जो कि पीस क्लास से संबंधित होता है जो कि अपने वर्तमान स्थान से दूसरे स्थान पर टुकड़े के स्थान को बदलता है। अब मैं इस बात पर असमंजस में हूँ कि बोर्ड वर्ग के लिए वास्तव में क्या जिम्मेदार होना चाहिए। मुझे लगा कि खेल की वर्तमान स्थिति को निर्धारित करने और यह जानने की आवश्यकता है कि खेल कब खत्म हुआ है। लेकिन जब एक टुकड़ा इसे बदल देता है ' स्थान को बोर्ड को कैसे अपडेट करना चाहिए? यह वर्गों के एक अलग सरणी बनाए रखना चाहिए जिस पर टुकड़े मौजूद हैं और जो टुकड़ों के रूप में अद्यतन प्राप्त करता है?
इसके अलावा, ChessGame ने बोर्ड और खिलाड़ी वस्तुओं को समान रूप से बनाया, जो क्रमशः वर्गों और टुकड़ों को बनाते हैं और सिमुलेशन शुरू करते हैं। संक्षेप में, यह वही हो सकता है जो ChessGame में कोड जैसा दिखता है
Player p1 =new Player();
Player p2 = new Player();
Board b = new Board();
while(b.isGameOver())
{
p1.takeTurn(); // calls movePiece on the Piece object
p2.takeTurn();
}
मैं स्पष्ट नहीं हूं कि बोर्ड की स्थिति कैसे अपडेट होगी। क्या टुकड़े में बोर्ड का संदर्भ होना चाहिए? जिम्मेदारी कहां होनी चाहिए? कौन संदर्भ रखता है? कृपया अपने इनपुट के साथ मेरी मदद करें और इस डिज़ाइन में समस्याओं को इंगित करें। मैं जानबूझकर किसी भी एल्गोरिदम या खेल के आगे के विवरण पर ध्यान केंद्रित नहीं कर रहा हूं क्योंकि मैं केवल डिजाइन पहलू में दिलचस्पी रखता हूं। मुझे उम्मीद है कि यह समुदाय मूल्यवान अंतर्दृष्टि प्रदान कर सकता है।
takeTurn()
यदि p1 की चाल खेल को समाप्त करती है। कम नाइटिककी टिप्पणी: मुझे खिलाड़ियों को बुलाना और अधिक स्वाभाविक लगता हैwhite
औरblack
।