क्या OOP में वस्तुओं को एक इकाई का प्रतिनिधित्व करना है?


82

क्या किसी वस्तु को किसी इकाई का प्रतिनिधित्व करना है?

एक करके इकाई मैं एक तरह कुछ मतलब Product, Motorएक ParkingLotआदि, एक शारीरिक, या यहाँ तक स्पष्ट गैर भौतिक वैचारिक वस्तु - कुछ है कि अच्छी तरह से कुछ कोर डेटा स्पष्ट रूप से वस्तु से संबंधित के साथ, परिभाषित किया गया है, और कुछ कार्य / तरीकों वह कोर डेटा पर स्पष्ट रूप से काम करता है।

उदाहरण के लिए, मैं एक वस्तु Demon, अपने आप में एक इकाई, एक काल्पनिक शायद और भौतिक नहीं, लेकिन फिर भी एक इकाई हो सकती है

क्या कोई वस्तु केवल विधियों का एक संग्रह हो सकती है , प्रक्रियाओं का एक सामान्य सेट जो एक सामान्य लक्ष्य के साथ टाई है?

उदाहरण: क्या एक वर्ग को बुलाया जा सकता है MotorOperationsया MotorActions, जहां कोई इकाई नहीं है, लेकिन कक्षा के अंदर के तरीके ऐसी चीजें करते हैं

  • getMotorDataFromHTMLForm ()
  • getMotorManufacturers ()
  • selectMotorFromUserRequirements ($ आवश्यकताओं)
  • canMotorCanHandleOperatingConditions ($ की स्थिति)
  • computePowerConsumptionForMotor ($ आईडी)

एक क्लास को आमतौर पर डेटा पर ऑब्जेक्ट + ऑपरेशंस के डेटा सेंटर के रूप में परिभाषित किया जाता है। इसलिए Motorमोटर विनिर्देशों से संबंधित कुछ मोटर चर हो सकते हैं, और ऐसे ऑपरेशन हो सकते हैं जो उन डेटा को कुछ उत्पादन करने के लिए जोड़ते हैं।

मेरे मामले में यह अधिक है जैसे मेरे पास डेटा + डेटा पर संचालन के साथ एक वर्ग है जो कक्षा से गुजरता है , "मोटर संचालन" के लिए कोई डेटा केंद्रित नहीं है, अस्थायी पास-थ्रू-क्लास डेटा के अलावा।

सवाल

क्या कक्षाएं इकाई-कम वस्तुओं का प्रतिनिधित्व कर सकती हैं? यदि नहीं, तो वे खराब / अपूर्ण / गैर-ओओपी-केंद्रित क्यों हैं? क्या ऐसे तरीके हैं जिन्हें ओओपी के अनुरूप होने के लिए उन्हें वैचारिक रूप से बदलने / सुधारने की आवश्यकता है?


2
+1। लेकिन क्या "हां" का मतलब यह है कि उसे एक इकाई का प्रतिनिधित्व करना है, या इसका मतलब यह होगा कि वे इकाई-कम वस्तुओं का प्रतिनिधित्व कर सकते हैं?
पैंजरक्रिस 21

1
पहली बात जो मेरे दिमाग में आती है: java.awt और उसकी "Op" कक्षाएं (जैसे docs.oracle.com/javase/7/docs/api/java/awt/image/… ), अगर आपका मतलब है। यह एक ऑपरेशन का प्रतिनिधित्व करता है। अब, मुझे यकीन नहीं है कि यह अच्छा अभ्यास है (यह अजीब और बदसूरत दिखता है), लेकिन यह जावा मानक पुस्तकालय में शामिल है, और जावा ओओपी है। अधिकाँश समय के लिए।
ल्यूक

1
नहीं, यह नहीं है, लेकिन इसका मतलब यह नहीं है MotorActionsया MotorOperationsअच्छे विचार हैं या नहीं।
इमिबिज़

1
यह प्रश्न कैन के एक और विनिर्देश से लाभान्वित हो सकता है
रीइनियरियरपोस्ट

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

जवाबों:


109

नहीं , किसी वस्तु को किसी इकाई का प्रतिनिधित्व नहीं करना है।

वास्तव में, मैं तर्क दूंगा कि जब आप वस्तुओं के बारे में सोचना बंद कर देते हैं तो भौतिक संस्थाएं तब होती हैं जब आपको अंततः ओओपी के वादों का लाभ मिलता है।

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

वस्तुएं संदेशों के बारे में हैं। वे जिम्मेदारियों के बारे में हैं। वे कारों, उपयोगकर्ताओं या आदेशों के बारे में नहीं हैं।

