Aspect-oriented programming

  • Gregor Kiczales
  • John Lamping
  • Anurag Mendhekar
  • Chris Maeda
  • Cristina Lopes
  • Jean-Marc Loingtier
  • John Irwin
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 1241)

Abstract

We have found many programming problems for which neither procedural nor object-oriented programming techniques are sufficient to clearly capture some of the important design decisions the program must implement. This forces the implementation of those design decisions to be scattered throughout the code, resulting in “tangled” code that is excessively difficult to develop and maintain. We present an analysis of why certain design decisions have been so difficult to clearly capture in actual code. We call the properties these decisions address aspects, and show that the reason they have been hard to capture is that they cross-cut the system's basic functionality. We present the basis for a new programming technique, called aspect-oriented programming, that makes it possible to clearly express programs involving such aspects, including appropriate isolation, composition and reuse of the aspect code. The discussion is rooted in systems we have built using aspect-oriented programming.

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

Bibliography

  1. 1.
    Aksit M., Wakita K., et al., Abstracting object interactions using composition filters, in proc. ECOOP”93 Workshop on Object-Based Distributed Programming, pp. 152–184, 1993.Google Scholar
  2. 2.
    Bobrow D. G., DeMichiel L. G., et al., Common Lisp Object System Specification, in SIGPLAN Notices, vol. 23, 1988.Google Scholar
  3. 3.
    Chiba S., A Metaobject Protocol for C++, in proc. Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 95), Austin, 1995.Google Scholar
  4. 4.
    Consel C, Program Adaptation based on Program Transformation, in proc. ACM Workshop on Strategic Directions in Computing Research, 1996.Google Scholar
  5. 5.
    Harrison W. and Ossher H., Subject-oriented programming (a critique of pure objects), in proc. Conference on Object-Oriented Programming: Systems, Languages, and Applications, pp. 411–428, Washington D.C., 1993.Google Scholar
  6. 6.
    Henry S. and Kafura D., Software Structure Metrics Based on Information Flow, in IEEE Transactions on Software Engineering, vol. SE-7: 509–518, 1981.Google Scholar
  7. 7.
    Ichisugi Y., Matsuoka S., et al., Rbc1: A reflective object-oriented concurrrent language without a run-time kernel, in proc. International Workshop on New Models for Software Architecture '92; Reflection and Meta-Level Architecture, pp. 24–35, 1992.Google Scholar
  8. 8.
    Irwin J., Loingtier J.-M., et al., Aspect-Oriented Programming of Sparse Matrix Code, Xerox PARC, Palo Alto, CA. Technical report SPL97-007 P9710045, February, 1997.Google Scholar
  9. 9.
    Kiczales G., Foil for the Workshop on Open Implementation, Xerox PARC, Web pages, http://www.parc.xerox.com/spl/eca/oi/workshop-94/foil/main.htmlGoogle Scholar
  10. 10.
    Kiczales G., Why are Black Boxes so Hard to Reuse?, Invited Talk, OOPSLA'94, Video tape, Web pages, http://www.parc.xerox.com/spl/eca/oi/gregor-invite.htmlGoogle Scholar
  11. 11.
    Kiczales G., des Rivères J., et al., The Art of the Metaobject Protocol. Book published by MIT Press, 1991.Google Scholar
  12. 12.
    Kiczales G., Lamping J., et al., Open Implementation Design Guidelines, in proc. International Conference on Software Engineering, (Forthcoming), 1997.Google Scholar
  13. 13.
    Lieberherr K. J., Silva-Lepe I., et al., Adaptive Object-Oriented Programming Using Graph-Based Customization, in Communications of the ACM, vol. 37(5): 94–101,1994.CrossRefGoogle Scholar
  14. 14.
    Lopes C. V. and Kiczales G., D: A Language Framework for Distributed Programming, Xerox PARC, Palo Alto, CA. Technical report SPL97-010 P9710047, February, 1997.Google Scholar
  15. 15.
    Lopes C. V. and Lieberherr K., Abstracting Process-to-Function Relations in Concurrent Object-Oriented Applications, in proc. European Conference on Object-Oriented Programming, pp. 81–99, Bologna, Italy, 1994.Google Scholar
  16. 16.
    Lopes C. V. and Lieberherr K., AP/S++: Case-Study of a MOP for Purposes of Software Evolution, in proc. Reflection'96, pp. 167–184, S. Francisco, CA, 1996.Google Scholar
  17. 17.
    Maeda C., Lee A., et al., Open Implementation Analysis and Design, in proc. Symposium on Software Reuse (To Appear, May 1997), 1997.Google Scholar
  18. 18.
    Mahoney J. V., Functional Visual Routines, Xerox Palo Alto Research Center, Palo Alto SPL95-069, July 30, 1995, 1995.Google Scholar
  19. 19.
    Massalin H. and Pu C., Threads and Input/Output in the Synthesis Kernel, in Proceedings of the 12th ACM Symposium on Operating Systems Principles: pp 191–201, 1989.Google Scholar
  20. 20.
    Matsuoka S., Watanabe T., et al., Hybrid Group Reflective Architecture for Object-Oriented Concurrent Reflective Programming, in European Conference on Object Oriented Programming: pp 231–250, 1991.Google Scholar
  21. 21.
    McClure C, A Model for Program Complexity Analysis, in proc. 3rd International Conference on Software Engineering, Los Alamitos, CA, 1978.Google Scholar
  22. 22.
    Mendhekar A., Kiczales G., et al., RG: A Case-Study for Aspect-Oriented Programming, Xerox PARC, Palo Alto, CA. Technical report SPL97-009 P9710044, February, 1997.Google Scholar
  23. 23.
    Okamura H., Ishikawa Y., et al., Al-1/d: A distributed programming system with multi-model reflection framework, in proc. International Workshop on New Models for Software Architecture '92; Reflection and Meta-Level Architecture, pp. 36–47,1992.Google Scholar
  24. 24.
    Okamura H., Ishikawa Y., et al., Metalevel Decomposition in AL-1/D, in proc. International Symposium on Object Technologies for Advanced Software, pp. 110–127, 1993.Google Scholar
  25. 25.
    Parnas D. L., Designing Software for Extension and Contraction, in proc. 3rd International Conference on Software Engineering, pp. 264–277, 1978.Google Scholar
  26. 26.
    Parnas D. L., On a ‘Buzzword': Hierarchical Structure, in proc. IFIP Congress 74, pp. 336–339, 1974.Google Scholar
  27. 27.
    Parnas D. L., On the Criteria to be Used in decomposing Systems into Modules, in Communications of the ACM, vol. 15(2), 1972.Google Scholar
  28. 28.
    Pu C, Autrey T., et al., Optimistic Incremental Specialization: Streamlining a Commercial Operating System, in proc. 15th ACM Symposium on Operating Systems Principles (SOSP'95), 1995.Google Scholar
  29. 29.
    Rational, Rational Web pages, Rational Software Corporation, Web pages, http://www.rational.comGoogle Scholar
  30. 30.
    Rumbaugh J., Blaha M., et al., Object-Oriented Modeling and Design. Book published by Prentice Hall, 1991.Google Scholar
  31. 31.
    Seiter L. M., Palsberg J., et al., Evolution of Object Behavior Using Context Relations, in proc. Fourth ACM SIGSOFT Symposium on the Foundations of Software Engineering, pp. 46—57, San Francisco, 1996.Google Scholar
  32. 32.
    Smith B. C, Reflection and Semantics in a Procedural Language LCS Technical Report, M.I.T., Cambridge, MA, 1982.Google Scholar
  33. 33.
    Steele G. L., Common LISP: The Language, 2nd Edition. Book published by Digital Press, 1990.Google Scholar
  34. 34.
    Wand M. and Friedman D. P., The Mystery of the Tower Revealed: A Non-Reflective Description of the Reflective Tower, in Proceedings of the ACM Conference on LISP and Functional Programming: pp 298–307. ACM, 1986.Google Scholar
  35. 35.
    Watanabe T. and Yonezawa A., Reflection in an object-oriented concurrent language, in proc. ACM Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 88), pp. 306–315, San Diego, CA, 1988.Google Scholar
  36. 36.
    Yau S. and Collofello J., Some Stability Measures for Software Maintenance, in tse, vol. SE-6: 545–552, 1980.Google Scholar
  37. 37.
    Yokote Y., The Apertos Reflective Operating System: The Concept and its Implementation, in proc. Conference on Object-Oriented Programming: Systems, Languages, and Applications, 1992.Google Scholar
  38. 38.
    Yonezawa A. and Watanabe T., An Introduction to Object-Based Reflective Concurrent Computation, in Proceedings of the ACM SIGPLAN Workshop on Object-Based Concurrent Programming, SIGPLAN Notices, 24(4), Agha G., Wegner P., et al., Eds., 1989.Google Scholar

Copyright information

© Springer-Verlag 1997

Authors and Affiliations

  • Gregor Kiczales
    • 1
  • John Lamping
    • 1
  • Anurag Mendhekar
    • 1
  • Chris Maeda
    • 1
  • Cristina Lopes
    • 1
  • Jean-Marc Loingtier
    • 1
  • John Irwin
    • 1
  1. 1.Xerox Palo Alto Research CenterPalo AltoUSA

Personalised recommendations