गणित पुस्तकालय के हिस्से के रूप में एक द्वि-आयामी वेक्टर वर्ग विकसित करते समय, मैं स्टाइलिस्ट और उपयोगिता कारणों के लिए स्थैतिक और उदाहरण विधि जोड़े रखने पर विचार कर रहा हूं। यही है, दो समकक्ष फ़ंक्शंस लेकिन एक स्थिर & गैर-उत्परिवर्तन है, और दूसरा & उत्परिवर्तित है। मुझे पता है कि मैं इस समस्या पर विचार करने वाला पहला व्यक्ति नहीं हूं (उदाहरण के लिए here देखें) लेकिन मुझे कोई जानकारी नहीं मिली है जो सीधे इसे संबोधित करती है। स्थिर और उदाहरण विधि जोड़े होने केस्थिर और इंस्टॉलेशन विधियों के जोड़े होने के समान कार्य करते हैं?
सकारात्मक:
- कुछ लोगों को एक या अन्य का उपयोग करना पसंद है और कुछ मामलों का चयन करने में सक्षम होने में कोड को पढ़ने में आसान बनाता है।
यह निहित है कि स्थैतिक और इंस्टेंट विधियों दोनों प्रदान किए जाने पर स्थैतिक विधियां उत्परिवर्तित नहीं हो रही हैं। यह बुला कोड अधिक स्पष्ट, उदा .:
someVector = Vector2d.add(vec1, vec2); someVector = (new Vector2d(vec1)).add(vec2); // does the same thing although more convoluted. // similarly adding directly to a vector is simpler with a mutator method. someVector.add(vec2); someVector = Vector2d.add(someVector, vec2);
यह विशेष रूप से महत्वपूर्ण है जब फ़ंक्शन कॉल की लंबी श्रृंखला उपयोग किया जाता है, जो वैक्टर के साथ आम है बना सकते हैं।
इन-प्लेस ऑपरेशन प्रत्येक ऑपरेशन के लिए एक नया उदाहरण बनाने से तेज़ी से कम्प्यूटेशनल रूप से हो सकता है। जब उपयोगकर्ता महत्वपूर्ण होता है तो उपयोगकर्ता निर्णय लेता है। एक वेक्टर वर्ग के उपयोगकर्ताओं के लिए, प्रदर्शन महत्वपूर्ण हो सकता है क्योंकि वेक्टर अक्सर कम्प्यूटेशनल रूप से महंगा कोड में उपयोग किए जाते हैं। केवल स्थिर या उदाहरण के तरीकों होने के
पेशेवरों, लेकिन दोनों:
कोई महत्वपूर्ण कोड अतिरेक। बनाए रखने के लिए आसान है।
कम ब्लोट। जावाडॉक्स लगभग आधा आकार होगा।
उपयोगकर्ताओं को सूचित करने के लिए आवश्यक नहीं है कि स्थिर विधियां कभी उत्परिवर्तित नहीं होतीं और गैर-गेटर इंस्टॉलेशन विधियां हमेशा उत्परिवर्तित होती हैं।
स्थैतिक/उदाहरण विधि जोड़े होने पर कितना भयानक है? क्या यह किसी भी प्रमुख पुस्तकालयों में प्रयोग किया जाता है?
क्या पैटर्न "स्थैतिक विधियां उत्परिवर्तित नहीं होते हैं, उदाहरण विधियों को व्यापक रूप से जाना जाता है"?
यह सच है कि एक "2 डी वेक्टर" की तरह इस तरह के एक मालूम होता है तुच्छ वर्ग को डिजाइन बन गया है * डिजाइन चुनौतियों के बहुत सारे * है। विशेष रूप से, सुविधा और प्रदर्शन (कम कचरा) के बीच व्यापार और "बेवकूफ" उपयोग और अपरिवर्तनीयता जैसी चीजों के बीच व्यापार बंद होने से पहले यह पहली नज़र में दिखता है। अब तक कोई जवाब नहीं है (अगर मैंने एक लिखा है, तो यह * लंबा * होना चाहिए ...), लेकिन ... यदि आपने थोड़ा और कोड प्रदान किया है (अर्थात्, संपूर्ण कक्षाएं) यह http:/के लिए उपयुक्त हो सकता है /codereview.stackexchange.com/ – Marco13
यह तर्क दिया जा सकता है कि समकक्ष नामों के साथ दो विधियां होने के बावजूद, जंगली रूप से भिन्न अर्थशास्त्र, उपयोगकर्ता को भ्रमित कर सकते हैं, जिससे सूक्ष्म बग पैदा होते हैं। –