मुझे पता है कि हम OO को इस तरह से पढ़ाते हैं, लेकिन यह स्पष्ट हो जाता है कि कुछ कोशिशों के बाद मौलिक रूप से निराशाजनक यह पता लगाना है कि जब आप MVC, MVVM या MVWhatever करने की कोशिश करते हैं तो चीजें कहां जाती हैं। या तो आपके मॉडल हास्यास्पद रूप से फूला हुआ हो जाते हैं या आपके नियंत्रक करते हैं। नौगम्यता के लिए, यह जानना बहुत अच्छा है कि वाहन को छूने वाली कोई भी चीज़ वाहन में है। कस्टम फ़ाइल, लेकिन जब आपका आवेदन वाहनों के बारे में होता है, तो आप अनिवार्य रूप से उस फ़ाइल में स्पेगेटी की 3000 लाइनों के साथ समाप्त होते हैं।

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

चलो कार्यों के बैग के बारे में बात करते हैं

एक ऑब्जेक्ट सिर्फ तरीकों का एक संग्रह हो सकता है और अभी भी OO हो सकता है, लेकिन मेरे "नियम" बहुत सख्त हैं।

  1. संग्रह में एक ही ज़िम्मेदारी होनी चाहिए, और यह जिम्मेदारी "मोटरों के लिए सामान" के रूप में सामान्य नहीं हो सकती है। मैं एक सेवा-स्तर के रूप में ऐसा काम कर सकता हूं, लेकिन मैं पूरी तरह से जानता हूं कि मैं नवजागरण / खोज कारणों के लिए आलसी हो रहा हूं, इसलिए नहीं कि मैं ओओ कोड लिखने की कोशिश कर रहा हूं।

  2. सभी विधियाँ अमूर्तता की एक सुसंगत परत पर होनी चाहिए। यदि एक विधि मोटर ऑब्जेक्ट्स को पुनर्प्राप्त करती है और दूसरा हॉर्सपावर लौटाती है, तो शायद यह बहुत दूर है।

  3. ऑब्जेक्ट को समान "डेटा" पर काम करना चाहिए। यह ऑब्जेक्ट मोटर्स (स्टार्ट / स्टॉप) पर सामान करता है, यह एक क्रैंक लंबाई के साथ काम करता है, यह एक इग्निशन सीक्वेंसिंग को हैंडल करता है, यह एक html फॉर्म लेता है। यह डेटा प्रत्यक्ष रूप से ऑब्जेक्ट पर फ़ील्ड हो सकता है और यह एक सामंजस्यपूर्ण प्रतीत होगा।

मैं आमतौर पर इस तरह की वस्तुओं का निर्माण करता हूं, जब मैं रूपांतरण, रचना कर रहा होता हूं, या सिर्फ उत्परिवर्तन के बारे में चिंता नहीं करना चाहता।

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

वस्तुएं संदेशों के बारे में हैं

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

मुख्य प्रश्न: इन दो वस्तुओं को एक दूसरे से बात करने की आवश्यकता क्यों है?

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

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

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

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


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

1
पोस्टमॉडर्न सिस्टम आर्किटेक्चर DCI संरचना-प्रेमी इंजीनियरों द्वारा बनाए गए चरम सार के बिना इसे संभालता है। कंप्यूटर को यह सोचना चाहिए कि उपयोगकर्ता क्या सोच रहा है, अन्य तरीके से नहीं। fulloo.info/doku.php?id=what_is_dci
सिस्को 2

@BenAaronson मुझे लगता है कि आप पर्याप्त ठोस प्रयास के साथ एकजुट अवधारणा के रूप में उस वस्तु को विकसित कर सकते हैं, लेकिन मैंने एक इकाई-फोकस के लिए चीजों को एक साथ बल देने के लिए एक प्रवृत्ति पाई है जो अलग होनी चाहिए। संस्थाएँ हमारे नामों में सीमाओं को प्रोत्साहित करती हैं, जो अच्छा है, लेकिन वे शुद्धता / पूर्णता की इस धारणा को भी साथ लाती हैं, जो चोट पहुँचाती है। सबसे हास्यास्पद शब्दों में, मैं FirstNameValidator ऑब्जेक्ट के लिए और एक नाम ऑब्जेक्ट के विरुद्ध हूं जो पहले और अंतिम नामों के लिए सत्यापन भी करता है।
स्टीव जैक्सन

1
एक और अच्छा उदाहरण: ericlippert.com/2015/04/27/wizards-and-warriors-part-one
Moby Disk

