2008-10-28 11 views
158

मैं ऑब्जेक्ट उन्मुख प्रोग्रामिंग को समझता हूं, और लंबे समय तक ओओ प्रोग्राम लिख रहा हूं। लोग पहलू उन्मुख प्रोग्रामिंग के बारे में बात करते प्रतीत होते हैं, लेकिन मैंने कभी नहीं सीखा है कि यह क्या है या इसका उपयोग कैसे किया जाए। बुनियादी प्रतिमान क्या है?पहलू उन्मुख प्रोग्रामिंग क्या है?

इस सवाल से संबंधित है, लेकिन काफी यह नहीं पूछता है:

Aspect-Oriented Programming vs. Object Oriented Programming

+0

Imao, प्रश्न में दिए गए लिंक को स्वीकार कर लिया कि यहां से स्पष्ट और पूरी तरह से इस सवाल का जवाब है। इस प्रश्न को पढ़ने वाले लोग इसे पहले पढ़ सकते हैं। –

उत्तर

138

AOP के पते पार काटने की समस्या से संबंधित है है, जो कि अलग अलग में दोहराया है कोड के किसी भी प्रकार होगा विधियों और सामान्य रूप से लॉग इन या सत्यापन के साथ अपने मॉड्यूल में पूरी तरह से refactored नहीं किया जा सकता है। तो, AOP के साथ मुख्य कोड से बाहर सामान छोड़ और इतने की तरह खड़ी इसे परिभाषित कर सकते हैं:

function mainProgram() 
{ 
    var x = foo(); 
    doSomethingWith(x); 
    return x; 
} 

aspect logging 
{ 
    before (mainProgram is called): 
    { 
     log.Write("entering mainProgram"); 
    } 

    after (mainProgram is called): 
    { 
     log.Write( "exiting mainProgram with return value of " 
        + mainProgram.returnValue); 
    } 
} 

aspect verification 
{ 
    before (doSomethingWith is called): 
    { 
     if (doSomethingWith.arguments[0] == null) 
     { 
      throw NullArgumentException(); 
     } 

     if (!doSomethingWith.caller.isAuthenticated) 
     { 
      throw Securityexception(); 
     } 
    } 
} 

और फिर एक पहलू-बुनकर इस में कोड को संकलित करने के लिए किया जाता है:

function mainProgram() 
{ 
    log.Write("entering mainProgram"); 

    var x = foo(); 

    if (x == null) throw NullArgumentException(); 
    if (!mainProgramIsAuthenticated()) throw Securityexception(); 
    doSomethingWith(x); 

    log.Write("exiting mainProgram with return value of "+ x); 
    return x; 
} 
+7

क्या इसके लिए आपको भाषा समर्थन की आवश्यकता है? आपका उदाहरण किस भाषा में है? – Sophie

+3

यह छद्म कोड है लेकिन सबसे प्रसिद्ध उदाहरण AspectJ है, जो जावा का एओपी संशोधन है, जो कटपॉइंट्स नामक एक समान तकनीक का उपयोग करता है। –

+15

असल में, उन्हें पॉइंटकूट कहा जाता है :) –

0

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

8

दुर्भाग्यवश, एओपी को सामान्य मध्य-बड़े आकार के संगठन में वास्तव में उपयोगी बनाने में आश्चर्यजनक रूप से मुश्किल लगती है। (संपादक समर्थन, नियंत्रण की भावना, तथ्य यह है कि आप कोड-रोट की ओर जाने वाली महत्वपूर्ण चीजों से शुरू होते हैं, लोग अपने परिवारों के घर जा रहे हैं, आदि)

मैंने अपनी उम्मीद समग्र उन्मुख प्रोग्रामिंग पर रखी, जो कुछ और अधिक यथार्थवादी है। यह कई लोकप्रिय विचारों से जुड़ता है और आपको कुछ वाकई अच्छा देता है। एक ऊपर और आने वाले कार्यान्वयन यहाँ पर

देखो: qi4j.org/

पी एस। दरअसल, मुझे लगता है कि एओपी के साथ सुंदरियों में से एक भी इसकी एचिलिस एड़ी है: इसका गैर-घुसपैठ करने वाला, अगर लोग इसे कर सकते हैं तो लोगों को अनदेखा कर दें, इसलिए इसे अधिकांश संगठनों में द्वितीयक चिंता के रूप में माना जाएगा।

+2

इसमें अभी भी कुछ बहुत ही वैध अंक हैं, हालांकि – Ash

3

पूर्णता (बज़र) के लिए एक नकली से कॉपी किया गया:

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

5

पूर्णता (आइंस्टीन) के लिए एक नकली से कॉपी किया गया:

क्लासिक उदाहरण सुरक्षा और प्रवेश कर रहे हैं।सुरक्षा के नियंत्रण के लिए x के ऑर्डर को जांचने के लिए अपने आवेदन के भीतर कोड लिखने या सुरक्षा पहुंच नियंत्रण के लिए ऑब्जेक्ट जेड की जांच करने के बजाय सामान्य कोड के "बैंड से बाहर" एक भाषा संकुचन है जो व्यवस्थित रूप से सुरक्षा को इंजेक्ट कर सकता है या दिनचर्या में लॉग इन कर सकता है जो उन्हें नाटकीय रूप से नहीं रखता है ऐसा तरीका है कि भले ही आपका कोड इसकी आपूर्ति नहीं करता है - इसकी देखभाल की जाती है।

एक और ठोस उदाहरण ऑपरेटिंग सिस्टम फ़ाइल पर अभिगम नियंत्रण प्रदान करता है। एक सॉफ्टवेयर प्रोग्राम को एक्सेस प्रतिबंधों की जांच करने की आवश्यकता नहीं होती है क्योंकि अंतर्निहित प्रणाली इसके लिए काम करती है।

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

2

कार्रवाई

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

1

एओपी का एक उदाहरण है, यह एक उदाहरण के रूप में वसंत एओपी का उपयोग करता है। उदाहरण समझने में काफी आसान है।

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

संदर्भ: http://www.mkyong.com/spring/spring-aop-examples-advice/

+0

कंप्यूटिंग में, पहलू उन्मुख प्रोग्रामिंग (एओपी) एक प्रोग्रामिंग प्रतिमान है जिसका उद्देश्य पार-कटौती चिंताओं को अलग करने की अनुमति देकर मॉड्यूलरिटी बढ़ाने की है। –

0

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

यहां नेट में एक उदाहरण है। यह विधि कॉल को रोकने के लिए प्रॉक्सी कक्षाओं का उपयोग करता है और सैफ विधि कॉल के बाद कोड निष्पादित करता है।

Aspect Oriented Programming (AOP) in .NET Core and C# using AutoFac and DynamicProxy