मैं एडम के उत्तर में एक और उदाहरण जोड़ना चाहता हूं।
पहलुओं का उपयोग करना आपके सॉफ़्टवेयर के मॉड्यूलरलाइज़ेशन को बेहतर बनाने का एक तरीका है, साथ ही ओओपी है, सिवाय इसके कि ओओपी "लंबवत" लागू होता है, जबकि एओपी "क्षैतिज" लागू होता है।
तो, सलाह के दौरान कुछ मानदंडों का जवाब देने वाले सभी तरीकों के व्यवहार को क्षैतिज रूप से संशोधित करने के लिए सलाह का उपयोग किया जा सकता है, सलाह में aften कोड को कुछ डेटा की आवश्यकता होगी, और आईटीडी उन क्षेत्रों को "क्षैतिज" जोड़ना संभव बनाता है एक ही समय में एक संकलन इकाई (पहलू) संबंधित डेटा और कोड में शामिल होता है।
आप आईटीडी क्षेत्रों के माध्यम से डेटा जोड़ रहे हैं के बाद से, आप शायद भी कुछ विधि की पेशकश करने के लिए एक सेटर/गेटर की तरह उन क्षेत्रों में हेरफेर करने, चाहता हूँ।
मैं इसे कई बार अलग तरीके से व्यक्त करने की कोशिश की, मुझे आशा है कि यह समझना आसान है।
आपको एक उदाहरण देने के लिए, मान लें कि आपके पास एक ग्राफिकल संपादन प्रोग्राम है, जहां उपयोगकर्ता कई आकारों को बना, हटा और प्रदर्शित कर सकता है (सुंदर कैननिकल एएच?: डी)।
आकारों में बहुत अधिक डेटा है, उदाहरण के लिए उनके पास एक रंग, निर्देशांक आदि है .. जो सही ढंग से कक्षा से संबंधित हैं। हालांकि, चूंकि यह एक वेब 3.0 एप्लिकेशन है, इसलिए आप चाहते हैं कि उपयोगकर्ता एक ही ड्राइंग पर सहयोग करने में सक्षम हों, जिसका अर्थ है कि प्रत्येक आकार को यह बदला जाना चाहिए कि यह कब बदला जाता है, अगर इसे अन्य उपयोगकर्ताओं को बताया गया है कि आकार बदल गया है, तो इसे गीला करें कुछ उपयोगकर्ता द्वारा लॉक किया गया है जो वास्तव में इसे खींच रहा है ..
आप इसे सरल ओओपी में कर सकते हैं, आकार में प्रासंगिक भागों को लागू कर सकते हैं या जो भी आपकी मूल कक्षा है, लेकिन आप अपने सभी सेटर्स को " .setDirty (सत्य) "या इसी तरह की चीजें।
इसके बजाय, आप एओपी जाने और इसे एक पहलू में लागू करने का निर्णय लेते हैं। इस मामले में, आप आसानी से सभी सेटर्स के बाद एक सलाह जोड़ सकते हैं, लेकिन आपको "गंदे" बुलियन, या यहां तक कि गुणों की एक सूची भी स्टोर करने की आवश्यकता होगी, यदि आप अपने नेटवर्क प्रोटोकॉल को केवल परिवर्तनों के डेल्टा को अनुकूलित करना चाहते हैं।
आप की तरह
public aspect ShapesAreDirtyThings {
private boolean Shape.dirty;
after(Shape s) : execution(* Shape+.set*(..)) {
s.dirty = true;
// Set some other global field, start a thread to communicate
// to other users about the change, whatever ..
}
public boolean Shape.isDirty() {
return s.dirty;
}
public boolean Shape.findDirtyChildren() { // whatever
}
इसे लागू कर सकता है यह कुछ भी नहीं है आप आम AOP के साथ ऐसा नहीं कर सकते है, एक भी संकलन इकाई सलाह में encapsulating की बस एक बात है, कि सलाह की जरूरत डेटा, और विधियों कि अंततः होगा है उस डेटा पर काम करें।