Smalltalk-80: the language and its implementation
Smalltalk-80: the language and its implementation
Miranda: a non-strict functional language with polymorphic types
Proc. of a conference on Functional programming languages and computer architecture
Using prototypical objects to implement shared behavior in object-oriented systems
OOPLSA '86 Conference proceedings on Object-oriented programming systems, languages and applications
OOPSLA '87 Conference proceedings on Object-oriented programming systems, languages and applications
An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes
OOPSLA '89 Conference proceedings on Object-oriented programming systems, languages and applications
OOPSLA/ECOOP '90 Proceedings of the European conference on object-oriented programming on Object-oriented programming systems, languages, and applications
Design patterns: elements of reusable object-oriented software
Design patterns: elements of reusable object-oriented software
Object-oriented programming in the BETA programming language
Object-oriented programming in the BETA programming language
Reflective languages and metalevel architectures
ACM Computing Surveys (CSUR) - Special issue: position statements on strategic directions in computing research
ACM Computing Surveys (CSUR)
Role model based framework design and integration
Proceedings of the 13th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Modular object-oriented programming with units and mixins
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
N degrees of separation: multi-dimensional separation of concerns
Proceedings of the 21st international conference on Software engineering
Composing crosscutting concerns using composition filters
Communications of the ACM
Inserting ilities by controlling communications
Communications of the ACM - Internet abuse in the workplace and Game engines in scientific research
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
Object-oriented composition untangled
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Advanced Programming Language Design
Advanced Programming Language Design
The Art of the Metaobject Protocol
The Art of the Metaobject Protocol
Design pattern implementation in Java and aspectJ
OOPSLA '02 Proceedings of the 17th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Higher-Order and Symbolic Computation
An Application Framework For Module Composition Tools
ECCOP '96 Proceedings of the 10th European Conference on Object-Oriented Programming
Predicate Dispatching: A Unified Theory of Dispatch
ECCOP '98 Proceedings of the 12th European Conference on Object-Oriented Programming
Abstracting Object Interactions Using Composition Filters
ECOOP '93 Proceedings of the Workshop on Object-Based Distributed Programming
Adding Implicit Invocation to Languages: Three Approaches
Proceedings of the First JSSST International Symposium on Object Technologies for Advanced Software
AspectS - Aspect-Oriented Programming with Squeak
NODe '02 Revised Papers from the International Conference NetObjectDays on Objects, Components, Architectures, Services, and Applications for a Networked World
Composition, reuse and interaction analysis of stateful aspects
Proceedings of the 3rd international conference on Aspect-oriented software development
Super and inner: together at last!
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
OOPSLA '04 Proceedings of the 19th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Classpects: unifying aspect- and object-oriented language design
Proceedings of the 27th international conference on Software engineering
Traits: A mechanism for fine-grained reuse
ACM Transactions on Programming Languages and Systems (TOPLAS)
MultiJava: Design rationale, compiler implementation, and applications
ACM Transactions on Programming Languages and Systems (TOPLAS)
Awesome: an aspect co-weaving system for composing multiple aspect-oriented extensions
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Proceedings of the 7th international conference on Aspect-oriented software development
Prototyping and Composing Aspect Languages
ECOOP '08 Proceedings of the 22nd European conference on Object-Oriented Programming
Open, Extensible Object Models
Self-Sustaining Systems
Genoa Proceedings of the 23rd European Conference on ECOOP 2009 --- Object-Oriented Programming
Proceedings of the 9th International Conference on Aspect-Oriented Software Development
Modules as objects in newspeak
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
A versatile kernel for multi-language AOP
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
abc: an extensible AspectJ compiler
Transactions on Aspect-Oriented Software Development I
A machine model for aspect-oriented programming
ECOOP'07 Proceedings of the 21st European conference on Object-Oriented Programming
The keyword revolution: promoting language constructs for data access to first class citizens
Proceedings of the 1st International Workshop on Free Composition
Hi-index | 0.00 |
A considerable amount of research, especially within the OO and AOSD communities, has focused on understanding the potential and limitations of various composition techniques. This has led to a large number of proposals for alternative composition techniques, including many variations of message dispatch, inheritance, and aspect mechanisms. This paper makes the case that there is no single perfect composition technique that suits every situation, since different techniques incur different tradeoffs. The proper composition technique to use depends on the particular design problem and its requirements (such as the required adaptability, reusability, understandability and robustness). However, most programming languages limit the available composition techniques to a very few. To address this, we propose a novel composition model, called Co-op. The model provides dedicated abstractions that can be used to express a wide variety of object composition techniques ("composition operators"). Examples include various forms of inheritance, delegation, and aspects. The proposed model unifies objects (with encapsulated state and a message interface) and composition operators; composition operators are specified as first-class citizens. Multiple composition operators can be combined within the same application, and composition operators can even be used to compose new composition operators from existing ones. This opens new possibilities for developing domain-specific composition operators, taxonomies of composition operators, and for reuse and refinement of composition operators. To validate and experiment with the proposed model, we have designed and implemented a simple language, Co-op/I, that we also use in this paper to show concrete examples.