2
वस्तुएं संदेशों के बारे में हैं - स्टीव जैक्सन का जवाब - यह बिल्कुल सही है। एमओपी का अर्थ "संदेश" से नहीं है, जैसा कि द फादर ऑफ ओओ एलन के द्वारा कल्पना की गई थी जिन्होंने कहा कि बड़ा विचार संदेश है । और आगे, मुझे खेद है कि मैंने बहुत पहले इस विषय के लिए "ऑब्जेक्ट" शब्द गढ़ा था क्योंकि यह बहुत से लोगों को कम विचार पर ध्यान केंद्रित करने के लिए मिलता है।
राडोबोब

21

क्या कक्षाएं इकाई-कम वस्तुओं का प्रतिनिधित्व कर सकती हैं? यदि नहीं, तो वे खराब / अपूर्ण / गैर-ओओपी-केंद्रित क्यों हैं? क्या ऐसे तरीके हैं जिन्हें उन्हें बदलने / सुधारने की आवश्यकता है?

संक्षेप में, आप कुछ भी कर सकते हैं, लेकिन यह विशिष्ट परिदृश्य OOP सिद्धांतों के खिलाफ होगा :)

आप जो वर्णन कर रहे हैं, उसे कभी-कभी "उपयोगिता" वर्ग कहा जाता है - आमतौर पर कोड गंध का संकेत। आप कुछ तरीकों को एक साथ रखने के लिए कक्षाएं बनाने से बचना चाहते हैं।

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

आपको सामान्य वास्तुशिल्प पैटर्न पर एक नज़र डालनी चाहिए - उनमें से एक एमवीसी (मॉडल-व्यू-कंट्रोलर) है

अगर मुझे MVC का उपयोग करके आपके द्वारा सूचीबद्ध विधियों को वितरित करना था, तो यहां मैं यह करूंगा:

देखें वर्ग:

  • GetMotorDataFromHTMLForm ()

मॉडल क्लास (मोटर अनिवार्य रूप से):

  • GetMotorManufacturer ()
  • CanMotorHandleOperationConditions ()
  • CalculatePowerConsumption ()

नियंत्रक वर्ग (MotorsController):

  • GetAllMotors ()
  • GetMotorById ()
  • GetMotorByUserRequirements ()

ऐसा लगता है जैसे आप PHP का उपयोग कर रहे हैं; लारवेल पर नज़र रखने के लिए एक अच्छा एमवीसी ढांचा । अपने उदाहरणों में वे अच्छी तरह से वर्णन करते हैं कि कौन-सी विधियाँ हैं।

जानकारी का एक और अधिक सामान्य स्रोत, यह तय करने का तरीका है कि विधियाँ GRASP और SOLID सिद्धांत कहाँ हैं ।


धन्यवाद। संक्षेप में, यह मुझे दिखता है कि मेरे पास क्या है (मॉडल, दृश्य, आदि) में मिश्रित कुछ अशुद्धियों के साथ एक नियंत्रक वर्ग है। मतलब यह है कि कि अगर मैं नाम बदलने MotorOperationsके लिए MotorsControllerऔर यह थोड़ा साफ, मेरे कार्यों का संग्रह OOP के साथ लाइन में हो जाएगा?
डेनिस

@ डेनिस, जरूरी नहीं कि प्रत्येक कक्षा के तहत मेरे तरीकों का एक संग्रह हो। नियंत्रक एक वर्ग नहीं है जिसमें यह सब शामिल है :) यह वह वर्ग है जिसका आपके मॉडल पर संचालन होता है, और इससे अधिक कुछ नहीं। नियंत्रक की एकमात्र निर्भरता आम तौर पर डीएएल (डेटा एक्सेस लेयर) सीधे होगी, या ऐसी सेवाएं जो आपको डीएएल तक पहुंच प्रदान करती हैं। आप नियंत्रक से दृश्य कभी भी एक्सेस नहीं करना चाहते हैं (उदाहरण: getMotorDataFromHTMLForm), इसके बजाय, आपका दृश्य नियंत्रक पर निर्भर होना चाहिए।
एलेक्सस

2
क्या आप इस बारे में विस्तार से बता सकते हैं कि एक Utilsवर्ग कोड गंध का एक उदाहरण क्यों होगा? बस जिज्ञासु, जैसा कि मैंने खुद को Utilsकक्षा में लिपटे यादृच्छिक उपयोग कार्यों का आनंद लिया है, क्योंकि यह केवल स्टैंड-अलोन कार्यों के विपरीत है ... मेरे अनुभव में यह कोड को थोड़ा अधिक पठनीय बनाता है, लेकिन मेरा अनुभव सीमित है।
HC_

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

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

15

क्या कक्षाएं इकाई-कम वस्तुओं का प्रतिनिधित्व कर सकती हैं?

