Enhancements – Enabling Flexible Feature and Implementation Selection

  • John M. Hunt
  • Murali Sitaraman
Part of the Lecture Notes in Computer Science book series (LNCS, volume 3107)


To provide performance trade-offs to users, reusable component libraries typically include multiple implementation variants for each interface. This paper introduces a scalable notion of enhancements to extend interfaces with new features. Enhancements provide flexibility along two dimensions: They allow users to combine any set of features with the base interface and they allow any implementation variant of the base interface to be combined with any implementation variant of each feature. These two dimensions of flexibility are necessary for reusable libraries to remain scaleable. To address the feature flexibility problem, this paper introduces a general notion of enhancements that decouple feature implementations from the implementations of base interfaces. The paper explains an approach for realizing enhancements in standard Java and analyzes its benefits and limitations. It examines a simple mechanism to support enhancements directly in languages such as Java.


Components interfaces Java maintenance multiple implementations objects patterns RESOLVE 


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. [Ancoma 00]
    Ancona, D., Lagorio, G., Zucca, E.: Jam—designing a Java extension with mixins. ACM Transactions on Programming Languages and Systems 25(5), 641–712 (2003)CrossRefGoogle Scholar
  2. [Batory 97]
    Batory, D., Geraci, B.J.: Component Validation and Subjectivity in Gen Voca Generators. IEEE Transactions on Software Engineering 23(2), 67–82 (1997)CrossRefGoogle Scholar
  3. [Batory 02]
    Batory, D.: A Tutorial on Feature Oriented Programming and Product-Lines. In: 25th International Conference on Software Engineering, Portland, Oregon, pp. 753–754. IEEE Computer Society, Los Alamitos (2003)Google Scholar
  4. [Batory 03]
    Batory, D., Sarvela, J., Rauschmayer, A.: Scaling Step-Wise Refinement. In: 25th International Conference on Software Engineering, Portland, Oregon, IEEE Computer Society, Los Alamitos (2003)Google Scholar
  5. [Biggerstaff 94]
    BiggerStaff, T.: The Library Scaling Problem and the Limits of Concrete Component Reuse. In: Third International Conference on Software Reuse, Rio De Janeiro, Brazil, pp. 102–109. IEEE Computer Society, Los Alamitos (1994)Google Scholar
  6. [Black 03]
    Black, A., Scharli, N., Ducasse, S.: Applying Traits to the Smalltalk Collection Classes. In: Object-Oriented Programming Systems, Languages, and Applications, Anaheim, California, pp. 47–64. ACM Press, New York (2003)Google Scholar
  7. [Bobrow 87]
    D. Bobrow, L. DeMichiel, R. Gabriel, S. Keene, G. Kiczales, D. Moon: Common Lisp Object System Specification. ANSI X3J13 Document 87-002. American National Standards Institute. Washington DC (1987) Google Scholar
  8. [Booch 87]
    Booch, G.: Software Components with Ada. Benjamin/Cummings (1987)Google Scholar
  9. [Czarnecki 99]
    Czarnecki, K., Eisenecker, U.: Components and Generative Programming (invited paper). ACM SIGSOFT Software Engineering Notes 24(6), 2–19 (1999)CrossRefGoogle Scholar
  10. [Gamma 95]
    Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns Elements of Reusable Object-Oriented Software. Addison-Wesley Longman Inc., Reading (1995)Google Scholar
  11. [Hendler 86]
    Hendler, J.: Enhancement for Multiple-inheritance. ACM SIGPLAN Notices 21(10), 98–106 (1986)CrossRefGoogle Scholar
  12. [Hollingsworth 00]
    Hollingsworth, J., Blankenship, L., Weide, B.: Experience Report: Using RESOLVE/C++ for Commercial Software. In: ACM SIGSOFT Eighth International Symposium on the Foundations of Software Engineering, San Diego, California, vol. 24(6), pp. 11–19. ACM Press, New York (2000)Google Scholar
  13. [Krueger 92]
    Krueger, C.: Software Reuse. ACM Computer Surveys 24(2), 131–183 (1992)MathSciNetCrossRefGoogle Scholar
  14. [Millstein 03]
    Millstein, T., Reay, M., Chambers, C.: Relaxed MultiJava: Balancing Extensibility and Modular Typechecking. Object-Oriented Programming Systems, Languages, and Applications. Anaheim, California, 224–240 (2003)Google Scholar
  15. [Moon 86]
    Moon, D.: Object-Oriented Programming with Flavors. Object-Oriented Programming Systems, Languages, and Applications. Portland, Oregon, 1–8 (1986)Google Scholar
  16. [Neighbors 89]
    Neighbors, J.: Draco: A Method for Engineering Reusable Software Systems. In: Biggerstaff, T., Perlis, A. (eds.) Software Reusability, Addison-Wesley/ACM Press (1989)Google Scholar
  17. [Sitaraman 93]
    Sitaraman, M., Welch, L.R., Harms, D.E.: Specification of Reusable Software Components. International Journal of Software Engineering and Knowledge Engineering 3(2), 207–229 (1993)CrossRefGoogle Scholar
  18. [Sitaraman 94]
    Sitaraman, M., Weide, B.: Component-Based Software Using RESOLVE. Special feature, ACM Sigsoft Software Engineering Notes 19(4), 21–65 (1994)CrossRefGoogle Scholar
  19. [Sitaraman 00]
    Sitaraman, M., Atkinson, S., Kulczyski, G., Weide, B.W., Long, T.J., Bucci, P., Heym, W., Pike, S., Hollingsworth, J.: Reasoning about Software-Component Behavior. In: Sixth International Conference on Software Reuse, Vienna, Austria, pp. 266–283. Springer, Heidelberg (2000)Google Scholar
  20. [Smaragdakis 02a]
    Smaragdakis, Y., Batory, D.: Mixin layers: an object-oriented implementation technique for refinements and collaboration-based designs. ACM Transactions on Software Engineering and Methodology 11(2), 215–255 (2002)CrossRefGoogle Scholar
  21. [Smaragdakis 02b]
    Smaragdakis, Y.: Layered Development with (Unix) Dynamic Libraries. In: Seventh International Conference of Software Reuse, Austin, Texas, pp. 33–45. Springer, Heidelberg (2002)Google Scholar
  22. [Sridhar 02]
    Sridhar, N., Weide, B.W., Bucci, P.: Service Facilities: Extending Abstract Factories to Decouple Advanced Dependencies. In: Seventh International Conference on Software Reuse, Austin, Texas, pp. 309–326. Springer, Heidelberg (2002)Google Scholar
  23. [Stroustrup 97]
    Stroustrup, B.: The C++ Programming Language, 3rd edn. Addison-Wesley, Reading (1997)Google Scholar
  24. [Sun 99]
    Sun Microsystems: Dynamic Proxy Classes (1999), available at
  25. [Sun 03]
    Sun Microsystems: The JavaTM Tutorial Trail: The Reflection API (2003), available at
  26. [Weide 00]
    Weide, B.W.: Software Component Engineering. McGraw-Hill College Custom Publishing, 214–225 (2000), available at

Copyright information

© Springer-Verlag Berlin Heidelberg 2004

Authors and Affiliations

  • John M. Hunt
    • 1
  • Murali Sitaraman
    • 1
  1. 1.Department of Computer ScienceClemson UniversityClemsonUSA

Personalised recommendations