Components, Scripts, and Glue: A conceptual framework for software composition

The last decade has shown that object-oriented technology alone is not enough to cope with the rapidly changing requirements of present-day applications. Typically, objectoriented methods do not lead to designs that make a clear separation between computational and compositional aspects. Component-based systems, on the other hand, achieve flexibility by clearly separating the stable parts of systems (i.e. the components) from the specification of their composition. Components are black-box entities that encapsulate services behind well-defined interfaces. The essential point is that components are not used in isolation, but according to a software architecture which determines the interfaces that components may have and the rules governing their composition. A component, therefore, cannot be separated from a component framework. Naturally, it is not enough to have components and frameworks, but one needs a way to plug components together. However, one of the main problems with existing languages and systems is that there is no generally accepted definition of how components can be composed. In this thesis, we argue that the flexibility and adaptability needed for component-based applications to cope with changing requirements can be substantially enhanced if we do not only think in terms of components, but also in terms of architectures, scripts, and glue. Therefore, we present a conceptual framework for componentbased software development incorporating the notions of components and frameworks, software architectures, glue, as well as scripting and coordination, which allows for an algebraic view of software composition. Furthermore, we define the FORM calculus, an offspring of the asynchronous Pi-calculus, as a formal foundation for a composition language that makes the ideas of the conceptual framework concrete. The FORM calculus replaces the tuple communication of the Pi-calculus by the communication of forms (or extensible records). This approach overcomes the problem of position-dependent arguments, since the contents of communications are now independent of positions and, therefore, makes it easier to define flexible and extensible abstractions. We use the FORM calculus to define a (meta-level) framework for concurrent, objectoriented programming and show that common object-oriented programming abstractions such as instance variables and methods, different method dispatch strategies as well as synchronization are most easily modelled when class metaobjects are explicitly reified as first-class entities and when a compositional view of object-oriented abstractions is adopted. Finally, we show that both, polymorphic form extension and restriction are the basic composition mechanisms for forms and illustrate that they are the key concepts for defining extensible and adaptable, hence reusable higher-level compositional abstractions.

[1]  Guido Rossum,et al.  Internet Programming With Python , 1996 .

[2]  Oscar Nierstrasz,et al.  Components, Scripts and Glue , 2000 .

[3]  Luca Cardelli,et al.  Comparing Object Encodings , 1997, Inf. Comput..

[4]  Trygve Reenskaug,et al.  Working with objects - the OOram software engineering method , 1995 .

[5]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming , 2002 .

[6]  Luca Cardelli,et al.  A language with distributed scope , 1995, POPL '95.

[7]  John K. Ousterhout,et al.  Scripting: Higher-Level Programming for the 21st Century , 1998, Computer.

[8]  Jean-Marc Andreoli,et al.  LO and behold! Concurrent structured processes , 1990, OOPSLA/ECOOP '90.

[9]  Jeff McAffer Meta-level Programming with CodA , 1995, ECOOP.

[10]  Dimitri Konstantas,et al.  Interoperation of object-oriented applications , 1995 .

[11]  Lee E. McMahon Sed—a non-interactive text editor , 1990 .

[12]  Randall B. Smith,et al.  Self: The power of simplicity , 1987, OOPSLA 1987.

[13]  Robin Milner Functions as Processes , 1990, ICALP.

[14]  Luca Cardelli,et al.  A Semantics of Multiple Inheritance , 1984, Information and Computation.

[15]  Larry Wall,et al.  Programming Perl (2nd ed.) , 1996 .

[16]  Gregory D. Abowd,et al.  Formalizing style to understand descriptions of software architecture , 1995, TSEM.

[17]  Jens Palsberg,et al.  A Denotational Semantics of Inheritance and Its Correctness , 1994, Inf. Comput..

[18]  Philip Wadler,et al.  Comprehending monads , 1990, LISP and Functional Programming.

[19]  Wolfgang Pree,et al.  Design Patterns for Object-Oriented Software Development , 1994, Proceedings of the (19th) International Conference on Software Engineering.

[20]  Laurent Dami,et al.  A Lambda-Calculus for Dynamic Binding , 1998, Theor. Comput. Sci..

