Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π°ΡΠΏΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠΎΠΈΡΠΊ ΡΠΎΡΠ΅ΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π°ΡΠΏΠ΅ΠΊΡΠ° Π² Aspect.NET ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ (Aspect#) ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ±ΠΎΡΠΊΠΈ (Weave.NET). ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π΄Π²Π° ΠΏΡΠΎΡ ΠΎΠ΄Π°: ΠΏΠΎΠΈΡΠΊ ΡΠΎΡΠ΅ΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅. ΠΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΏΡΠΎΡ ΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
- Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
- ΠΡΠ΄Π΅ΡΠΆΠΊΠ°
- ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
- ΠΡΡΠ³ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ
- ΠΠΎΠΌΠΎΡΡ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
- Π¦Π΅Π»ΠΈ ΠΈ Π·Π°Π΄Π°ΡΠΈ
- ΠΡΠΈΡΠΈΠ½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ Π΅Π΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΡ
- ΠΠ»Π°Π²Π° 1. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΠΠ
- 1. 1. ΠΡΡΠΎΡΠΈΡ Π²ΠΎΠΏΡΠΎΡΠ° ΠΈ ΠΎΠ±Π·ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΠΠ
- 1. 2. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΈΠ΄Π΅ΠΈ ΠΠΠ
- 1. 3. ΠΠ±Π·ΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΠΠ
- 1. 2. 1. Π‘ΠΈΡΡΠ΅ΠΌΠ° AspectJ
- 1. 2. 2. Hyper/J
- 1. 2. 3. Spring ΠΠΠ
- 1. 2. 4. Spring.NET ΠΠΠ
- 1. 2. 5. PostSharp
- 1. 2. 6. NAspect
- 1. 2. 7. Aspect#
- 1. 2. 8. AspectDNG
- 1. 2. 9. S2AOP.NET
- 1. 2. 10. Wicca
- 2. 1. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ
- 2. 2. ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Aspect.NET
- 2. 2. 1. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Aspect.NET
- 2. 3. ΠΠ΅ΡΠ°ΡΠ·ΡΠΊ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² Aspect.NET.ML
- 2. 3. 1. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠ°
- 2. 3. 2. ΠΡΠ°Π²ΠΈΠ»Π° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠ°
- 2. 3. 3. Π‘Π°ΠΌΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ²: AspectDescription
- 2. 3. 4. ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Aspect.NET
- 2. 4. ΠΡΠΈΠΌΠ΅ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π·Π°Π΄Π°Ρ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Aspect.NET
- 2. 4. 1. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ
- 2. 4. 2. ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
- 2. 4. 3. ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
- 2. 4. 4. ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΎΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π² ORM-ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
- 3. 2. 1. ΠΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² ΠΠΠ
- 3. 2. 2. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ Aspect.NET Framework
- 3. 2. 3. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Aspect. log4net
- 3. 2. 4. ΠΠΏΡΠΎΠ±Π°ΡΠΈΡ Aspect.NET Framework ΠΈ Aspect. log4net Π² ΡΠΎΡΡΠ°Π²Π΅ ΡΠΈΡΡΠ΅ΠΌΡ Aspect.NET Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π°ΡΠΏΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ° Π΄ΠΎΠ»Π³ΠΈΠ΅ Π³ΠΎΠ΄Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΠΌΠΈ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ (ΠΠ). ΠΠ΅Π· ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ·Π½Π°Π½Π½ΡΠΌ ΠΏΠΎ ΠΏΡΠ°Π²Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ (ΠΠΠ) [9]. ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π΅ΡΡΡΠΈΠ»Π΅ΡΠΈΡ ΠΎΠ½ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΠΎ ΡΠΊΠΎΡΠ΅Π½ΠΈΠ»ΡΡ Π² ΡΡΠ΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΠ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ. ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ΅ΡΠΈΠ» ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π²ΡΠΈΡ Π² Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠ΅ — ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅. Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΊΠ»Π°ΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΠΠ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ Π²ΡΠ΅ ΠΆΠ΅ Π½Π΅ ΡΠ΅ΡΠ°Π΅ΡΡΡ Π² Π»ΡΡΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅. ΠΡΠ΅Π³Π΄Π° ΠΎΡΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΡΠ΅Π»ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π°ΡΡΠ°ΡΡΡ Π²ΡΠ½Π΅ΡΠ΅Π½ΠΈΡ ΠΈ' ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΈΠΌΠ΅Π½ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, use-case Π°Π½Π°Π»ΠΈΠ· [11], ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ½Π΅ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΡΠ΅ΡΠ°ΡΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π·Π°Π΄Π°ΡΠΈ, ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΠ΅ΡΠΊΠΎ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΈΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠΎΠ², Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡ ΠΈ, Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½Ρ ΠΏΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡ ΡΠ΄ΡΠ°Ρ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΅Π³ΠΎ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ. ΠΠ°ΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π°ΡΠ½ΠΎΠ΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΠ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ Π·Π°Π΄Π°ΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΈΡΡ ΠΠΠ-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ.
ΠΡΠΏΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΠ (Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ — Π°ΡΠΏΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΠΠ) [12, 13, 10] ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΊΡΡΠ³Π° Π·Π°Π΄Π°Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ².
ΠΡΠΏΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ½Π΅ΡΡΠΈ ΡΠΊΠ²ΠΎΠ·Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ (cross-cutting concerns) [12] — ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ, ΡΠ°ΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎ ΠΊΠΎΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠ΅ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, — ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΏΡΠΎΡΠ°Ρ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΡΡΡΠΊΡΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠΎΡ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ ΡΠΊΠ²ΠΎΠ·Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ [10]:
β’ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ (security) — Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ (ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ) — ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ ΡΠ΅Π»ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Ρ. Π΄.;
β’ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ (reliability) — ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π² ΠΊΠ»Π°ΡΡΠ°Ρ , Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠΉ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Ρ. Π΄.;
β’ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΌΠΏΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° (multi-threaded safety)1 — ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ ΡΠΎΠ±ΡΡΠΈΡΠΌ, Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΊΠΎΠ² ΠΊΠΎΠ΄Π°, Π²Π·Π°ΠΈΠΌΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½ΠΈΠΌ ΠΈ Π΄Ρ.;
β’ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (logging and profiling) — ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π°ΡΠ°Π»Π° ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°), Π²ΡΠ²ΠΎΠ΄ ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΡΠ±ΠΎΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Ρ. Π΄.
ΠΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π½ΠΎΠ²ΡΡ ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎΠ²ΡΡ Π²ΠΈΠ΄ΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ². ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π²ΡΠ΅ ΡΠ°Π·Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° — Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·, ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° — Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ, ΠΏΠΎΠΌΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° Π½ΠΎΠ²ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ΄Π΅Ρ Π²Π½Π΅Π΄ΡΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½Π½ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ΄Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΡΡ , ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² — ΡΡΠΎΠ±Ρ ΡΠ²ΡΠ·Π°ΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ Π½ΠΎΠ²ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌΠΈ.
Π’Π΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΠΠΠ ΡΠ°Π·Π²ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ [11, 12, 36, 38], ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΡΠΎΡΠ²ΡΠ΅Π³ΠΎΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°, ΠΈ Π·Π°ΡΠ°ΡΡΡΡ Π΄Π°ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΠΠ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ Π°Π²ΡΠΎΡΠ°ΠΌΠΈ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ. ΠΠΎ ΡΠ΅ΠΉ Π΄Π΅Π½Ρ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΠ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ° AspectJ [19, 39, 57] ΠΈ Π΅Π΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ AspectJ Development Tools for Eclipse [63] Π΄Π»Ρ Java-ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»ΡΠΌ ΠΠ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π» ΠΠΠ Π² ΡΠ²ΠΎΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°Ρ , ΡΠΎΠ·Π΄Π°Π²Π°Ρ Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ, ΡΠΈΡΠ°Π΅ΠΌΡΠΉ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠΎ Π½Π°ΡΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, ΠΌΠΎΡΠ½Π°Ρ, Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½Π°Ρ ΠΈ Π³ΠΈΠ±ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ ΡΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΡΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΠΊ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΠΠ, ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π² ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠΎΠ΅ΠΊΡ Aspect.NET ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π³ΡΡΠΏΠΏΠΎΠΉ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΎ-ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ»ΡΡΠ΅ΡΠ° ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ ΠΈ ΠΏΡΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΡΠ°ΡΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΠ»Π°Π΄ΠΈΠΌΠΈΡΠ° ΠΠ»Π΅Π³ΠΎΠ²ΠΈΡΠ° Π‘Π°ΡΠΎΠ½ΠΎΠ²Π° Ρ 2002 Π³ΠΎΠ΄Π°. Π¦Π΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° — ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΠΠ-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π° Π±Π°Π·Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Microsoft .NET [17], ΡΠ²Π»ΡΡΡΠ΅ΠΉΡΡ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·ΡΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΠ. ΠΡΠ°ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Aspect.NET.
β’ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΠΠ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ .NET.
β’ ΠΠΊΠ»Π°Π΄ Π² ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΠΠ Π² ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅ .NET.
β’ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΎΠΊ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΠΠ.
Π¦Π΅Π»ΠΈ ΠΈ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ°Π½Π½Π°Ρ Π΄ΠΈΡΡΠ΅ΡΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Aspect.NET. Π Π½Π΅ΠΉ ΠΈΡΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΠΠΠ-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ , ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΡΡΠ΄ Π½ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΠΠ ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½Π°Ρ Π°Π²ΡΠΎΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
Π¦Π΅Π»ΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅.
1. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΠΠ ΠΈ ΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
2. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Aspect.NET Framework Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
3. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Aspect.NET Framework Π΄Π»Ρ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΠΠ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
4. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ Aspect.NET Framework Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΡ Aspect.NET ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ΄Π° Π·Π°Π΄Π°Ρ.
ΠΡΠΈΡΠΈΠ½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ Π΅Π΅ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΡΡΡ.
Π£ΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ — Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ. ΠΠΠ-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΈΠ·Π²Π°Π½Π° ΡΠ½ΠΈΠ·ΠΈΡΡ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΠ ΠΏΡΡΠ΅ΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ — Π°ΡΠΏΠ΅ΠΊΡΠΎΠ², ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΡ Π·Π° ΡΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½Π° ΠΏΠΎ ΠΊΠΎΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠΎ ΠΎΡΠ΅Π½ΠΊΠ°ΠΌ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ Π² ΡΠ°Π±ΠΎΡΠ΅ [11], ΠΎΠΊΠΎΠ»ΠΎ 70% Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈ Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, Π² ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΅ΠΌ ΠΠΠ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊΠ°ΠΆΡΡΡΡ Π²Π°ΠΆΠ½ΡΠΌΠΈ ΠΈ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ. Π‘ΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π² ΡΠ²ΠΎΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π² ΡΡΠ΄Π΅ ΡΠ»ΡΡΠ°Π΅Π².
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΠΠ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ Π΄Π»Ρ Java-ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ AspectJ). ΠΠ²ΡΠΎΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Aspect.NET ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π²Π°ΠΆΠ½ΡΠΌ Π²ΠΊΠ»Π°Π΄ΠΎΠΌ Π² ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΠΠ ΠΌΠΎΠ³Π»Π° Π±Ρ ΠΏΠΎΡΠ»ΡΠΆΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ — .NET. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΡΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΠΏΡΠΈΠ²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΠΠ-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ .NET. Π ΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Aspect.NET ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π. Π. Π‘Π°ΡΠΎΠ½ΠΎΠ² ΠΏΠΎ-Π½ΠΎΠ²ΠΎΠΌΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π» ΠΈΠ΄Π΅ΠΈ Π. ΠΠΈΠΊΠΆΠ°Π»Π΅ΡΠ°, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΈΡ ΠΊ ΡΠΈΡΠΎΠΊΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ .NET.
ΠΡΠΏΠ΅ΠΊΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Aspect.NET ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΡΠΌΠΈ Π½Π° ΠΌΠ΅ΡΠ°ΡΠ·ΡΠΊΠ΅ Aspect.NET ML [10, 16], Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° .NET ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Aspect.NET ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½Π° Π·Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ Π½Π° Aspect.NET ML-Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Aspect.NET. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± Π°ΡΠΏΠ΅ΠΊΡΠ°Ρ , Π²ΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ, Ρ ΡΠ°Π½ΠΈΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ ΡΠ±ΠΎΡΠΊΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² ΠΎΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠ° Π² Aspect.NET. ΠΡΠΏΠ΅ΠΊΡ «Test» ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ «TestWriteAction», Π²ΡΠ²ΠΎΠ΄ΡΡΠ΅Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΡΡΠΎΠΊΡ «test» ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌΡΡ Π½Π° «Write»: aspect Test public class Test rules before %call Write* public static void TestWriteAction ().
Console.WriteLine («test»);
ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ Aspecl.NET ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Microsoft Phoenix RDK [28]. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π±ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Phoenix API) Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π°, ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ .NET-ΡΠ±ΠΎΡΠΎΠΊ. ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Microsoft ΡΡΠΈΡΠ°Π΅Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Phoenix ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ, ΡΡΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΠ²Π»ΠΈΡΠ»ΠΎ Π½Π° ΡΠΈΡΠΎΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π²ΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΎΠΈΡΠΊ ΡΠΎΡΠ΅ΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π°ΡΠΏΠ΅ΠΊΡΠ° Π² Aspect.NET ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ (Aspect#) ΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ±ΠΎΡΠΊΠΈ (Weave.NET). ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π΄Π²Π° ΠΏΡΠΎΡ ΠΎΠ΄Π°: ΠΏΠΎΠΈΡΠΊ ΡΠΎΡΠ΅ΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅. ΠΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΏΡΠΎΡ ΠΎΠ΄Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΄ΠΎΠ±Π½Π°Ρ ΠΈ Π½ΠΎΠ²Π°Ρ, ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΡΠΎΡΠΊΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ . ΠΠ½Π° Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΈΡΡΠ΅ΠΌΡ Aspect.NET Framework ΠΏΡΡΠ΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΏΠΎ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ, ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ (ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ Π½Π°Π»ΠΈΡΠΈΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ).
Aspect.NET Framework ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Microsoft Visual Studio SDK [29] — Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ Π±ΠΎΠ³Π°ΡΠΎΠ³ΠΎ API, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΈ ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Microsoft Visual Studio: ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π»ΡΠ±ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΎΠΊΠ½Π°, ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈ ΠΌΠ°ΡΡΠ΅ΡΠ°. Microsoft Visual Studio SDK Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π°Π½Π°Π»ΠΈΠ· ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ².
ΠΡΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΡΠΎΡΠ΅ΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ Π·Π°Π΄Π°ΡΠΈ MSBuild [30] ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
.
Π Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
1. Π Π°Π·ΡΠ°Π±ΠΎΡΠ°Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΠΠ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ ΠΈ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ².
2. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π° Π² Visual Studio 2008 ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Aspect.NET Framework, ΡΠ²Π»ΡΡΡΠ°ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ Aspect.NET.
3. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Aspect. log4net, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π½Π΅ΡΠ²Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΠΠ Π΄Π»Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
4. ΠΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° Aspect.NET Framework Π² ΡΠΎΡΡΠ°Π²Π΅ ΡΠΈΡΡΠ΅ΠΌΡ Aspect.NET ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΡΠΌΠΈ Π² ΠΊΡΡΠΏΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 40 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎ-Π»Π΅Ρ.
ΠΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠΌΠΈ.
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΠΠ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Microsoft Visual Studio 2008, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Aspect .NET ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΊΠΎΠΌΡΠΎΡΡΠ½ΡΠΌ Π΄Π»Ρ .NET-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ². ΠΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ ΡΡΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ Π½ΡΠΆΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π° ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ Aspect.NET Framework ΠΎΡΠ³Π°Π½ΠΈΡΠ½ΠΎ ΡΠ°ΡΡΠΈΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ VisualStudio ΠΈ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² MSBuild. ΠΠ²ΠΈΠ΄Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ .NET Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ ΠΠΠ, Π·Π° Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½Π°ΠΌΠΈ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° AspectJ Π΄Π»Ρ Java-ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ AspectJ Development Tools.
Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΎΠ±ΡΠ°Π» Π² ΡΠ΅Π±Π΅ Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΡΠ΅Π³ΠΎΡΠ° ΠΠΈΠΊΠΆΠ°Π»Π΅ΡΠ° Π² AspectJ Development Tools. Π’Π°ΠΊΡΡ ΠΊΠ°ΠΊ, ΠΏΡΠΎΡΠΌΠΎΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ², ΡΠ°ΡΠΊΡΠ°ΡΡΠΈΠΊ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ², ΠΏΡΠΎΡΠΌΠΎΡΡ Π²Π»ΠΈΡΠ½ΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ΅ΠΊΡΡΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΡΠΎΠΈΡΠΊΠ°ΡΠ΅Π»Π΅ΠΌ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΡ Aspect. log4nct ΡΡΡΠ΄Π½ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ — ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΠΠ-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ PostSharp ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Log4PostSharp, ΠΏΠΎΡΠ²ΠΈΠ²ΡΠΈΠΌΡΡ ΠΏΠΎΠ·Π΄Π½Π΅Π΅. ΠΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠΎΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Π² Log4PostSharp ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ°Π²ΠΈΠ» Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π°ΡΠΏΠ΅ΠΊΡΠ° Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ, ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². Π‘ΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΏΡΠ°Π²ΠΈΠ» Π² Aspect. log4net ΠΌΠΎΠΆΠ½ΠΎ Ρ Π»Π΅Π³ΠΊΠΎΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΌΠ°ΡΡΠ΅ΡΠ°-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ Π·Π°Π΄Π°Ρ Π·Π° ΡΡΡΡ Π½Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΠΠ.
ΠΠΏΡΠΎΠ±Π°ΡΠΈΡ Aspect.NET Framework ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈ Aspect.NET Π½Π° ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°ΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΠΠ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π°ΠΌΠΈ Π±ΡΠ»Π° Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΊΡΡΠΏΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° Π½Π° 11% Π·Π° ΡΡΡΡ Π²ΡΠ½Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π² Π°ΡΠΏΠ΅ΠΊΡΡ, Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Aspect. log4net ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ½ΠΈΠ·ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ·Π΄Π΅ΡΠΆΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΠΠ-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π° ΡΠ°ΠΉΡΠ΅ Microsoft Faculty Connection [72]. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π½Π° Π½Π°ΡΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡ , ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ Π² ΠΌΠ΅ΠΆΠ΄ΡΠ½Π°ΡΠΎΠ΄Π½ΡΡ ΠΈ ΠΎΡΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈΠ·Π΄Π°Π½ΠΈΡΡ . Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π±ΡΠ» Π²ΡΡΠΎΠΊΠΎ ΠΎΡΠ΅Π½Π΅Π½ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ.
ΠΠΎ ΡΠ΅ΠΌΠ΅ Π΄ΠΈΡΡΠ΅ΡΡΠ°ΡΠΈΠΈ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ ΡΠ°Π±ΠΎΡΡ [1−4] ΠΈ [8]. Π‘ΡΠ°ΡΡΡ [1] ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² ΠΆΡΡΠ½Π°Π»Π΅, Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΌ Π² ΠΏΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΠΠΠ.
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΌ Π²ΠΈΠ΄ΠΈΡΡΡ ΡΡΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ Π·Π°Π΄Π°Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΠ΅ΠΌΡ.
ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΠΏΠΎΠΌΠΎΡΡ. ΠΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Visual Studio ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΡ ΠΏΠΎΠΌΠΎΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° Aspect.NET ML, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π°ΡΠΏΠ΅ΠΊΡΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΠ·Ρ ΠΏΡΠΈΠ½Π΅ΡΠ΅Ρ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Visual Studio IntelliSense Π΄Π»Ρ Aspect.NET ML, ΡΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π½Π°Π±ΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Aspect.NET ML ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ. Π AJDT for Eclipse ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΠΏΠ°Π½Π΅Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Microsoft Visual Studio ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΠΏΠΎΠ»ΡΡ Π½Π°ΠΏΡΠΎΡΠΈΠ² ΡΡΡΠΎΠΊ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ². ΠΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΎΡ ΡΠΎΡΠ΅ΠΊ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ, ΠΏΠΎΡΠΎΠ΄ΠΈΠ²ΡΠΈΠΌ ΡΡΠΈ ΡΠΎΡΠΊΠΈ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΠ½Π°Π»ΠΈΠ· ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ». ΠΠ°ΠΌ Π²ΠΈΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ Aspect.NET Framework Π»ΠΎΠ³ΠΈΠΊΠΈ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΈΡ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠΌΡ Π²ΠΈΠ΄Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΠΈΠ΄Π° «(%after %call *) || (%after %call MyMethod)» ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎΠΈΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΠΌΡ ΠΏΡΠ°Π²ΠΈΠ»Ρ «%after %call *».
Π ΡΠ»ΡΡΠ°Π΅ ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π°ΡΠΏΠ΅ΠΊΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ» Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π½ΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌΠΈΡΡ Π½Π° «MyMethod»: «MyMethodl» ΠΈ «MyMcthod2», ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΠΈΠ΄Π° «(%after %call MyMethodl) || (%after %call MyMethod2)» ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ²Π΅ΡΠ½ΡΡΡ Π² Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ «(%after %call MyMethod ([l, 2]{ 1}))» Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ — ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ «(%after %call MyMethod*)» Π² «(%after %call MyMethodl) || (%after %call MyMethod2)». ΠΠΎΡΠ»Π΅ ΡΠ°ΠΊΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΌΡ Π² ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, «MyMethod3» Π°ΡΠΏΠ΅ΠΊΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
Π§ΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΠ°Π²ΠΈΠ». ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π±ΡΠ»Π° ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠ°Π±ΠΎΡΠ΅ [54]. Π§ΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΠ°Π²ΠΈΠ» ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ ΠΊ ΠΏΡΠ°Π²ΠΈΠ»Ρ Π½Π° Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎΠΌ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΠΈΠ΄Π° «%call %before (private *.set*(., int))>> ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°Π·ΠΎΠΉ: «before a call made to a private method with name starting with «set» defined on any type, and which last argument of an integer type». ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠ³Π»Π° Π±Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠΎΠ³ΠΈΡΠ½ΡΠΌ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΠΈΠ΄Π΅ΠΈ ΠΌΠ°ΡΡΠ΅ΡΠ° ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠΎΡΠ΅ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΎΡΠΌΠ΅ΡΠ°Ρ ΠΌΡΡΡΡ ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠ²Π»ΠΈΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π°ΡΠΏΠ΅ΠΊΡΠ° ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎΠΌ. ΠΠΎΠ΄ΠΎΠ±Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° Π²Π²ΠΈΠ΄Ρ ΡΠ²ΠΎΠ΅ΠΉ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³Π»Π° Π±Ρ ΡΡΠ°ΡΡ ΡΠ΅ΠΌΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ.
Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³. Π Visual Studio, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 2005, ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΡΠ»Π΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΈΠ· ΠΊΠ»Π°ΡΡΠΎΠ², Π²ΡΠ½Π΅ΡΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΡΠ΄ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠΎΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Aspect.NET ΠΊ ΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ «ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠ°» ΠΈ «Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΎ Π²Π½Π΅Π΄ΡΡΠ΅ΠΌΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° (inter-type declaration)». ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Ρ ΠΎΡΡ Π±Ρ ΡΡΠΈΡ Π΄Π²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»Π° Π±Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π°ΡΠΏΠ΅ΠΊΡΠΈΠ·Π°ΡΠΎΡΠ° [8].
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
- ΠΡΠ°ΡΠ΅Π² Π.Π. Aspect.NET Framework ΠΈ Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Π·Π°Π΄Π°ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. // ΠΠ΅ΡΡΠ½ΠΈΠΊ Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³ΡΠΊΠΎΠ³ΠΎ ΠΠΎΡΡΠ΄Π°ΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π£Π½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°, 2008, Π‘Π΅Ρ. 10, ΠΡΠΏ. 4, Π‘. 118−126.
- ΠΠ°ΠΌΠΌΠ° Π., Π₯ΡΠ»ΠΌ Π ., ΠΠΆΠΎΠ½ΡΠΎΠ½ Π ., ΠΠ»ΠΈΡΡΠΈΠ΄Π΅Ρ ΠΠΆ. ΠΡΠΈΠ΅ΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ: ΠΠ°ΡΡΠ΅ΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅Ρ. Ρ Π°Π½Π³Π».- ΠΠΎΠ΄ ΡΠ΅Π΄. Π. Π‘Π»ΠΈΠ½ΠΊΠΈΠ½Π°. Π‘ΠΠ±.: ΠΠΈΡΠ΅Ρ, 2001. 336 Ρ.
- Π‘. Π‘ΡΠ΅Π»ΡΠΈΠ½Π³, Π. ΠΠ°Π°ΡΠ΅Π½. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Java. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»Π°. ΠΠ·Π΄Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ ΠΠΈΠ»ΡΡΠΌΠ΅, Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³, 2002, 567 Ρ.
- Π.Π. ΠΡΡΠ°Π²Π»Π΅Π², Π. Π. ΠΠΈΡΡΡΠ½ΡΠΈΠΊΠΎΠ². Π Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² Π² Π°ΡΠΏΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
- ΠΠ·Π². Π‘ΠΠ±ΠΠΠ’Π£ (ΠΠΠ’Π) Π‘Π΅Ρ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, 2002, ΠΡΠΏ. 3, Π‘. 81−86.
- Booch G. Object-Oriented Analysis and Design with Applications. USA: Addison-Wesley, 2007, P. 430.
- Safonov V.O. Using aspect-oriented programming for trustworthy software development. Wiley Interscience. John Wiley & Sons, 2008. P. 338.
- Ivar Jacobson, Pan-Wei Ng, Aspect-Oriented Software Development with Use Cases. USA: Addison Wesley Professional, 2004, P. 464.
- Kiczales G., Lamping J., Mendhekar A., Aspect-oriented programming. Proc. Of the European Conference on Object-oriented Programming (ECOOP) in Finland Springer-Verlag, June 1997. Heidelberg, Germany, 1997, Pp. 365 389.
- Greogor Kiczales Official Webpage. URL: http://www.cs.ubc.ca/-gregor/.
- Safonov V. O. Aspect.NET: a new approach to aspect-oriented programming. NET Developer’s Journal. 2003. 4. Pp. 36−40.
- Safonov V. O. Aspect.NET: concepts and architecture. NET Developer’s Journal. 2004, 10, Pp. 44−48.
- Safonov V. O., Grigoriev D. Aspect.NET: concepts and architecture. NET Developer’s Journal. 2005, 7, Pp. 28−33.
- Simmons C., Rofail A. The Microsoft .Net Platform and Technologies. Indianapolis, USA: Prentice Hall PTR, 2001. P. 510.
- Apache log4net Project Official Website. URL: http://logging.apache.org/log4net/.
- Miles R., AspectJ Cookbook. Cambridge, USA: O’Reilly, 2004. P. 354.
- Flanagan D., Java in a Nutshell. Cambridge, USA: O’Reilly, 2005. Pp. 1224.
- Weave.NET Project Official Webpage. URL: http://www.dsg.cs.tcd.ic/sites/ Weave.NET.html.
- Puzzle.NET and NAspect Project Official Website. URL: http://www.puzzleframework.com/wikiengine/WikiPageViewer.aspx?ID=80.
- Aspect# Project Official Webpage. URL: http://www.castIeproject.org/ AspectSharp/index.html.
- Spring.NET Project Official Website. URL: http:// www.springframework.net/doc-latest/refercnce/html/ aop.html.
- HyperJ Project Official Webpage. URL: http://www.research.ibm.com/ hyperspace/HyperJ/HyperJ.htm.
- Frakes W. Π. AOP Technologies and statement of the problem // Proc. of the 6th Intern. Conference on Software Reuse, ICSR-6. June 2000. Vienna, Austria, 2000, Pp. 390−397.
- Wicca and Phx. Morph Project Official Webpage URL: http://www 1 .cs.columbia.edu/~eaddy/wicca/.
- Microsoft Phoenix Project Official Webpage. URL: http://research.microsoft.com/phoenix.
- Visual Studio SDK Description at MSDN Project Webpage. URL: http://msdn.microsoft.com/en-us/library/bb 166 441 .aspx.
- MSBuild Reference at MSDN Project Webpage. URL: http://msdn2.microsoft.com/en-us/library/0k6kkbsd.aspx.31. log4j Project Official Webpage. URL: http://dmi.ensica.fr/doc/Java/log4j/.
- Campbell Π’., Hassell J. Outlook 2007: Beyond the Manual. Berkeley, CA, USA: Apress, 2007. Pp. 47−51.
- Aspect.NET Project Webpage at Microsoft Academic Resource Center. URL: https://www.academicresourcecenter.net/cuiTiculum/pfv.aspx?ID=6801.
- The LOOM .NET Project Official Webpage. URL: http://www.dcl.hpi.uni-potsdam.de/research/loom/.
- M. Blackstock. Aspect Weaving with C# and .NET. URL: http://www.cs.ubc.ca/ ~michael/publications/AOPNET5.pdf.
- Xiong Y., Wan F. CCC: An Aspect Oriented Intermediate Language on .NET Platform. URL: http://www.fit.ac.jp/~zhao/waosd2004/pdf/Xiong.pdf.
- AOP.NET Project Official Webpage. URL: http://sourceforge.net/projects/aopnet/.
- D. Lafferty, V. Cahill. Language Independent Aspect Oriented Programming. Proceedings of OOPSLA March 2003.
- The AspectJ Project Official Website. URL: www.aspectj.org.
- AspectWerkz Project Official Webpage. URL: http://aspectwerkz.codehaus.org/.
- Π§ΠΈΡΡΡΠΊΠΎΠ² Π. R# ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² .NET. // RSDN Magazine #5 — 2004. URL: http://rsdn.ru/projects/rshaΡ/article/ rsharpmag.xml.
- M. Aksit, L. Bergmans, and S. Vural. An Object-Oriented Language-Database Integration Model: The Composition-Filters Approach. In Proceedings of the ECOOP'92 Conference, LNCS 615, Springer-Verlag, 1992.
- K.Leiberherr. Component Enhancement: An Adaptive Reusability Mechanism for Groups of Collaborating Classes. In Information Processing'92, 12th World Computer Congress, Madrid, Spain, J. van Leeuwen (Ed.), Elsevier, 1992, Pp. 179−185.
- Czarnecki Π., Eisenecker U. Generative Programming: Methods, Tools, and Applications. Addison-Wesley, June 2000, P. 864.
- Masuhara, J., Kiczales, G. Modeling Crosscutting in Aspect-Oriented Mechanisms. Proceedings of ECOOP'2003.
- Hannemann, J., Kiczales, G. Overcoming the Prevalent Decomposition in Legacy Code. Proceedings of Workshop on Advanced Separation of Concerns, International Conference on Software Engineering (May 2001, Toronto, Canada).
- Aspect Browser: Bill Griswold’s Web pages (University of California, San Diego). URL: www.cs.ucsd.edu/users/wgg.
- FEAT: Martin Robillard’s and Gal Murphy’s Web pages (University of British Columbia, Canada). URL: www.cs.ubc.ca/~mrobilla/feat/index.html.
- Shukla, D., Fill, S. and Sells, D. Aspect-Oriented Programming Enables Better Code Encapsulation and Reuse. MSDN Magazine, March 2002.
- Aspect-Oriented Software Development Network Official Website: www.aosd.net.
- Rational Software Official Website. URL: http://www.rational.com.
- Subject-Oriented Programming Project Official Webpage, IBM Thomas J. Watson Research Center, Yorktown Heights, New York. URL: http://www.research.ibm.com/sop/.
- The TRESE Project Official Webpage, University of Twente, The Netherlands. URL: http://www.utwente.nl/ewi/trese/.
- Ch. Simony. The Death of Computer Languages, The Birth of Intentional Programming, Microsoft Research, 1995. URL: http://research.microsoft.com/ pubs/view.aspx?trid=4.
- Laddad, R., I want my aop!, part 1., 2002. URL: http://www.javaworld.com/ javaworld/jw-01−2002/j w-0118-aspect.html.
- The AspectJ Programming Guide 1998−2002, Xerox Corporation.
- I. Kiselev. Aspect-Oriented Programming with AspectJ. Indianapolis, IN, USA: SAMS Publishing, 2002. P. 288.
- J. Hannemann, G. Kiczales. Design pattern implementations in Java and AspectJ OOPSLA 02, New York, USA, November 2002. Pp. 161−173.
- M. Lippert, Π‘ Videira Lopes. A Study on Exception Detection and Handling Using Aspect-Oriented Programming. Xerox PARCTechnical Report P9910229 CSL-99−1, 1999.
- B. Meyer. Applying Design by Contract. Prentive Hall, 1992.
- Eick, S.G., J.L. Steffen, and E.E. Sumner, Seesoft A Tool For Visualizing Line Oriented Software Statistics. IEEE Transactions on Software Engineering, 1992. 18(11).
- Clement A., Colyer A., Kersten M. Aspect-Oriented Programming with AJDT, Proceedings of Workshop on Analysis of Aspect-Oriented Software (2003, University of Darmstadt, Germany).
- Richter, J. Applied Microsoft .NET Framework Programming. Microsoft Press, 2002, P. 640.
- HyperJ Project Official Webpage. URL: http://www.research.ibm.com/ hyperspace/ HyperJ/HyperJ.htm.
- AJDE for SunONE/NetBeans Official Webpage. URL: http://aspectj4netbean.sourceforge.net/.
- AJDE for JBuilder Official Webpage. URL: http://aspectj4jbuildr.sourceforge.net/.
- Eclipse AspectJ Development Tools Project Official Webpage. URL: http://www.eclipse.org/ajdt.
- Eclipse Project Official Website. URL: http://www.eclipse.org.
- Schildt H., C# 3.0: The Complete Reference. McGraw-Hill Osborne Media, December 2008, P. 912.
- Mono Project Official Website. URL: http://mono-project.com.
- Freeman E., Head First Design Patterns. O’Reilly, October 2004, P. 688.
- Webpage of Aspect.NET on Microsoft Faculty Connection Website. URL: http://www.facultyresourcecenter.com/curriculum/pfv.aspx?ID=6801.
- AspectDNG Project Official Webpage. URL: http://aspectdng.tigris.org/.
- Basset P. Framing software reuse — lessons from real world. Practice Hall, 1996,384 c.
- PostSharp Project Official Website. URL: http://www.postsharp.org/.
- Log4PostSharp Project Official Webpage. URL: http://code.google.com/p/postshaΡ-user-plugins/wiki/Log4PostShaΡ.