On the architecture of software component systems
Current object-oriented development practice is centered around application frameworks. We argue that this approach is misleading, as it detracts from the ultimate goal of composing software out of “software components” originating from different sources. In particular, we suggest a model of software composition that is based on passing of “first-class messages” rather than on inheritance.
In most object-oriented programming languages, messages and the methods that get executed in response to receiving them are only “second class citizens”. In these languages, one can send a message to an object, but one cannot further manipulate the message itself as a data object. As a consequence, many of the operations that a naive observer might expect to be available are in fact not usually offered. Examples of such missing operations are the ability to store arriving messages in a data structure and execute them asynchronously later, perhaps in a different order, or the capability of forwarding a received message to another object without first having to decode it.
We are working on a system based on an experimental language that supports “first-class messages” efficiently. We argue that this additional language capability by itself suffices to simplify the design of extensible, component-oriented systems, and that it leads to a more uniform overall system architecture.
KeywordsSoftware components frameworks applets reusability first-class messages
- Chan, P. and Lee, R. (1997). The Java Class Libraries: An Annotated Reference; Addison-Wesley.Google Scholar
- Evered, M., Keedy, J.L., Schmolitzky, A., and Menger, G. (1997). How Well Do Inheritance Mechanisms Support Inheritance Concepts?, in Hanspeter Mössenböck (Ed.), Modular Programming Languages, Proceedings of the Joint Modular Languages Conference, JMLC’97, Springer Lecture Notes in Computer Science No. 1204, 252–266.CrossRefGoogle Scholar
- Franz, M. (1997a). The Programming Language Lagoona: A Fresh Look at Object-Orientation. Software — Concepts and Tools, 18:1, 14–26.Google Scholar
- Krasner, G.E. and Pope, S.T. (1988) A Cookbook for using the Model-ViewController User Interface Paradigm in Smalltalk-89. Journal of Object-Oriented Programming, 1:3, 26–49.Google Scholar
- Lindholm, T., Yellin, F., Joy, B., and Walrath, K. (1996) The Java Virtual Machine Specification; Addison-Wesley.Google Scholar
- McIlroy, M.D. (1976) Mass Produced Software Components, in Software Engineering, Concepts and Techniques, Proceedings of the NATO Conferences, New York, 88–98.Google Scholar
- Meyer, B. (1988) Object-Oriented Software Construction; Prentice-Hall.Google Scholar
- Muys-Vasovic, J.-D. (1989) MacApp: An Object-Oriented Framework Application, in Tutorial Notes, Technology of Object-Oriented Languages and Systems (TOOLS) ’89.Google Scholar
- Odersky, M. and Wadler, P. (1997) Pizza into Java: Translating theory into practice, in Proceedings of POPL’97: The 24th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, ACM Press, 146–159.Google Scholar
- Wegner, P. and Zdonik, S.B. (1988). Inheritance as an Incremental Modification Mechanism, or, What Like Is and Isn’t Like, in ECOOP’88 Proceedings, Springer Lecture Notes in Computer Science, No. 322, 55–77.Google Scholar
- Wirth, N. and Gutknecht, J. (1992). Project Oberon: The Design of an Operating System and Compiler; Addison-Wesley.Google Scholar