कर सकते हैं? हाँ। करनी चाहिए? शायद नहीं - या कम से कम, न कि कैसे आप चीजों को फिर से बना रहे हैं।

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

बस एक साथ संबंधित कार्यों के एक समूह को बांधना एक नाम स्थान या एक मॉड्यूल है - ओओपी पार्लेंस में ऑब्जेक्ट नहीं। वे उपयोगी हो सकते हैं, लेकिन वे समान नहीं हैं, और प्रभावी ढंग से काम करने के लिए एक अलग तरह के उपयोग / सोच की आवश्यकता होती है।


3
bundling a bunch of tangentially related functions together is a namespace: यह ऑब्जेक्ट ओरिएंटेड के बजाय प्रक्रियात्मक प्रतिमान की तरह लगता है।
डेनिस

@ डेनिस - बिल्कुल (या कार्यात्मक यदि आप इसे एक मॉड्यूल कहते हैं)। प्रतिमानों को मिलाना शक्तिशाली हो सकता है। या यह बहुत गन्दा हो सकता है।
तेलस्टीन जूल

या दोनों :) - - - - - -
एलेक्सस

@ डेनिस: या न ही - केवल एक साथ संबंधित कार्यों को बंडल करना किसी भी प्रतिमान में एक संदिग्ध अभ्यास है।
सुधाम

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

11

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

शुभकामनाएँ।


हां, यह लगभग ठीक है जो मैंने कहा होगा। एक वर्ग संज्ञा के लिए एक मॉडल से ज्यादा कुछ नहीं है । बस। न कुछ ज्यादा, न कुछ कम। एक वर्ग एक संज्ञा है, और विधियां क्रिया (या यदि आप चाहें तो संदेश) हैं। एक जूनियर इंजीनियर जो उन सरल शब्दों में सोचता है, इससे पहले कि उन उपमाओं के टूटने से पहले एक लंबा रास्ता तय किया जा सके (इसके विपरीत कि कक्षाएं भौतिक वस्तुओं का वर्णन कर रही हैं - एक ऐसी समानता जो लगभग आपकी पहली परियोजना पर टूटने लगती है)।
कैलफूल

7

नहीं (विपरीत सवाल पूछने के लिए संपादित शीर्षक!)

उदाहरण के लिए:

Public class MyRepository
{
    public MyObject GetObject(string id)
    {
        //get data from the DB and build an object
    }
}

या

Public class MyService
{
    public MyObject3 ProcessData(MyObject1 obj1, MyObject2 obj2)
    {
         //perform a process which is not a sole responsiblity of obj1 or obj2
    }
}

हालांकि, सामान्य तौर पर OOP के पीछे के आदर्श से दूर जाना है

public struct Car
{
    public Wheel[] Wheels;
}

public int CountWheelsOnCar(MyCarStruct car)
{
   return car.Wheels.Length;
}

सेवा

public class Car
{
    private Wheel[] wheels;
    Public int CountWheels()
    {
        return this.wheels.Length;
    }
}

क्या आपका मतलब है कि वे इकाई-कम वस्तुओं का प्रतिनिधित्व कर सकते हैं? (प्रश्न पर मैंने जो टिप्पणी छोड़ी है, उसे देखें।)
पैन्ज़रिसिस

3
मैं बहुत लंबे समय से OO की प्रोग्रामिंग कर रहा हूँ - जब मैं MyRepository को देखता हूं तो मैंने तुरंत अपने ड्रेसर पर एक कांच के कटोरे को सिक्कों के गुच्छा के साथ चित्रित किया और उसमें बकवास किया। अंदर पहुँचें और एक पैसा, या एक बटन पकड़ें ....
बिल K

@pan हाँ, मेरे उदाहरण में सेवा और रेपो की तरह
इवान

@ क्या तुम पुराने मूर्ख पागल हो !!! Thats MyButtonAndOrPennyBowl वर्ग! क्लीन कोडिंग फीट
इवान

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

5

मुझे लगता है कि वास्तविक दुनिया में किसी चीज़ की कल्पना तब मददगार होती है जब कक्षाओं को कोड करना आवश्यक नहीं है।

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

ज्यादातर ये "नियम" आप OO के बारे में जानेंगे, ये सिर्फ दिशा-निर्देश हैं जो आपको OO में सोचने के लिए उन्मुख करते हैं, जरूरी नहीं कि आप एक बार आप इसे दैनिक आधार पर कोड करने के लिए उपयोग कर रहे हों।

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


5

क्या किसी वस्तु को किसी इकाई का प्रतिनिधित्व करना है?