[21]  Mary Shaw,et al.  A field guide to boxology: preliminary classification of architectural styles for software systems , 1997, Proceedings Twenty-First Annual International Computer Software and Applications Conference (COMPSAC'97).

[22]  Larry Wall,et al.  Programming Perl , 1991 .

[23]  Davide Sangiorgi,et al.  Expressing mobility in process algebras : first-order and higher-order paradigms , 1993 .

[24]  Luca Cardelli,et al.  On understanding types, data abstraction, and polymorphism , 1985, CSUR.

[25]  Bjarne Stroustrup,et al.  C++ Programming Language , 1986, IEEE Softw..

[26]  Mary Shaw,et al.  Software architecture - perspectives on an emerging discipline , 1996 .

[27]  Oscar Nierstrasz,et al.  Towards and Object Calculus , 1991, Object-Based Concurrent Computing.

[28]  C. Tomlinson,et al.  Inheritance and Synchronization with Enabled Sets , 1989, OOPSLA.

[29]  Brian W. Beach,et al.  Connecting software components with declarative glue , 1992, International Conference on Software Engineering.

[30]  Michel Riveill,et al.  A synchronization mechanism for an object oriented distributed system , 1991, [1991] Proceedings. 11th International Conference on Distributed Computing Systems.

[31]  Oscar Nierstrasz,et al.  Towards a formal composition language , 1997 .

[32]  Luca Cardelli,et al.  Mobile Ambients , 1998, FoSSaCS.

[33]  Jean-Pierre Briot An Experiment in Classification and Specialization of Synchronization Schemes , 1996, ISOTAS.

[34]  Matthias Felleisen,et al.  Classes and mixins , 1998, POPL '98.

[35]  Oscar Nierstrasz,et al.  Regular types for active objects , 1993, OOPSLA '93.

[36]  Christopher Alexander,et al.  The Timeless Way of Building , 1979 .

[37]  Mitchell Wand,et al.  Modeling Subobject-based Inheritance , 1996, ECOOP.

[38]  Oscar Nierstrasz,et al.  Research directions in software composition , 1995, CSUR.

[39]  Farhad Arbab,et al.  The IWIM Model for Coordination of Concurrent Activities , 1996, COORDINATION.

[40]  C. A. R. Hoare,et al.  Communicating Sequential Processes (Reprint) , 1983, Commun. ACM.

[41]  Richard N. Taylor,et al.  A framework for classifying and comparing architecture description languages , 1997, ESEC '97/FSE-5.

[42]  Peter Buneman,et al.  Theoretical Aspects of Object-Oriented Programming , 1994 .

[43]  Toby Bloom,et al.  Evaluating synchronization mechanisms , 1979, SOSP '79.

[44]  Alexander L. Wolf,et al.  Acm Sigsoft Software Engineering Notes Vol 17 No 4 Foundations for the Study of Software Architecture , 2022 .

[45]  Roberto Ierusalimschy,et al.  Lua—An Extensible Extension Language , 1996 .

[46]  Mary Shaw,et al.  Architectural issues in software reuse: it's not just the functionality, it's the packaging , 1995, SSR '95.

[47]  Ralph E. Griswold,et al.  History of the Icon programming language , 1996 .

[48]  Jack Trout,et al.  The Power Of Simplicity , 1998 .

[49]  Oscar Nierstrasz,et al.  Formalizing Composable Software Systems — A Research Agenda , 1997 .

[50]  David Garlan,et al.  A Formal Approach to Software Architectures , 1992, IFIP Congress.

[51]  Benjamin C. Pierce,et al.  Decoding Choice Encodings , 1996, CONCUR.

[52]  Adele Goldberg,et al.  SmallTalk 80: The Language , 1989 .

[53]  Markus Lumpe,et al.  Modelling Objects in PICT , 1996 .

[54]  John K. Ousterhout,et al.  Tcl and the Tk Toolkit , 1994 .

[55]  Martín Abadi,et al.  A Theory of Objects , 1996, Monographs in Computer Science.

[56]  David Walker,et al.  Objects in the pi-Calculus , 1992, Inf. Comput..

[57]  Doug Lea,et al.  Concurrent programming in Java - design principles and patterns , 1996, Java series.

[58]  Oscar Nierstrasz,et al.  Using Metaobjects to Model Concurrent Objects with PICT , 1996, LMO.

[59]  Bertrand Meyer,et al.  Eiffel: The Language , 1991 .

[60]  David N. Turner,et al.  The polymorphic Pi-calculus : theory and implementation , 1996 .

[61]  Vasco Thudichum Vasconcelos,et al.  Typed Concurrent Objects , 1994, ECOOP.

[62]  Ralph Johnson Documenting frameworks using patterns , 1992, OOPSLA 1992.

[63]  David C. Luckham,et al.  An Event-Based Architecture Definition Language , 1995, IEEE Trans. Software Eng..

[64]  Kim B. Bruce A paradigmatic object-oriented programming language: Design, static typing and semantics , 1994, Journal of Functional Programming.

[65]  Eugenio Moggi,et al.  Computational lambda-calculus and monads , 1989, [1989] Proceedings. Fourth Annual Symposium on Logic in Computer Science.

[66]  Paul Clements,et al.  Software architecture in practice , 1999, SEI series in software engineering.

[67]  Sherman R. Alpert,et al.  The Design Patterns Smalltalk Companion , 1998 .

[68]  Tom Mens,et al.  Encapsulation and composition as orthogonal operators on mixins: a solution to multiple inheritance problems , 1996, Object Oriented Syst..

[69]  Robin Milner,et al.  The Polyadic π-Calculus: a Tutorial , 1993 .

[70]  Benjamin C. Pierce,et al.  Simple type-theoretic foundations for object-oriented programming , 1994, Journal of Functional Programming.

[71]  Thomas J. Mowbray,et al.  CORBA design patterns , 1997 .

[72]  Edsger W. Dijkstra,et al.  The structure of the “THE”-multiprogramming system , 1968, CACM.

[73]  Robin Milner,et al.  A Calculus of Mobile Processes, II , 1992, Inf. Comput..

[74]  Davide Sangiorgi,et al.  Algebraic Theories for Name-Passing Calculi , 1995, Inf. Comput..

[75]  Mehmet Aksit On the Design of the Object-Oriented Language Sina , 1989 .

[76]  Oscar Nierstrasz,et al.  Requirements for a Composition Language , 1994, ECOOP Workshop.

[77]  Vicki de Mey Visual composition of software applications , 1995 .

[78]  Benjamin C. Pierce,et al.  Concurrent Objects in a Process Calculus , 1994, Theory and Practice of Parallel Programming.

[79]  Gregory D. Abowd,et al.  Using style to understand descriptions of software architecture , 1993, SIGSOFT '93.

[80]  David Lorge Parnas,et al.  On the Design and Development of Program Families , 2001, IEEE Transactions on Software Engineering.

[81]  Daniel G. Bobrow,et al.  Book review: The Art of the MetaObject Protocol By Gregor Kiczales, Jim des Rivieres, Daniel G. and Bobrow(MIT Press, 1991) , 1991, SGAR.

[82]  David Garlan,et al.  Architectural Mismatch: Why Reuse Is So Hard , 1995, IEEE Softw..

[83]  David Flanagan,et al.  JavaScript: The Definitive Guide , 1996 .

[84]  James M. Purtilo,et al.  The POLYLITH software bus , 1994, TOPL.

[85]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[86]  Desmond D'Souza,et al.  Objects, Components, and Frameworks with UML: The Catalysis Approach , 1998 .

[87]  Paul Clements,et al.  Software Architecture: An Executive Overview , 1996 .

[88]  Raymond Johnson,et al.  Tcl and Java Integration , 1998 .

[89]  Gilad Bracha,et al.  Modularity meets inheritance , 1992, Proceedings of the 1992 International Conference on Computer Languages.

[90]  Robin Milner,et al.  Barbed Bisimulation , 1992, ICALP.

[91]  Pierre America,et al.  Pool-T: a parallel object-oriented language , 1987 .

[92]  Benjamin C. Pierce,et al.  Pict: a programming language based on the Pi-Calculus , 2000, Proof, Language, and Interaction.

[93]  Steve Hoffman,et al.  Writing real programs in DCL , 1998 .

[94]  José Meseguer,et al.  A logical theory of concurrent objects , 1990, OOPSLA/ECOOP '90.

[95]  Ali Mili,et al.  Reusing Software: Issues and Research Directions , 1995, IEEE Trans. Software Eng..

[96]  Johannes Sametinger,et al.  Software Engineering with Reusable Components , 1997, Springer Berlin Heidelberg.

[97]  Philippe Kruchten,et al.  The 4+1 View Model of Architecture , 1995, IEEE Softw..

[98]  Jan Bosch,et al.  Superimposition: a component adaptation technique , 1999, Inf. Softw. Technol..

[99]  David Garlan,et al.  Formal modeling and analysis of the HLA component integration standard , 1998, SIGSOFT '98/FSE-6.

[100]  William R. Cook,et al.  Mixin-based inheritance , 1990, OOPSLA/ECOOP '90.

[101]  Michael Cowlishaw,et al.  The REXX language: a practical approach to programming (2nd ed.) , 1985 .

[102]  Gul A. Agha,et al.  ACTORS - a model of concurrent computation in distributed systems , 1985, MIT Press series in artificial intelligence.

[103]  Luca Cardelli,et al.  Operations on Records , 1989, Mathematical Foundations of Programming Semantics.

[104]  Michael Papathomas,et al.  A Unifying Framework for Process Calculus Semantics of Concurrent Object-Oriented Languages , 1991, Object-Based Concurrent Computing.

[105]  Bertrand Meyer The Component Combinator for Enterprise Applications , 1998, J. Object Oriented Program..

[106]  Daniel M. Yellin,et al.  Strom: Protocol Specifications and Component Adapters , 1997 .

[107]  Vitaly Shmatikov,et al.  A Core Calculus of Classes and Mixins , 1999, ECOOP.

[108]  Davide Sangiorgi,et al.  Lazy functions and mobile processes , 2000, Proof, Language, and Interaction.

[109]  Ravi Sethi,et al.  Programming languages - concepts and constructs , 1988 .

[110]  Martín Abadi,et al.  An interpretation of objects and object types , 1996, POPL '96.

[111]  Ole Lehrmann Madsen,et al.  Object-oriented programming in the BETA programming language , 1993 .

[112]  Jack C. Wileden,et al.  Specification-level interoperability , 1991, CACM.

[113]  Markus Lumpe,et al.  Synchronizing Concurrent Objects in the Pi-Calculus , 1997, LMO.

[114]  Carlo Ghezzi,et al.  Programming language concepts , 1982 .

[115]  Robert L. Nord,et al.  Software Architecture in Industrial Applications , 1995, 1995 17th International Conference on Software Engineering.

[116]  Davide Sangiorgi An Interpretation of Typed Objects into Typed pi-Calculus , 1998, Inf. Comput..

[117]  Patrick Varone,et al.  Implementation of `Generic Synchronization Policies' in Pict , 1996 .

[118]  Davide Ancona,et al.  An Algebraic Approach to Mixins and Modularity , 1996, ALP.

[119]  Guido Rossum,et al.  Python Reference Manual , 2000 .

[120]  Murray Silverstein,et al.  A Pattern Language , 1977 .

[121]  Uday S. Reddy,et al.  Objects as closures: abstract semantics of object-oriented languages , 1988, LISP and Functional Programming.

[122]  Giuseppe Attardi,et al.  Metalevel Programming in CLOS , 1989, ECOOP.

[123]  Carolyn L. Talcott,et al.  A foundation for actor computation , 1997, Journal of Functional Programming.

[124]  Dan Harkey,et al.  The Essential Distributed Objects Survival Guide , 1995 .

[125]  Peter Sommerlad,et al.  Pattern-Oriented Software Architecture: A System of Patterns: John Wiley & Sons , 1987 .

[126]  Carl Hewitt,et al.  Viewing Control Structures as Patterns of Passing Messages , 1977, Artif. Intell..

[127]  Dimitri Konstantas Cell : A Framework for a Strongly Distributed Object Based System , 1993 .

[128]  Frederick P. Brooks,et al.  Automatic Data Processing , 1963 .

[129]  Naranker Dulay,et al.  Structuring parallel and distributed programs , 1993, Softw. Eng. J..

[130]  William R. Cook,et al.  A denotational semantics of inheritance , 1989 .

[131]  J. van den Bos,et al.  PROCOL - A Parallel Object Language with Protocols , 1989, OOPSLA.

[132]  Dennis Tsichritzis Object-Oriented Development for Open Systems , 1989, IFIP Congress.

[133]  Robin Milner,et al.  Communication and concurrency , 1989, PHI Series in computer science.

[134]  Mario Tokoro,et al.  An Object Calculus for Asynchronous Communication , 1991, ECOOP.

[135]  Cliff B. Jones A pi-Calculus Semantics for an Object-Based Design Notation , 1993, CONCUR.

[136]  Oscar Nierstrasz,et al.  Component-oriented software technology , 1995 .

[137]  John C. Mitchell,et al.  A Delegation-based Object Calculus with Subtying , 1995, FCT.

[138]  Markus Lumpe A Pi-Calculus Based Approach to Software Composition , 1999 .