अनुभवी C ++ इंजीनियरों की टीम के लिए OOP / OOD "परिचय" का सबसे अच्छा तरीका है


17

मैं एक कुशल तरीके की तलाश कर रहा हूं, यह भी अपमान के रूप में नहीं आता है, मौजूदा टीम के सदस्यों को ओओपी अवधारणाओं को पेश करने के लिए? मेरे साथी OO भाषाओं के लिए नए नहीं हैं। हम लंबे समय से C ++ / C # कर रहे हैं ताकि तकनीक स्वयं परिचित हो।

हालाँकि, मैं चारों ओर देखता हूं और बिना प्रयास के बड़े जलसेक (ज्यादातर कोड समीक्षाओं के रूप में), ऐसा लगता है कि हम जो उत्पादन कर रहे हैं वह सी कोड है जो कक्षाओं के अंदर होता है। केवल कुछ नाम रखने के लिए एकल जिम्मेदारी सिद्धांत, अमूर्त या कम से कम युग्मन के प्रयासों का कोई उपयोग नहीं है। मैंने ऐसी कक्षाएं देखी हैं जिनके पास एक कंस्ट्रक्टर नहीं है, लेकिन हर बार वे तुरंत चालू होने पर 0 से परेशान हो जाते हैं।

लेकिन जब भी मैं OOP लाता हूं, हर कोई हमेशा सिर हिलाता है और ऐसा लगता है जैसे उन्हें पता है कि मैं क्या बात कर रहा हूं। अवधारणाओं को जानना अच्छा है, लेकिन हम (दूसरों की तुलना में कुछ) वास्तविक काम देने के समय उन्हें लागू करने में बहुत कठिन समय लगता है।

कोड समीक्षाएं बहुत सहायक रही हैं, लेकिन कोड समीक्षाओं के साथ समस्या यह है कि वे केवल इस तथ्य के बाद होते हैं कि कुछ ऐसा लगता है कि हम फिर से लिखना शुरू कर रहे हैं (यह ज्यादातर रिफैक्टिंग है, लेकिन अभी भी बहुत समय लगता है) कोड जो अभी लिखा गया था। साथ ही कोड समीक्षाएं केवल एक व्यक्तिगत इंजीनियर को प्रतिक्रिया देती हैं, पूरी टीम को नहीं।

मैं एक प्रस्तुति (या एक श्रृंखला) करने के विचार के साथ कर रहा हूं और मौजूदा कोड के कुछ उदाहरणों के साथ ओओपी को फिर से लाने की कोशिश करता हूं जिन्हें बेहतर लिखा जा सकता था और फिर से बनाया जा सकता था। मैं कुछ वास्तव में पुरानी परियोजनाओं का उपयोग कर सकता था, जो अब किसी के पास नहीं हैं इसलिए कम से कम उस हिस्से को एक संवेदनशील मुद्दा नहीं होना चाहिए। हालांकि, यह काम करेगा? जैसा कि मैंने कहा कि ज्यादातर लोगों ने लंबे समय तक सी ++ किया है, तो मेरा अनुमान है कि ए) वे यह सोचकर बैठेंगे कि मैं उन्हें सामान क्यों बता रहा हूं जो वे पहले से जानते हैं या बी) वे वास्तव में इसे अपमान के रूप में ले सकते हैं क्योंकि मैं हूं उन्हें बताते हुए कि वे नहीं जानते कि वे कैसे काम करते हैं जो वे दशकों से कर रहे हैं अगर दशकों तक नहीं।

क्या एक अन्य दृष्टिकोण है जो एक कोड समीक्षा की तुलना में व्यापक दर्शकों तक पहुंच जाएगा, लेकिन एक ही समय में सजा व्याख्यान की तरह महसूस नहीं होगा?

मैं कॉलेज से बाहर एक ताजा बच्चा नहीं हूं, जिसके पास पूरी तरह से डिज़ाइन किए गए कोड के यूटोपियन आदर्श हैं और मुझे उम्मीद नहीं है कि किसी से भी। मैं इसे लिख रहा हूं इसका कारण यह है कि मैंने सिर्फ एक व्यक्ति की समीक्षा की थी जो वास्तव में कागज पर उच्च-स्तरीय डिजाइन था। हालाँकि, यदि आप क्लासेस पिक्चर करते हैं: A -> B -> C -> D, कोड B, C और D में, लगभग सभी एक ही पब्लिक इंटरफेस को लागू करते हैं और B / C में एक लाइनर फंक्शन्स हैं, ताकि टॉप-मोस्ट क्लास A बिल्कुल कर रही है सभी कार्य (स्मृति प्रबंधन के लिए, स्ट्रिंग पार्सिंग, सेटअप वार्ता ...) मुख्य रूप से 4 मोंगो विधियों में और, सभी इरादों और उद्देश्यों के लिए, लगभग सीधे डी में कॉल करते हैं।