प्रश्न: कौन सी इकाई एक Loggerप्रतिनिधित्व करती है?

रूपक रूप से नहीं - शाब्दिक रूप से।

छात्रों को ओओपी की व्याख्या करते समय भौतिक दुनिया के अनुरूप वस्तुओं के साथ समझाने में मदद मिलती है।

एलन के - OOP के पिता में से एक - ने निम्नलिखित लिखा:

[...]

इसके मूल गर्भाधान के निम्नलिखित भाग थे।

  • मैंने एक नेटवर्क पर जैविक कोशिकाओं और / या व्यक्तिगत कंप्यूटर जैसी वस्तुओं के बारे में सोचा, केवल संदेशों के साथ संवाद करने में सक्षम
  • मैं डेटा से छुटकारा पाना चाहता था।

[...]

ओओपी टू मी का मतलब केवल मैसेजिंग, लोकल रिटेंशन और प्रोटेक्शन और है

राज्य-प्रक्रिया का छिपाना, और सभी चीजों का चरम देर से बंधन।

लगभग अविश्वसनीय एचडब्ल्यू वास्तुकला। मुझे एहसास हुआ कि द

सेल / पूरे कंप्यूटर रूपक डेटा से छुटकारा मिल जाएगा

स्रोत

इससे वस्तुओं को सबसे अच्छी तरह समझा जाता है

  • ऑटार्किक ऑब्जेक्ट डेटा को छुपा / छुपा देते हैं

  • संदेशों के माध्यम से अन्य वस्तुओं के साथ संचार

क्या कक्षाएं इकाई-कम वस्तुओं का प्रतिनिधित्व कर सकती हैं?

निश्चित रूप से: के बारे में सोचो Math


अपने उदाहरण के बारे में:

उदाहरण: क्या किसी वर्ग को मोटरपरेशन या मोटरएक्शंस कहा जा सकता है, जहां कोई इकाई नहीं है, लेकिन कक्षा के अंदर की विधियां इस तरह की चीजें बनाती हैं

  • getMotorDataFromHTMLForm ()

  • getMotorManufacturers ()

  • selectMotorFromUserRequirements ($ आवश्यकताओं)

  • canMotorCanHandleOperatingConditions ($ की स्थिति)

  • computePowerConsumptionForMotor ($ आईडी)

यह तय करने के लिए कि इन तरीकों को कहां रखा जाए, आपको इस पर एक नज़र डालनी होगीresponsibilities : कौन क्या करने के लिए सम्मानजनक है

getMotorDataFromHTMLForm ()

इस तरह की विधि का संदर्भ मोटर-ऑब्जेक्ट का निर्माण होगा । किसी प्रपत्र के माध्यम से प्राप्त डेटा से स्वयं को बनाना मोटर की जिम्मेदारी नहीं है । कम से कम दो ऑब्जेक्ट शामिल हैं; एक मोटर है और दूसरा मोटर का निर्माता है

getMotorManufacturers ()

वह विशिष्ट संदर्भ जिसमें कोई इस तरह की विधि लिखता है service

selectMotorFromUserRequirements ($ आवश्यकताओं)

यह भी एक- serviceसंदर्भ में इस्तेमाल किया जाएगा

canMotorCanHandleOperatingConditions ($ की स्थिति)

यह एक motor-object का सवाल है

computePowerConsumptionForMotor ($ आईडी)

यह भी एक सवाल सबसे अच्छा एक मोटर ही पूछा है।


tl; डॉ

के रूपक objectsके रूप में शारीरिक रूप से वस्तुओं सहायक की तुलना में अधिक परेशान है।


वाह आपका जवाब OOP में कुछ जीवन साँस लेता है! मैं कहना है कि मैं यह मतलब नहीं था है भौतिक यह सब के लिए एक अंत के रूप में। मेरे प्रश्न का आशय अधिक था "एक वस्तु को thingडेटा के साथ होना चाहिए जहां डेटा स्पष्ट रूप से उस चीज़ और कार्यों से संबंधित है जो स्पष्ट रूप से उस डेटा पर काम करता है जो चीज़ से संबंधित है"। तो इस मामले में लकड़हारा, जबकि कोई भौतिक चीज नहीं है, यह एक अवधारणा है "शारीरिक लॉग बुक"। क्या उसके पास ऐसा डेटा है जो उसके राज्य के लिए मुख्य है, और यह केवल क्षणिक नहीं है, जो कार्यान्वयन और व्याख्या पर निर्भर हो सकता है .. और ऐसा बहुत कुछ है जहाँ मेरा सवाल था ..
डेनिस

