Results 1 - 10
of
10
MultiJava: Modular Open Classes and Symmetric Multiple Dispatch for Java
- In OOPSLA 2000 Conference on Object-Oriented Programming, Systems, Languages, and Applications
, 2000
"... We present MultiJava, a backward-compatible extension to Java supporting open classes and symmetric multiple dispatch. Open classes allow one to add to the set of methods that an existing class supports without creating distinct subclasses or editing existing code. Unlike the “Visitor ” design patte ..."
Abstract
-
Cited by 163 (22 self)
- Add to MetaCart
We present MultiJava, a backward-compatible extension to Java supporting open classes and symmetric multiple dispatch. Open classes allow one to add to the set of methods that an existing class supports without creating distinct subclasses or editing existing code. Unlike the “Visitor ” design pattern, open classes do not require advance planning, and open classes preserve the ability to add new subclasses modularly and safely. Multiple dispatch offers several well-known advantages over the single dispatching of conventional object-oriented languages, including a simple solution to some kinds of “binary method ” problems. MultiJava’s multiple dispatch retains Java’s existing class-based encapsulation properties. We adapt previous theoretical work to allow compilation units to be statically typechecked modularly and safely, ruling out any link-time or run-time type errors. We also present a novel compilation scheme that operates modularly and incurs performance overhead only where open classes or multiple dispatching are actually used. 1.
Aspect-Oriented Dependency Inversion
, 2001
"... The qualities of coupling and cohesion have long governed software engineering. Aspect-oriented software development (AOSD) provides a new weapon in the fight against improper coupling. For example, many OO design patterns succumb to aspect-oriented replacement when analyzed for their dependencies i ..."
Abstract
-
Cited by 8 (0 self)
- Add to MetaCart
The qualities of coupling and cohesion have long governed software engineering. Aspect-oriented software development (AOSD) provides a new weapon in the fight against improper coupling. For example, many OO design patterns succumb to aspect-oriented replacement when analyzed for their dependencies in terms of abstractness and stability. Component-based development (CBD) is another tool for dependency management at a larger scale. I propose combining the best of AOSD and CBD techniques for software module dependency management. 2.
CZT: A Framework for Z Tools
- ZB. Lecture
, 2005
"... Abstract. The Community Z Tools (CZT) project is an open-source Java framework for building formal methods tools for Z and Z dialects. It also includes a set of tools for parsing, typechecking, transforming and printing standard Z specifications in L ATEX, Unicode or XML formats. This paper gives an ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
Abstract. The Community Z Tools (CZT) project is an open-source Java framework for building formal methods tools for Z and Z dialects. It also includes a set of tools for parsing, typechecking, transforming and printing standard Z specifications in L ATEX, Unicode or XML formats. This paper gives an overview of the CZT framework, including an introduction to its visitor design pattern that makes it possible to write new Z transformation tools in just a few lines of Java code. The paper also discusses several problems and challenges that arose when attempting to build tools based on the ISO Standard for Z. 1
Applying the Decorator Pattern for Profiling Object-Oriented Software
"... A profiler can provide valuable information to a developer to facilitate program optimization, debugging or testing. In this paper, we describe the use of the Decorator pattern for non-intrusive profiling of object-oriented applications. We provide a formal specification of the Decorator pattern, an ..."
Abstract
-
Cited by 4 (2 self)
- Add to MetaCart
A profiler can provide valuable information to a developer to facilitate program optimization, debugging or testing. In this paper, we describe the use of the Decorator pattern for non-intrusive profiling of object-oriented applications. We provide a formal specification of the Decorator pattern, and show that the pattern can be used as a program transformation without altering the external, observable behavior of the system. We refer to such a transformation as a correctness preserving transformation, or CPT. As a CPT, the Decorator pattern can be used to non-intrusively profile object-oriented applications and we illustrate this application with an invariant validator for enforcement of Design by Contract, and for profiling memory. We provide a case study to compare the cost tradeoffs of validating invariants at different points in a program.
Digging into the Visitor Pattern
- Proc. IEEE 16th Int. Conf. Software Engineering and Knowlege Engineering (SEKE’2004). IEEE, Los Alamitos
, 2004
"... In this paper we present an alternative to the VISITOR pattern, DYNAMIC DISPATCHER, that can be applied to extend existing software in a nonintrusive way, and which simulates covariant overriding of visit methods. It allows to express polymorphic operations through visitor classes in a more natural ..."
Abstract
-
Cited by 4 (1 self)
- Add to MetaCart
In this paper we present an alternative to the VISITOR pattern, DYNAMIC DISPATCHER, that can be applied to extend existing software in a nonintrusive way, and which simulates covariant overriding of visit methods. It allows to express polymorphic operations through visitor classes in a more natural way than the original VISITOR pattern. Our solution DYNAMIC DISPATCHER can be applied without touching existing domain classes. Therefore, it is especially useful to extend frameworks and libraries. We have implemented DYNAMIC DISPATCHER as a small framework in Java and conducted performance measurements which show that the overhead is acceptable in most real world scenarios.
Automated validation of class invariants in C++ applications
- In International Conference on Automated Software Engineering
"... In this paper, we describe a non-invasive approach for validation of class invariants in C++ applications. Our approach is fully automated so that the user need only supply the class invariants for each class hierarchy to be checked and our validator constructs an InvariantVisitor, a variation of th ..."
Abstract
-
Cited by 3 (2 self)
- Add to MetaCart
In this paper, we describe a non-invasive approach for validation of class invariants in C++ applications. Our approach is fully automated so that the user need only supply the class invariants for each class hierarchy to be checked and our validator constructs an InvariantVisitor, a variation of the Visitor Pattern, and an InvariantFacilitator. Instantiations of the InvariantVisitor and InvariantFacilitator classes encapsulate the invariants in C++ statements and facilitate the validation of the invariants. We describe both our approach and our results of validating invariants in keystone, a well tested parser front-end for C++. 1
Relaxed MultiJava: Balancing . . .
"... We present the rationale, design, and implementation of Relaxed MultiJava (RMJ), a backward-compatible extension of Java that allows ..."
Abstract
- Add to MetaCart
We present the rationale, design, and implementation of Relaxed MultiJava (RMJ), a backward-compatible extension of Java that allows
Static and Metaprogramming Patterns and Static Frameworks
"... The classic UNIX principle to write code that generates code instead of writing this code yourself [48, Chapters 1,9] is experiencing a revival. Much research was done, the techniques are better understood now, and the generation tools were refined. This pattern catalog consists of adaptations of th ..."
Abstract
- Add to MetaCart
The classic UNIX principle to write code that generates code instead of writing this code yourself [48, Chapters 1,9] is experiencing a revival. Much research was done, the techniques are better understood now, and the generation tools were refined. This pattern catalog consists of adaptations of the Gang of Four design patterns [27] Abstract Factory, Adapter, Strategy, and Visitor to the metaprogramming level. It shows that replacing runtime polymorphism by static polymorphism helps to lift variation from the code level up to the meta level, where it might more naturally belong to. Some of the patterns proposed are especially useful for facilitating portable code. The patterns shown can be used to build static Frameworks [50]. A simple example is also presented. For all patterns proposed we identified usage examples in popular existing applications or libraries. Each pattern presentation is accompanied with an example. These examples show sample code in C++. The template metaprogramming capabilities of C++ [2, 17, 65] allow us to express both the program and the meta program in the same programming language.