अपडेट: मैं एक टेक लीड हूं (इस भूमिका में 6 महीने) और मुझे ग्रुप मैनेजर का पूरा समर्थन है। हम एक बहुत ही परिपक्व उत्पाद पर काम कर रहे हैं और रखरखाव लागत निश्चित रूप से खुद को ज्ञात करने दे रहे हैं।


संभावित डुप्लिकेट - programmers.stackexchange.com/questions/67579
ChrisF

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

इस पोस्ट को बनाने के बाद, संबंधित लिंक अप हो गया, जो मेरी स्थिति को बहुत पसंद करता है: प्रोग्रामर.स्टैकएक्सचेंज . com / questions / 43214/… । मैं बिल्कुल उसी चीज को लेकर चिंतित हूं। समस्या यह है कि उनकी टीम में 2 डेवलपर्स थे और मैं निश्चित रूप से कोड समीक्षाओं के साथ इसका प्रबंधन कर सकता था। मैं एक ऐसे दृष्टिकोण की तलाश कर रहा हूं, जो हमारी टीम के आकार (10+) के साथ काम करे, मुझे हर डेवलपर से एक-एक संवाद करने की जरूरत नहीं है, जितना मैं चाहता हूं।
DXM

जवाबों:


5

आप SOLID सिद्धांतों में एक लघु प्रशिक्षण क्यों नहीं विकसित करते हैं और उन्हें यह प्रशिक्षण देते हैं? ऐसा लगता है कि मेरे वर्तमान संगठन में मेरे लिए काफी काम किया गया है और मुझे लगता है कि छोटी ट्रेनिंग देना वास्तव में मजेदार है (इसमें शामिल सभी के लिए)।

जब मैंने अपना प्रशिक्षण दिया तो मुझे मौजूदा कोड (विभिन्न परियोजनाओं) में पैथोलॉजिकल "खराब" उदाहरणों की खोज करने में कुछ समय लगा, और सिद्धांतों का उपयोग करते हुए, प्रस्तुति में उन्हें चरणबद्ध तरीके से दर्शाया गया। यह प्रदर्शन किया

  1. यह मुश्किल नहीं है कि इन रिफैक्टरिंग करें
  2. इसमें लंबा समय नहीं लगता है
  3. अंतिम परिणाम (ध्यान से चुने गए ;-)) मूल कोड की तुलना में स्पष्ट रूप से बेहतर है।

5

कोड समीक्षाएं बहुत सहायक रही हैं लेकिन कोड समीक्षाओं के साथ समस्या यह है कि वे केवल तथ्य के बाद होते हैं।

एक परियोजना पर, हमने डिजाइन की समीक्षा की।

15 मिनट। सफेद बोर्ड पर। कोडिंग से पहले डिजाइन के माध्यम से बात करें।

सबसे महत्वपूर्ण हिस्सा किसी भी कार्यान्वयन कार्य से पहले डिजाइन की समीक्षा का समय निर्धारण है ।

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

अनौपचारिक डिजाइन की समीक्षा - कोडिंग से पहले - कोई दबाव नहीं - कोई प्रलेखन - जिम्मेदारियों को कैसे सौंपा गया है और ऑब्जेक्ट्स कैसे सहयोग करेंगे, इसकी बेहतर चर्चा की अनुमति देता है।


हाँ, हम पहले से ही डिज़ाइन समीक्षा करते हैं जैसे आपने उन्हें वर्णित किया है। समस्या मध्य-आकार के कार्यों की है। यदि कार्य काफी बड़ा है, तो मैं आमतौर पर प्रारंभिक वर्ग आरेख के साथ आने के लिए समय लेता हूं जो फिर टीम द्वारा परिष्कृत हो जाता है। यदि कार्य छोटा है, तो मौजूदा उच्च-स्तरीय डिज़ाइन पहले से ही काफी अच्छा है। हालांकि, मध्यम आकार के कार्यों के लिए, मेरे पास डिजाइन में पर्याप्त विचार रखने की क्षमता नहीं है, इसलिए मूल नियम "सर्वश्रेष्ठ निर्णय का उपयोग करें और ओओपी का पालन करें" है। यदि मैं इन कार्यों को स्वयं करना चाहता था, तो मैं कोडिंग और इंटरलिंग के साथ शुरू करूँगा जो कि निरंतर रिफैक्टरिंग और ...
DXM

