Results 1 - 10
of
57
Runtime support for type-safe dynamic Java classes
- In Proceedings of the Fourteenth European Conference on Object-Oriented Programming
, 2000
"... Modern software must evolve in response to changing conditions. In the most widely used programming environments, code is static and cannot change at runtime. This poses problems for applications, that have limited down-time. More support is needed for dynamic evolution. In this paper we present an ..."
Abstract
-
Cited by 81 (3 self)
- Add to MetaCart
Modern software must evolve in response to changing conditions. In the most widely used programming environments, code is static and cannot change at runtime. This poses problems for applications, that have limited down-time. More support is needed for dynamic evolution. In this paper we present an approach for supporting dynamic evolution of Java programs. In this approach, Java programs can evolve by changing their components, namely classes, during their execution. Changes in a class lead to changes in the its instances, thereby allowing evolution of both code and state. The approach promotes compatibility with existing Java applications, and maintains the security and type safety controls imposed by Java’s dynamic linking mechanism. Experimental analyses of our implementation indicate that the implementation imposes a moderate performance penalty relative to the unmodified virtual machine.
Traits: A mechanism for fine-grained reuse
- Transactions on Programming Languages and Systems
, 2006
"... Inheritance is well-known and accepted as a mechanism for reuse in object-oriented languages. Unfortunately, due to the coarse granularity of inheritance, it may be difficult to decompose an application into an optimal class hierarchy that maximizes software reuse. Existing schemes based on single i ..."
Abstract
-
Cited by 60 (18 self)
- Add to MetaCart
Inheritance is well-known and accepted as a mechanism for reuse in object-oriented languages. Unfortunately, due to the coarse granularity of inheritance, it may be difficult to decompose an application into an optimal class hierarchy that maximizes software reuse. Existing schemes based on single inheritance, multiple inheritance, or mixins, all pose numerous problems for reuse. To overcome these problems we propose traits, pure units of reuse consisting only of methods. We develop a formal model of traits that establishes how traits can be composed, either to form other traits, or to form classes. We also outline an experimental validation in which we apply traits to refactor a non-trivial application into composable units.
Dynamically Composable Collaborations with Delegation Layers
- In Proc. of ECOOP 2002, LNCS
, 2002
"... It has been recognized in several works that a slice of behavior affecting a set of collaborating classes is a better unit of reuse than a single class. Different techniques and language extensions have been suggested to express such slices in programming languages. We propose delegation layers, an ..."
Abstract
-
Cited by 59 (4 self)
- Add to MetaCart
It has been recognized in several works that a slice of behavior affecting a set of collaborating classes is a better unit of reuse than a single class. Different techniques and language extensions have been suggested to express such slices in programming languages. We propose delegation layers, an approach that scales the OO mechanisms for single objects, such as delegation, late binding, and subtype polymorphism, to sets of collaborating objects. Technically, delegation layers combine and generalize delegation and virtual class concepts. Due to their runtime semantics, delegation layers are more flexible than previous compile time approaches like mixin layers.
Language constructs for context-oriented programming
- In Proceedings of the Dynamic Languages Symposium
, 2005
"... ContextL is an extension to the Common Lisp Object System that allows for Context-oriented Programming. It provides means to associate partial class and method definitions with layers and to activate and deactivate such layers in the control flow of a running program. When a layer is activated, the ..."
Abstract
-
Cited by 46 (11 self)
- Add to MetaCart
ContextL is an extension to the Common Lisp Object System that allows for Context-oriented Programming. It provides means to associate partial class and method definitions with layers and to activate and deactivate such layers in the control flow of a running program. When a layer is activated, the partial definitions become part of the program until this layer is deactivated. This has the effect that the behavior of a program can be modified according to the context of its use without the need to mention such context dependencies in the affected base program. We illustrate these ideas by providing different UI views on the same object while, at the same time, keeping the conceptual simplicity of objectoriented programming that objects know by themselves how to behave, in our case how to display themselves. These seemingly contradictory goals can be achieved by separating class definitions into distinct layers instead of factoring out the display code into different classes.
Component Integration with Pluggable Composite Adapters
- Software Architectures and Component Technology: The State of the Art in Research and Practice
, 1999
"... . In this paper we deal with object-oriented component integration issues. We argue that traditional framework customization techniques are inappropriate for componentbased programming since they lack support for non-invasive, encapsulated, dynamic customization. We propose a new language construct, ..."
Abstract
-
Cited by 40 (6 self)
- Add to MetaCart
. In this paper we deal with object-oriented component integration issues. We argue that traditional framework customization techniques are inappropriate for componentbased programming since they lack support for non-invasive, encapsulated, dynamic customization. We propose a new language construct, called a pluggable composite adapter, for expressing component gluing. A pluggable composite adapter allows the separation of customization code from component implementation, resulting in better modularity, flexible extensibility, and improved maintenance and understandability. We also discuss alternative realizations of the construct. 1. Introduction Component software, i.e., software that is an assembly of individual, independently developed parts, is becoming the predominant architecture. We consider two factors as the driving force behind this development. First, as indicated in [22] component software represents a middle path between the two extremes that predominate traditional sof...
Generic Wrappers
- IN PROCEEDINGS OF ECOOP 2000, LNCS 1850
, 2000
"... Component software means reuse and separate marketing of pre-manufactured binary components. This requires components from different vendors to be composed very late, possibly by end users at run time as in compound-document frameworks. To this aim, we propose generic wrappers, a new language constr ..."
Abstract
-
Cited by 39 (0 self)
- Add to MetaCart
Component software means reuse and separate marketing of pre-manufactured binary components. This requires components from different vendors to be composed very late, possibly by end users at run time as in compound-document frameworks. To this aim, we propose generic wrappers, a new language construct for stronglytyped class-based languages. With generic wrappers, objects can be aggregated at run time. The aggregate belongs to a subtype of the actual type of the wrapped object. A lower bound for the type of the wrapped object is fixed at compile time. Generic wrappers are type safe and support modular reasoning. This feature combination is required for true component software but not achieved by known wrapping and combination techniques, such as the wrapper pattern or mix-ins. We analyze the design space for generic wrappers, e.g. overriding, forwarding vs. delegation, and snappy binding of the wrapped object. As a proof of concept, we add generic wrappers to Java and report on a mechanized type soundness proof of the latter.
Dynamic and selective combination of extensions in component-based applications
- In Proceedings of the 23rd International Conference on Software Engeneering (ICSE’01
, 2001
"... Support for dynamic and client-specific customization is required in many application areas. We present a (distributed) application as consisting of a minimal functional core – implemented as a component-based system, and an unbound set of potential extensions that can be selectively integrated with ..."
Abstract
-
Cited by 38 (9 self)
- Add to MetaCart
Support for dynamic and client-specific customization is required in many application areas. We present a (distributed) application as consisting of a minimal functional core – implemented as a component-based system, and an unbound set of potential extensions that can be selectively integrated within this core functionality. An extension to this core may be a new service, due to new requirements of end users. Another important category of extensions we consider, are non-functional services such as authentication, which typically introduce interaction refinements at the application level. In accordance to the separation of concerns principle, each extension is implemented as a layer of mixin-like wrappers. Each wrapper incrementally adds behavior and state to a core component instance from the outside, without modifying the component’s implementation. The novelty of this work is that the composition logic, responsible for integrating extensions into the core system, is externalized from the code of clients, core system and extensions. Clients (end users, system integrators) can customize this composition logic on a per collaboration basis by ‘attaching ’ high-level interpretable extension identifiers to their interactions with the core system. 1.
Traits: Composable units of behaviour
- In Proc. European Conference on Object-Oriented Programming
, 2003
"... Abstract. Despite the undisputed prominence of inheritance as the fundamental reuse mechanism in object-oriented programming languages, the main variants — single inheritance, multiple inheritance, and mixin inheritance — all suffer from conceptual and practical problems. In the first part of this p ..."
Abstract
-
Cited by 32 (0 self)
- Add to MetaCart
Abstract. Despite the undisputed prominence of inheritance as the fundamental reuse mechanism in object-oriented programming languages, the main variants — single inheritance, multiple inheritance, and mixin inheritance — all suffer from conceptual and practical problems. In the first part of this paper, we identify and illustrate these problems. We then present traits, a simple compositional model for structuring object-oriented programs. A trait is essentially a group of pure methods that serves as a building block for classes and is a primitive unit of code reuse. In this model, classes are composed from a set of traits by specifying glue code that connects the traits together and accesses the necessary state. We demonstrate how traits overcome the problems arising from the different variants of inheritance, we discuss how traits can be implemented effectively, and we summarize our experience applying traits to refactor an existing class hierarchy.
An Architecture to Support Dynamic Composition of Service Components and its Applicability to Internet Security
, 2000
"... The creation of composite services from service components at runtime can be achieved using several different techniques. In the first approach, two or more components are assembled while each component remains distinct, and potentially distributed, within a network. To facilitate this, a new commo ..."
Abstract
-
Cited by 30 (3 self)
- Add to MetaCart
The creation of composite services from service components at runtime can be achieved using several different techniques. In the first approach, two or more components are assembled while each component remains distinct, and potentially distributed, within a network. To facilitate this, a new common interface must be constructed at runtime which allows other services to interact with this set of service components as if it was a single service. In the second approach, a new composite service is formed where all of the functionality of the service components is interconnected but the service components remain distinct. In the third approach, a new composite service is formed where all the functionality of the service is contained in a single new component. This thesis describes the design of an architecture to support the runtime creation of composite services using enhanced versions of existing technologies such as Jini, JavaBeans, and XML. An application to create user-defined ...

