2011-01-27 12 views
21

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

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

प्रश्न: क्या यह सच है, या मैं पूरी तरह से बंद हूं? अगर मैं पूरी तरह गलत हूं, तो क्या कोई एओपी क्या है, इसके लिए एक संक्षिप्त, लेमेन स्पष्टीकरण दे सकता है, तथाकथित पहलू का उदाहरण, और शायद एक साधारण कोड उदाहरण भी प्रदान कर सकता है?

+4

अच्छा सवाल भी अच्छी तरह से पूछताछ की। –

उत्तर

12

चिंता का पृथक्करण सॉफ्टवेयर विकास में एक मौलिक सिद्धांत है, डेविड पारनास On the Criteria To Be Used in Decomposing Systems into Modules द्वारा एक क्लासिक पेपर है जो आपको विषय के साथ पेश कर सकता है और Uncle Bob's SOLID Principles भी पढ़ सकता है।

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

आपको घोषणात्मक प्रोग्रामिंग का उपयोग करना होगा, जो कि .NET में किसी विधि द्वारा एक विधि या संपत्ति को एनोटेट कर सकता है और बाद में जो हुआ वह उन टिप्पणियों के आधार पर रनटाइम में कोड का व्यवहार बदल रहा है।

आप Sommerville's Software engineering book

उपयोगी लिंक्स C2 wiki CrossCuttingConcern, MSDN में इस विषय पर एक अच्छा अध्याय पा सकते हैं, How to Address Crosscutting Concerns in Aspect Oriented Software Development

+0

जानी - उपयोगी प्रतिक्रिया और लिंक के लिए धन्यवाद। मुझे उन्हें "पचाने" के लिए कुछ समय लगेगा, लेकिन मुझे यकीन है कि सप्ताहांत के बाद मेरे पास अधिक शिक्षित प्रश्न होंगे। मैं इस प्रश्न का उत्तर अब मानता हूं, क्योंकि बाद के प्रश्न अधिक विशिष्ट होंगे। एक बार फिर धन्यवाद! – Eugie

+0

मेरी खुशी दोस्त, अगर मैं आपकी मदद कर सकता हूं तो मुझे खुशी होगी, शुभकामनाएं –

+2

एओपी को समझने के लिए अच्छी तरह से व्याख्यात्मक उदाहरण http://stackoverflow.com/questions/232884/aspect-oriented-programming-vs-object-oriented -programming/232,918 # 232,918 –

0

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

0

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

2

एओपी एक ऐसी तकनीक है जहां हम क्रॉस कटिंग चिंताओं (लॉगिंग, अपवाद हैंडलिंग, ....) को अपने कोड से अपने स्वयं के पहलू में निकालें और हटा दें। हमारे मूल कोड को केवल व्यावसायिक तर्क पर केंद्रित करते हुए छोड़कर। न केवल यह हमारे कोड को अधिक पठनीय, रखरखाव योग्य बनाता है लेकिन कोड भी DRY है।

यह बेहतर एक उदाहरण से समझाया जा सकता:

Aspect Oriented Programming (AOP) in the .net world using Castle Windsor या Aspect Oriented Programming (AOP) in the .net world using Unity

संबंधित मुद्दे