... कोड को तय करने दें कि अंतिम डिजाइन कैसा दिखेगा। हालाँकि, जब मैं कुछ टीम के सदस्यों के लिए इन कार्यों को छोड़ता हूं, तो मुझे कभी-कभी कोड समीक्षा में जो कुछ मिलता है वह सामान होता है, जिसे मैंने अपने शुरुआती पोस्ट में वर्णित किया था।
DXM

1
@DXM: क्या? आप उन्हें कर रहे हैं? या उन्हें नहीं कर रहा है? यदि बड़ा है, तो आप डिज़ाइन की समीक्षा नहीं कर रहे हैं - आप किसी और के लिए डिज़ाइन कर रहे हैं - जब आप डिज़ाइन करते हैं तो कौन सीखता है? यदि छोटा है, तो आप डिज़ाइन की समीक्षा नहीं कर रहे हैं - "मौजूदा डिज़ाइन काफी अच्छा है" - जब आप डिज़ाइन को अनदेखा करते हैं, तो कौन झूठ बोलता है? यदि माध्यम है, तो आप डिज़ाइन नहीं करते हैं, और आप उनके डिज़ाइन की समीक्षा नहीं करते हैं, या तो? ऐसा नहीं लगता कि आप वास्तव में वास्तविक डिज़ाइन समीक्षा कर रहे हैं। आप यह क्यों कहते हैं कि आप हैं और फिर तीन उदाहरण देते हैं कि आप कहां नहीं हैं?
एस.लॉट

@ लोट: आपकी प्रतिक्रिया पर प्रतिबिंब पर, मेरा एकमात्र निष्कर्ष यह है कि आप बिल्कुल सही हैं। मुझे लगता है कि मुझे जो कहना चाहिए था वह यह है कि मैंने इस सटीक विचार को कम से कम 8 बार लाया है और हर कोई हमेशा सहमत था, लेकिन हाँ, अगर मैं जिस ताल पर हम बस गए, उस पर पीछे मुड़कर देखें, तो हम वास्तव में इसमें से कोई भी नहीं कर रहे हैं। मैं इसके बारे में आगे चर्चा करना चाहता हूं, लेकिन कड़ाई से प्रश्नोत्तर साइट पर चर्चा करने के लिए मैं पहले से ही अनुशासित था। क्या हम चैट में स्थानांतरित हो सकते हैं? मैं स्थिति को और अधिक स्पष्ट करना चाहता हूं और हो सकता है कि अपना दिमाग (या किसी और का जो सम्मिलित होना चाहता है) को थोड़ा सा चुनें। कभी चैट नहीं की, आप जानते हैं कि यह कैसे काम करता है?
DXM

@DXM: चैट की तुच्छता। और मददगार भी नहीं। यदि आपके पास और प्रश्न हैं - इस प्रारंभिक प्रश्न से अधिक विस्तृत - आपको उन अधिक विस्तृत प्रश्नों को पूछना चाहिए। यही तो बात है। कुछ मामलों में "आगे की चर्चा" की मात्रा "मैं निम्नलिखित कारणों से मेरे सवाल का जवाब पसंद नहीं करता ..." जो मूर्खतापूर्ण है। जवाब पसंद नहीं करना बस एक जवाब पसंद नहीं है और किसी भी चर्चा की आवश्यकता नहीं है। कुछ मामलों में, "मेरा प्रश्न अस्पष्ट नहीं है, आप सिर्फ पढ़ नहीं सकते।" अनहोनी, सच में। अपने प्रश्न पूछें। सवाल के रूप में।
S.Lott

4

मुझे लगता है कि आप कुछ डेवलपर्स से छोटे हैं, लेकिन खाद्य श्रृंखला में उच्चतर हैं।

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

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

पिछले कुछ वर्षों में कंपाइलरों को बहुत होशियार मिल गया है, इसलिए वह सब कुछ नहीं है जो अब सच था - उदाहरण के लिए, एक संकलक एक छोटे फ़ंक्शन को इनलाइन करने का चुनाव कर सकता है।

शायद एक मार्ग आगे एक अलग दृष्टिकोण अपनाने के लिए होगा - डेवलपर्स को यह समझाने के लिए कहें कि आपके द्वारा सिखाए गए सिद्धांत से उनकी पद्धति कैसे / क्यों बेहतर है - और इसके बारे में ईमानदार रहें।


0

