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.
Bibliography
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.
Bobrow D. G., DeMichiel L. G., et al., Common Lisp Object System Specification, in SIGPLAN Notices, vol. 23, 1988.
Chiba S., A Metaobject Protocol for C++, in proc. Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA 95), Austin, 1995.
Consel C, Program Adaptation based on Program Transformation, in proc. ACM Workshop on Strategic Directions in Computing Research, 1996.
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.
Henry S. and Kafura D., Software Structure Metrics Based on Information Flow, in IEEE Transactions on Software Engineering, vol. SE-7: 509–518, 1981.
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.
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.
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.html
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.html
Kiczales G., des Rivères J., et al., The Art of the Metaobject Protocol. Book published by MIT Press, 1991.
Kiczales G., Lamping J., et al., Open Implementation Design Guidelines, in proc. International Conference on Software Engineering, (Forthcoming), 1997.
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.
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.
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.
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.
Maeda C., Lee A., et al., Open Implementation Analysis and Design, in proc. Symposium on Software Reuse (To Appear, May 1997), 1997.
Mahoney J. V., Functional Visual Routines, Xerox Palo Alto Research Center, Palo Alto SPL95-069, July 30, 1995, 1995.
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.
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.
McClure C, A Model for Program Complexity Analysis, in proc. 3rd International Conference on Software Engineering, Los Alamitos, CA, 1978.
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.
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.
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.
Parnas D. L., Designing Software for Extension and Contraction, in proc. 3rd International Conference on Software Engineering, pp. 264–277, 1978.
Parnas D. L., On a ‘Buzzword': Hierarchical Structure, in proc. IFIP Congress 74, pp. 336–339, 1974.
Parnas D. L., On the Criteria to be Used in decomposing Systems into Modules, in Communications of the ACM, vol. 15(2), 1972.
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.
Rational, Rational Web pages, Rational Software Corporation, Web pages, http://www.rational.com
Rumbaugh J., Blaha M., et al., Object-Oriented Modeling and Design. Book published by Prentice Hall, 1991.
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.
Smith B. C, Reflection and Semantics in a Procedural Language LCS Technical Report, M.I.T., Cambridge, MA, 1982.
Steele G. L., Common LISP: The Language, 2nd Edition. Book published by Digital Press, 1990.
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.
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.
Yau S. and Collofello J., Some Stability Measures for Software Maintenance, in tse, vol. SE-6: 545–552, 1980.
Yokote Y., The Apertos Reflective Operating System: The Concept and its Implementation, in proc. Conference on Object-Oriented Programming: Systems, Languages, and Applications, 1992.
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.
Author information
Authors and Affiliations
Editor information
Rights and permissions
Copyright information
© 1997 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Kiczales, G. et al. (1997). Aspect-oriented programming. In: Akşit, M., Matsuoka, S. (eds) ECOOP'97 — Object-Oriented Programming. ECOOP 1997. Lecture Notes in Computer Science, vol 1241. Springer, Berlin, Heidelberg. https://doi.org/10.1007/BFb0053381
Download citation
DOI: https://doi.org/10.1007/BFb0053381
Published:
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-63089-0
Online ISBN: 978-3-540-69127-3
eBook Packages: Springer Book Archive