Results 1 -
6 of
6
Design patterns: Abstraction and reuse of object-oriented design
- ECOOP '93
, 1993
"... We propose design patterns as a new mechanism for expressing object-oriented design experience. Design patterns identify, name, and abstract common themes in objectoriented design. They capture the intent behind a design by identifying objects, their collaborations, and the distribution of responsi ..."
Abstract
-
Cited by 167 (1 self)
- Add to MetaCart
We propose design patterns as a new mechanism for expressing object-oriented design experience. Design patterns identify, name, and abstract common themes in objectoriented design. They capture the intent behind a design by identifying objects, their collaborations, and the distribution of responsibilities. Design patterns play many roles in the object-oriented development process: they provide a common vocabulary for design, they reduce system complexity by naming and de ning abstractions, they constitute a base of experience for building reusable software, and they act as building blocks from which more complex designs can be built. Design patterns can be considered reusable micro-architectures that contribute to an overall system architecture. We describe how to express and organize design patterns and introduce a catalog of design patterns. We also describe our experience in applying design patterns to the design of object-oriented systems.
Designing the McCAT Compiler Based on a Family of Structured Intermediate Representations
- In Proceedings of the 5th International Workshop on Languages and Compilers for Parallel Computing, number 757 in LNCS
, 1992
"... The effective exploitation of advanced technology for the development of the nextgeneration high-performance computers requires the integrated development of compiler techniques and architectural design. In order to provide a research tool with which we can experiment with both new architectural fea ..."
Abstract
-
Cited by 44 (16 self)
- Add to MetaCart
The effective exploitation of advanced technology for the development of the nextgeneration high-performance computers requires the integrated development of compiler techniques and architectural design. In order to provide a research tool with which we can experiment with both new architectural features and compiler support for those features, we have been developing the McGill Compiler /Architecture Testbed, McCAT. In this paper we focus on the design of the McCAT compiler. The central theme of the paper is that the design of the family of intermediate representations should be driven by the analyses and transformations that are most important for effective compilation for architectures supporting some level of fine-grain parallelism. A primary objective of our design was to provide a natural way of supporting a framework for alias analysis that is general (handles scalars, arrays and pointers), accurate (provides accurate enough estimates for parallelizing transformations) , and pe...
Code Reuse in an Optimizing Compiler
"... This paper describes how the cmcc compiler reuses code --- both internally (reuse between different modules) and externally (reuse between versions for different target machines). The key to reuse are the application frameworks developed for global data-flow analysis, code generation, instruction sc ..."
Abstract
-
Cited by 8 (4 self)
- Add to MetaCart
This paper describes how the cmcc compiler reuses code --- both internally (reuse between different modules) and externally (reuse between versions for different target machines). The key to reuse are the application frameworks developed for global data-flow analysis, code generation, instruction scheduling, and register allocation. The code produced by cmcc is as good as the code produced by the native compilers for the MIPS and SPARC, although significantly less resources have been spent on cmcc (overall, about 6 man years by 2.5 persons). cmcc is implemented in C++, which allowed for a compact expression of the frameworks as class hierarchies. The results support the claim that suitable frameworks facilitate reuse and thereby significantly improve developer effectiveness. 1 Introduction A well-chosen set of application-specific frameworks results in significant code reuse, which is a requirement for concise code. In this paper, we report on our experience with using this software...
A Reuse Case Perspective on Documenting Frameworks
- In Proceedings of the 5 th Asia-Pacific Software Engineering Conference
, 1997
"... A framework is developed in order to support the development of a family of applications. Many approaches to documenting frameworks have been tried, though with different aims and audiences in mind. Of greatest utility are those aimed at reducing the learning curve for application developers. We pro ..."
Abstract
-
Cited by 5 (1 self)
- Add to MetaCart
A framework is developed in order to support the development of a family of applications. Many approaches to documenting frameworks have been tried, though with different aims and audiences in mind. Of greatest utility are those aimed at reducing the learning curve for application developers. We propose the concept of a reuse case as offering a perspective of the different approaches to documenting frameworks. The categories of reuse cases are defined, and we discuss other views of reuse cases that can help to classify them. 1. Introduction Many approaches to documenting frameworks have been tried, though with different aims and audiences in mind. We propose the concept of a reuse case as offering a perspective of the different approaches to documenting frameworks. The categories of reuse cases are defined, and we discuss other views of reuse cases that can help to classify them. The existing approaches to documenting frameworks are mapped into the perspective of reuse cases. A framew...
Tree-Based Code Optimization
, 1992
"... Nearly all algorithms for code optimization use a control flow graph. In this thesis, I will show that with very minor restrictions on program structure, an abstract syntax tree can be used instead, leading to algorithms that are often much simpler than their graphbased counterparts. The conclus ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
Nearly all algorithms for code optimization use a control flow graph. In this thesis, I will show that with very minor restrictions on program structure, an abstract syntax tree can be used instead, leading to algorithms that are often much simpler than their graphbased counterparts. The conclusion is that abstract syntax trees, not control flow graphs, should be the fundamental data structure in code optimization. 1 Introduction Most optimizing compilers consist of a front-end that does syntactic and semantic analysis, and a back-end that does optimization and machine code generation [ASU86]. The main data structure in the front-end is an abstract syntax tree (AST), while in the back-end it is a control flow graph (CFG), which consists of nodes representing computations and edges representing control flow. Thus, code optimization operates on a data structure---the CFG---in which the program has essentially been "flattened" into a tangle of GOTOs (edges). Unlike an AST, a CFG c...
A Case Study In Documenting And Developing Frameworks
, 1998
"... A Case Study in Documenting and Developing Frameworks Pierre D'enomm'ee A framework is a collection of abstract classes that provides an infrastructure common to a family of applications. The design of the framework fixes certain roles and responsibilities amongst the classes, as well as standard p ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
A Case Study in Documenting and Developing Frameworks Pierre D'enomm'ee A framework is a collection of abstract classes that provides an infrastructure common to a family of applications. The design of the framework fixes certain roles and responsibilities amongst the classes, as well as standard protocols for their collaboration. The variability within the family of applications is factored into socalled "hotspots", and the framework provides simple mechanisms to customize each hotspot. Customizing is typically done by subclassing an existing class of the framework and overriding a small number of methods. Sometimes, however, the framework insists that the customization preserves a protocol of collaboration between several subclasses, so customization requires the parallel development of these subclasses and certain of their methods. A framework exists to support the development of a family of applications. Typically a framework is developed by expert designers who have a deep knowle...