प्रत्येक नए / परिवर्तित विधि के 100% शाखा कवरेज के साथ इकाई परीक्षणों के लिए जोर देना होगा ताकि तरीकों के बीच युग्मन को कम न किया जा सके।


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

मैं सहमत हूं कि "कार्यों के बीच प्रत्येक युग्मन अपरिहार्य है"। हालांकि अच्छा डिज़ाइन अन्य फ़ंक्शनों की संख्या को कम करता है प्रत्येक फ़ंक्शन को भी युग्मित किया जाता है। (एक वर्ग इस अंत के लिए एक साधन है)
इयान

0

आप गैंग ऑफ़ फोर से "डिज़ाइन पैटर्न" पुस्तक चुन सकते हैं। यह C ++ के लिए विशिष्ट नहीं है, इसलिए जब आप इसे संदर्भित करते हैं तो आप अपने सहकर्मियों C ++ ज्ञान की खुले तौर पर आलोचना नहीं कर रहे हैं। फिर भी एक ही समय में यह उन विषयों को संबोधित करता है जिन्हें आप प्रासंगिक मानते हैं। इसके अलावा, पुस्तक को व्यापक रूप से प्रासंगिक माना जाता है, इसलिए वे इसे सैद्धांतिक या अव्यवहारिक रूप से आसानी से खारिज नहीं कर सकते।

दूसरी ओर, विचार करें कि C ++ शुद्ध OO भाषा नहीं है, न तो डिज़ाइन में और न ही व्यवहार में। पूरा कंस्ट्रक्टर / मेमसेट स्टोरी आपको लगता है कि आपको RAII शुरू करना चाहिए, जो कि OO तकनीक नहीं है, लेकिन C ++ के लिए विशिष्ट है (दुर्भाग्य से - --Net की आईडी शो में यह पता चलता है कि RAII के बाद क्या होता है)। यहाँ प्रासंगिक पुस्तकें हैं (अधिक) प्रभावी C ++ और (More) असाधारण C ++।


2
लेकिन लेखक स्पष्ट रूप से कहते हैं कि डिजाइन पैटर्न सामान्य रूप से OOP / OOD का परिचय नहीं है! ऑडियंस को पहले एक हार्डकोड डिज़ाइन पैटर्न कैटलॉग में गोता लगाने से पहले OOP की पेशकश की जाने वाली तकनीकों से परिचित होना चाहिए! "हेड फर्स्ट डिज़ाइन पैटर्न" एक अच्छा परिचय देगा।
फाल्कन

2
यह ओपी विवरण से प्रतीत होता है कि वे ओओपी / ओओडी को जानते हैं, वे इसका उपयोग नहीं करते हैं (शायद डर से यह बहुत जटिल होगा), इस मामले में एक पुस्तक जो बताती है कि यह उपयोगी क्यों है कोड उदाहरणों की तुलना में सबसे अच्छा प्रेरित कर सकते हैं।
वाइल्डपिक्स जूल

@wildpeaks: ओपी विपरीत इसके विपरीत। वे OOP / OOD नहीं जानते हैं। वे OOP को एक प्रक्रियात्मक तरीके से प्रोग्रामिंग कर रहे हैं। उन्हें तकनीकों को डिजाइन करने के लिए कुछ करने की आवश्यकता है और GoF पुस्तक इस परिदृश्य को नहीं दर्शाती है।
फाल्कन

मैं वाक्यों का उल्लेख कर रहा था But every time I bring up OOP, everyone always nods and makes it seem like they know exactly what I'm talking aboutऔर My teammates are not new to OO languages, लेकिन मैं देख सकता हूं कि यह वास्तव में थोड़ा अस्पष्ट है, क्योंकि वे ओपी को जानने के बारे में झूठ बोल रहे होंगे जब ओपी उनसे इस बारे में बात करता है।
Wildpeaks

1
@MSalters - डिज़ाइन पैटर्न की प्रस्तावना: "यह पुस्तक ऑब्जेक्ट ओरिएंटेड टेक्नोलॉजी या डिज़ाइन का परिचय नहीं है। बहुत सी किताबें पहले से ही इसका अच्छा काम करती हैं। यह किताबें मानती हैं कि आप कम से कम एक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषा में कुशल हैं और आप ऑब्जेक्ट ओरिएंटेड डिज़ाइन में भी कुछ अनुभव होना चाहिए। " यह पुस्तक आवश्यकताओं के अनुरूप नहीं है। उन्हें कुछ प्रविष्टि स्तर OOD सामान पढ़ना चाहिए।
फाल्कन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.