General Composition of Software Artifacts

Composition is the process of creating new artifacts from a set of input artifacts by combining the content of the input artifacts according to some given specifications. Composition engines are a distinct kind of software component. Like compilers, parsers, and UI-generators, they have their own domain of discourse and base of concepts, their own structure for expressing desired results, their own internal solution structure, and their own set of research problems. Composition applies not only to artifacts representing executable code, but to any sort of artifacts, from build or configuration controls to documentation or UI. While software composition is of interest to an audience wider than that of developers applying aspect-oriented software development (AOSD) approaches, AOSD's composition of separate concerns or aspects presents more complex requirements than does object-composition. This paper describes a base of concepts suitable for expressing composition and shows how a general composition engine realizing these concepts can be used to effect the composition needs of several existing AOSD approaches.

[1]  Mira Mezini,et al.  Adaptive plug-and-play components for evolutionary software development , 1998, OOPSLA '98.

[2]  Günter Kniesel,et al.  JMangler - a framework for load-time transformation of Java class files , 2001, Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation.

[3]  Jim Hugunin,et al.  Advice weaving in AspectJ , 2004, AOSD '04.

[4]  Harold Ossher,et al.  Member-Group Relationships Among Objects , 2002 .

[5]  Harold Ossher,et al.  Subject-oriented programming: a critique of pure objects , 1993, OOPSLA '93.

[6]  Gregor Kiczales,et al.  Aspect-oriented programming , 1996, CSUR.

[7]  Stanley M. Sutton,et al.  N degrees of separation: multi-dimensional separation of concerns , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[8]  Zheng Wang,et al.  A taxonomy of software component models , 2005 .

[9]  Urs Hölzle,et al.  Binary Component Adaptation , 1997, ECOOP.

[10]  Geoff A. Cohen,et al.  Automatic Program Transformation with JOIE , 1998, USENIX Annual Technical Conference.

[11]  Shigeru Chiba,et al.  Load-Time Structural Reflection in Java , 2000, ECOOP.

[12]  Don S. Batory,et al.  The GenVoca model of software-system generators , 1994, IEEE Software.

[13]  William G. Griswold,et al.  An Overview of AspectJ , 2001, ECOOP.

[14]  Martin Odersky,et al.  A Statically Safe Alternative to Virtual Types , 1998, ECOOP.

[15]  Stanley M. Sutton,et al.  Supporting aspect-oriented software development with the Concern Manipulation Environment , 2005, IBM Syst. J..

[16]  Yannis Smaragdakis,et al.  Mixin layers: an object-oriented implementation technique for refinements and collaboration-based designs , 2002, TSEM.

[17]  Ian M. Holland,et al.  Contracts: specifying behavioral compositions in object-oriented systems , 1990, OOPSLA/ECOOP '90.

[18]  Satoshi Matsuoka,et al.  ECOOP'97 — Object-Oriented Programming , 1997, Lecture Notes in Computer Science.

[19]  Elisa Bertino,et al.  ECOOP 2000 — Object-Oriented Programming , 2000, Lecture Notes in Computer Science.

[20]  Frank Tip,et al.  IBM Research Report CAT: A Toolkit for Assembling Concerns , 2002 .

[21]  Lodewijk Bergmans,et al.  An Object-Oriented Language-Database Integration Model: The Composition-Filters Approach , 1992, ECOOP.