लेकिन हां, जवाबों को मेरे शारीरिक पूर्वाग्रह को संबोधित करना था
डेनिस

3

हां, आप यह कर सकते हैं। लेकिन आप अनिवार्य रूप से एक प्रक्रियात्मक पुस्तकालय के रूप में समान कार्यक्षमता प्रदान करने के लिए एक वर्ग बना रहे हैं। ऐसा करने का एकमात्र कारण यह है कि यदि आपकी भाषा में प्रक्रियात्मक मॉड्यूल (जैसे, जावा या रूबी) का अभाव है।

प्रक्रियात्मक मॉड्यूल वाली भाषा में (मुझे लगता है कि PHP के पास प्रक्रियात्मक मॉड्यूल हैं), आप बस एक प्रक्रियात्मक मॉड्यूल का उपयोग करने पर विचार कर सकते हैं।

आप अपनी कक्षा को फिर से डिजाइन करने पर भी विचार कर सकते हैं इसलिए कक्षा का एक उदाहरण एक सुसंगत वस्तु का प्रतिनिधित्व करता है।

लेकिन केवल OO नोटेशन का उपयोग करें जब यह आपको अतिरिक्त शक्ति दे रहा है, न कि केवल OO होने के लिए!


3

आम आदमी के शब्दों में

  • आप जो वर्णन करते हैं उसे उपयोगिता वर्ग कहा जाता है।
  • इसकी कोई स्थिति नहीं है, जिसका अर्थ है कि आपको वास्तव में इसके कई उदाहरणों की आवश्यकता नहीं होगी
  • सभी विधियां स्थिर हैं, जिसका अर्थ है कि आपको सब कुछ मापदंडों के रूप में पारित करना होगा

इस तरह की कक्षाएं मौजूद हैं, उदाहरण के लिए जावा एसडीके के पास कलेक्शन क्लास है जिसमें विशेष रूप से स्थिर तरीके शामिल हैं जो संग्रह या रिटर्न को संचालित करते हैं।

तो उत्तर होगा नहीं, सभी वर्गों को एक डोमेन इकाई से मॉडल करने की आवश्यकता नहीं है।

दूसरी ओर, ऐसी कक्षाएं केवल कुछ ही हैं या एक ओओपी भाषा में किए गए कार्यक्रम में कुछ ही होनी चाहिए, क्योंकि ओओएम की वास्तविक शक्ति बहुरूपता और एनकैप्सुलेशन में होती है।

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


2

नहीं, एक वर्ग केवल उस चीज का प्रतिनिधित्व करता है जिसे तत्काल किया जा सकता है, जिसमें सदस्य हैं, और उससे विरासत में लिया जा सकता है।

वास्तव में, आपकी भाषा में स्थिर कक्षाएं हो सकती हैं, जो एक से अधिक बार त्वरित रूप से भी नहीं होती हैं।

.NETMath एक "पेशेवर" वर्ग का एक बेहतरीन उदाहरण है जो किसी भी इकाई का प्रतिनिधित्व नहीं करता है (जब तक कि आप गणित क्या है इसके बारे में दार्शनिक प्राप्त करना चाहते हैं ...), और इस तरह के एक वर्ग के वैध उपयोग के मामले का वर्णन करने के लिए भी होता है। इसकी केवल विधियाँ और 2 क्षेत्र हैं (दोनों व्यक्तिगत स्थिरांक का प्रतिनिधित्व करते हैं)।

एक समान पुस्तकालय का वर्ग पदानुक्रम Math.Net, गणितीय / संख्यात्मक विधियों को प्रकारों के अनुसार कक्षाओं में समूहित करता है। यहां कक्षाएं एक इकाई नहीं, बल्कि एक तार्किक श्रेणी का प्रतिनिधित्व करती हैं।

मैं खुद अक्सर (स्थिर) कक्षाएं बनाता हूं जो संबंधित (स्थिर) कार्यों के एक बैग से अधिक कुछ नहीं हैं, या एक केंद्रीय स्थान में आसानी से वर्गीकृत स्थिरांक का एक गुच्छा है। मैं यह दावा नहीं करूंगा कि यह अच्छा डिज़ाइन है, लेकिन कभी-कभी यह सबसे सीधा समाधान है।


1
तथ्य यह है कि गणित से संबंधित तरीकों को .NET / BCL में एक अलग वर्ग में रखा जाता है क्योंकि स्थैतिक विधियाँ एक आवश्यकता या डिज़ाइन विचार नहीं है, लेकिन इस तथ्य का एक परिणाम है कि C # में कोई भी मुक्त-विधियाँ नहीं हैं। C ++ में ऐसे कार्यों को केवल एक नामस्थान में वर्गीकृत किया जा सकता है।
व्लाद

