Abstract
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.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
Preview
Unable to display preview. Download preview PDF.
References
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)
Batory, D., Geraci, B.J.: Component Validation and Subjectivity in Gen Voca Generators. IEEE Transactions on Software Engineering 23(2), 67–82 (1997)
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)
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)
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)
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)
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)
Booch, G.: Software Components with Ada. Benjamin/Cummings (1987)
Czarnecki, K., Eisenecker, U.: Components and Generative Programming (invited paper). ACM SIGSOFT Software Engineering Notes 24(6), 2–19 (1999)
Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns Elements of Reusable Object-Oriented Software. Addison-Wesley Longman Inc., Reading (1995)
Hendler, J.: Enhancement for Multiple-inheritance. ACM SIGPLAN Notices 21(10), 98–106 (1986)
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)
Krueger, C.: Software Reuse. ACM Computer Surveys 24(2), 131–183 (1992)
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)
Moon, D.: Object-Oriented Programming with Flavors. Object-Oriented Programming Systems, Languages, and Applications. Portland, Oregon, 1–8 (1986)
Neighbors, J.: Draco: A Method for Engineering Reusable Software Systems. In: Biggerstaff, T., Perlis, A. (eds.) Software Reusability, Addison-Wesley/ACM Press (1989)
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)
Sitaraman, M., Weide, B.: Component-Based Software Using RESOLVE. Special feature, ACM Sigsoft Software Engineering Notes 19(4), 21–65 (1994)
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)
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)
Smaragdakis, Y.: Layered Development with (Unix) Dynamic Libraries. In: Seventh International Conference of Software Reuse, Austin, Texas, pp. 33–45. Springer, Heidelberg (2002)
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)
Stroustrup, B.: The C++ Programming Language, 3rd edn. Addison-Wesley, Reading (1997)
Sun Microsystems: Dynamic Proxy Classes (1999), available at http://java.sun.com/j2se/1.3/docs/guide/reflection/proxy.html
Sun Microsystems: The JavaTM Tutorial Trail: The Reflection API (2003), available at http://java.sun.com/docs/books/tutorial/reflect/
Weide, B.W.: Software Component Engineering. McGraw-Hill College Custom Publishing, 214–225 (2000), available at http://www.cse.ohio-state.edu/rsrg/sce/book/index.html
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2004 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Hunt, J.M., Sitaraman, M. (2004). Enhancements – Enabling Flexible Feature and Implementation Selection. In: Bosch, J., Krueger, C. (eds) Software Reuse: Methods, Techniques, and Tools. ICSR 2004. Lecture Notes in Computer Science, vol 3107. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-27799-6_8
Download citation
DOI: https://doi.org/10.1007/978-3-540-27799-6_8
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-540-22335-1
Online ISBN: 978-3-540-27799-6
eBook Packages: Springer Book Archive