Abstract. Component-based programming is currently carried out using mainstream object-oriented languages. These languages have to be used in a highly disciplined way to guarantee flexible component composition and extensibility. This paper investigates abstractions for component-oriented programming on the programming language level. We propose a simple prototype-based model for first-class components on top of a class-based object-oriented language. The model is formalized as an extension of Featherweight Java. Our calculus includes a minimal set of primitives to dynamically build, extend, and compose software components, while supporting features like explicit context dependencies, late composition, unanticipated component extensibility, and strong encapsulation. We present a type system for our calculus that ensures type-safe component definition, composition, and evolution. 1
|
3620
|
Design Patterns: Elements of Reusable Object-oriented Software
– Gamma, Helm, et al.
- 1994
|
|
1415
|
The Java Language Specification
– Gosling, Joy, et al.
- 1996
|
|
958
|
Software Architecture: Perspectives on an Emerging Discipline
– Shaw, Garlan
- 1996
|
|
857
|
Component Software: Beyond Object-Oriented Programming", AddisonWesley and ACM-Press
– Szyperski
- 1997
|
|
795
|
A Theory of Objects
– Abadi, Cardelli
- 1996
|
|
762
|
On understanding types, data abstraction, and polymorphism
– Cardelli, Wegner
- 1985
|
|
484
|
Foundations for the study of software architecture
– Perry, Wolf
- 1992
|
|
483
|
Self: the power of simplicity, in
– Ungar, Smith
- 1987
|
|
393
|
A syntactic approach to type soundness
– Wright, Felleisen
- 1994
|
|
350
|
A Classification and Comparison Framework for Software Architecture Description Languages
– Medvidovic, Taylor
- 2000
|
|
331
|
Mixin-based inheritance, in
– Bracha, Cook
- 1990
|
|
302
|
Types and programming languages
– Pierce
- 2002
|
|
286
|
Featherweight Java: A minimal core calculus for Java and GJ
– Igarashi, Pierce, et al.
- 1999
|
|
271
|
Specification and Analysis of System Architecture Using Rapide
– Luckham, Kenney, et al.
- 1995
|
|
269
|
Specifying distributed software architectures
– Magee, Dulay, et al.
- 1995
|
|
213
|
A Formal Approach to Software Architecture
– Allen
- 1997
|
|
211
|
Classes and mixins
– Flatt, Krishnamurthi, et al.
- 1998
|
|
200
|
D.: ACME: An Architecture Description Interchange Language
– Garlan, Monroe, et al.
- 1997
|
|
167
|
Modules for Standard ML
– MacQueen
|
|
160
|
The Common Object Request Broker: Architecture and Specification, Revision 2.0
– Group, Inc
- 1996
|
|
152
|
Units: Cool modules for HOT languages
– Flatt, Felleisen
|
|
141
|
Correct Architecture Refinement
– Moriconi, Qian, et al.
- 1995
|
|
133
|
Exploting style in architectural design environments
– Garlan, Allen, et al.
- 1994
|
|
131
|
The Programming Language Jigsaw: Mixins, Modularity and Multiple Inheritance
– Bracha
- 1992
|
|
129
|
Program fragments, linking, and modularization
– CARDELLI
- 1997
|
|
110
|
The Cecil Language: Specification and Rationale
– Chambers
- 1993
|
|
91
|
A calculus of module systems
– ANCONA, ZUCCA
- 2002
|
|
87
|
Modularity meets inheritance, in
– Bracha, Lindstrom
- 1992
|
|
81
|
Jiazzi: new-age components for old-fashioned java
– MCDIRMID, FLATT, et al.
- 2001
|
|
67
|
Type-safe delegation for run-time component adaptation
– Kniesel
- 1999
|
|
62
|
Inside COM: Microsoft's Component Object Model
– Rogerson
- 1997
|
|
60
|
Integrating independently-developed components in object-oriented languages
– Hölzle
- 1993
|
|
59
|
Type-safe linking and modular assembly language
– Glew, Morrisett
- 1999
|
|
51
|
Independently extensible systems - software engineering potential and challenges
– Szyperski
- 1996
|
|
49
|
A Core Calculus of Classes and Mixins
– Bono, Patel, et al.
- 1999
|
|
45
|
Mixin modules in a call-by-value setting
– HIRSCHOWITZ, X
|
|
41
|
Types for Modules
– Russo
- 1998
|
|
37
|
Recursive structures for Standard ML
– Russo
|
|
35
|
A Theory of Mixin Modules: Basic and Derived Operators
– Ancona, Zucca
- 1998
|
|
27
|
Generic wrappers
– Büchi, Weck
- 2000
|
|
26
|
Compound types for Java
– Büchi, Weck
|
|
25
|
Architectural reasoning in archjava
– Aldrich, Chambers
- 2002
|
|
24
|
A basic model of typed components
– Seco, Caires
- 2000
|
|
20
|
Programming Languages for Reusable Software Components
– Flatt
- 1999
|
|
18
|
C♯ language specification
– Hejlsberg, Golde, et al.
- 2003
|
|
17
|
Coordinating Mobile Object-Oriented Code
– Bettini, Bono, et al.
- 2002
|
|
15
|
True modules for Java-like languages
– ANCONA, E
- 2001
|
|
8
|
Extending Smalltalk with mixins
– Bracha, Griswold
- 1996
|
|
8
|
Objects + views = components
– Odersky
- 2000
|
|
4
|
ACOEL on CORAL: A component requirement and abstraction language
– Sreedhar
- 2001
|