1

आपके सवालों के जवाब अंततः इस बात पर टिका है कि कोई "क्लास" और "एंटिटी" जैसी शर्तों को कितनी सही तरह से परिभाषित करता है। आपने बाद वाले को परिभाषित करने का एक अच्छा काम किया, जिससे भौतिक और वैचारिक दोनों तरह की संस्थाओं को अनुमति मिली। लेकिन शुद्धतावादियों के लिए "वर्ग" शब्द हमेशा "एक विशेष आंतरिक प्रतिनिधित्व के साथ वस्तुओं को तात्कालिक करने के लिए एक कारखाना" होगा और व्यावहारिकता के लिए यह शब्द उन जावा या सी ++ चीजों को शामिल करेगा जो शुद्धतावादियों द्वारा तिरस्कृत हैं। "ओओपी" शब्द के लिए डिट्टो, जो व्यावहारिक रूप से जावा और सी ++ कह सकता है, लेकिन कौन से शुद्धतावादी का मतलब होगा कि एलन के का क्या मतलब है जब उन्होंने टिप्पणी की थी "" मैंने शब्द वस्तु उन्मुख का आविष्कार किया था, और मैं बता सकता हूं कि मैंने ऐसा नहीं किया। C ++ को ध्यान में रखें]] ( तो क्या * * एलन का का वास्तव में "वस्तु उन्मुख" शब्द से मतलब है? )।

यदि आप व्यावहारिक दृष्टिकोण लेते हैं, तो आप अपने उदाहरण-कम उपयोगिता वर्गों को स्वीकार कर सकते हैं। लेकिन शुद्ध दृष्टिकोण अधिक दिलचस्प है। Kay के अनुसार OOP, हमेशा कक्षाओं की तुलना में संदेशों के बारे में अधिक था । तो अपने सवालों के लिए:

क्या कक्षाएं इकाई-कम वस्तुओं का प्रतिनिधित्व कर सकती हैं?

सं। कक्षाएं वस्तुओं को वर्गीकृत करती हैं। कक्षाएं उन संस्थाओं की परिभाषा के आधार पर हैं जिनसे आप एक संदेश भेजते हैं जैसे कि newएक वस्तु का उत्पादन करने के लिए। एक वस्तु एक वर्ग से बनी इकाई है। कक्षाएं निर्माण, और वास्तव में वर्गीकृत, वस्तुओं के लिए मौजूद हैं। यही क्लास करते हैं। कक्षाएं ऑब्जेक्ट बनाती हैं। हम वस्तुओं को वर्गीकृत करने के लिए कक्षाओं का उपयोग करते हैं। इसलिए यदि C केवल विधियों का एक बंडल है जो तात्कालिकता या उपवर्ग की अनुमति नहीं देता है, तो C द्वारा वर्गीकृत कोई भी वस्तु नहीं हो सकती है, इसलिए C एक वर्ग नहीं है।

यदि नहीं, तो वे खराब / अपूर्ण / गैर-ओओपी-केंद्रित क्यों हैं?

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

अब, अपने विशिष्ट उदाहरणों में से एक को देखने के लिए, आप उस MotorOperationsवर्ग के बारे में पूछें, जिससे आप computePowerConsumptionForMotorतर्क के साथ संदेश भेज सकते हैं id। कि बुरा है? कम से कम यह टेल डोन्ट आस्क प्रिंसिपल का उल्लंघन नहीं करता है । हम करते है एक मोटर वर्ग बनाने के लिए और इसे भेजने के लिए powerConsumptionसंदेश? शायद समय का 100% नहीं, लेकिन शायद ऐसी चीजों को करने की कोशिश करने से आपके कोड के बारे में कुछ अच्छी जानकारी प्राप्त होगी। या, यह छोटी कक्षाओं के विस्फोट का कारण बन सकता है जो खराब होगा।

क्या ऐसे तरीके हैं जिन्हें ओओपी के अनुरूप होने के लिए उन्हें वैचारिक रूप से बदलने / सुधारने की आवश्यकता है?

यदि "ओओपी करना" आपके लिए महत्वपूर्ण है, तो आप एक सिस्टम को उन घटकों में देखना चाहते हैं जो एक-दूसरे को संदेश भेजकर संवाद करते हैं। यह वही है जो ओओपी है , या कम से कम शब्द के संवेग को ध्यान में रखा गया है। इस दृष्टि से उपयोगिता वर्ग OOP नहीं हैं। लेकिन कुछ लोगों के लिए, वे हो सकते हैं।

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

टीएल; डीआर - विधि बंडल हमेशा खराब नहीं होते हैं। पहले तत्काल कक्षाओं का उपयोग करने का प्रयास करें। केवल ज़रूरत पड़ने पर "मॉड्यूल" पर वापस जाएं।


0

दिए गए उदाहरणों को लेना:

getMotorDataFromHTMLForm()
selectMotorFromUserRequirements($requirements)

ये "फ़ैक्टरी" विधियों की तरह दिखते हैं, जो किसी Motorवस्तु को लौटा देगा । दूसरी बात यह है कि या तो आप आवश्यकताओं को पूरा करने के लिए एक नई वस्तु बना रहे हैं, या आपके पास एक डेटाबेस या इन-मेमोरी मोटर्स का संग्रह है जिसकी आप जांच कर रहे हैं। जिस स्थिति में यह उस पर एक विधि होना चाहिए। या यह आवश्यकताओं वस्तु पर एक विधि हो सकती है।

getMotorManufacturers()

आप उन्हें कहाँ से प्राप्त कर रहे हैं? यही इसका तरीका होना चाहिए।

canMotorCanHandleOperatingConditions($conditions)
computePowerConsumptionForMotor($id)

ये ऐसे दिखते हैं, जैसे इनकी विधियाँ होनी चाहिए Motor


हाँ। यह "संभवतः असंबंधित विधियों का बंडल" है (संक्षेप में BOPUM)। मैं कारखाने और मोटर टिप्पणियों से सहमत हूं। getMotorManufacturersडेटाबेस से सभी मोटर निर्माताओं को वापस करना है। मुझे यकीन नहीं है कि वह कहाँ जाता है मुझे इस BOPUM को उन चीजों को लगाने में समय लगेगा जहां उन्हें जाने की जरूरत है ..
डेनिस

मैं getMotorManufacturersडेटाबेस से प्राप्त कर रहा हूं । डेटाबेस में एक विधि नहीं हो सकती है ... वर्तमान में मेरे पास एक DataMapper पैटर्न है जो डेटाबेस पर सवाल उठाता है, एक सरणी को आरंभीकृत करता है, और इसे मोटर ऑब्जेक्ट्स (निर्माता जानकारी भी युक्त) के साथ पॉप्युलेट करता है, और फिर उस सरणी को कॉलर पर लौटाता है। कॉल करने वाला मेरा MotorOperationsवर्ग है, जो बदले में एक ProductSelectionवर्ग से बुलाया जाता है (जिसमें एक एल्गोरिथ्म होता है जिसका उपयोग मोटर्स का चयन करने के लिए किया जाता है, और लोड की गई मोटर जानकारी उस एल्गोरिथ्म का डेटा है)
डेनिस

0

ऑब्जेक्ट, तरीकों और डेटा का एक संग्रह है जिसमें उच्च सामंजस्य होता है। वे एक वर्ग से संबंधित हैं क्योंकि वे बहुत अधिक परस्पर संबंधित हैं और राज्य को बनाए रखा जाता है।

यह सच है कि क्या आप बड़े फ्रंट डिज़ाइन का उपयोग करते हैं और सब कुछ मॉडल करने का प्रयास करते हैं, या आकस्मिक डिज़ाइन जहाँ आप उस समय वस्तु को फिट करते हैं और उस वस्तु को विकसित करते हैं जो उस समय सिस्टम की जरूरतों को पूरा करता है।

यदि आपके पास राज्य को बनाए रखने का कोई कारण नहीं है, तो संभवतः आपके पास किसी वस्तु को त्वरित करने का कोई कारण नहीं है, जिसका अर्थ है कि कक्षा होने का कोई कारण नहीं है। जब तक, आपके द्वारा उपयोग की जाने वाली भाषा में क्लास का उपयोग करने के अलावा किसी नाम स्थान को परिभाषित करने की क्षमता नहीं है। जिसमें कक्षा का उपयोग ठीक होना चाहिए क्योंकि यह मुहावरेदार होगा।

मैं ठेठ के अलावा इस तरह से कक्षाओं का उपयोग करने के लिए किसी भी नकारात्मक पहलुओं के बारे में नहीं सोच सकता। "नामस्थान" को तत्काल करने से आपकी अनावश्यक लागत और जटिलता को आमंत्रित किया जा सकता है। इस कोड का समर्थन करने वाला कोई भी व्यक्ति आश्चर्यचकित होगा कि डेटा में अतिरिक्त संज्ञानात्मक भार (प्रति व्यक्ति एक बार होने वाली लागत) कितनी है। यह बिना किसी अतिरिक्त मूल्य के एक असामान्य उपयोग है।

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