Chapter 1: Introduction

Home - About » Computer Science - Research - Dissertation
Computer Science
Research, Industry Work,
Programming
Community Service
Hillside Group, CHOOSE,
Stanford GSA
The Serious Side
Business School,
Learning Chinese
Humorous Takes
Switzerland, United States,
Software, Fun Photos
Travel Stories
Europe, United States, Asia
  
Living Places
Berlin (+ Gallery), Zürich
Boston, S.F. + Bay Area

Frameworks are of key importance for developing large-scale object-oriented software systems. They promise higher productivity and shorter time-to-market through design and code reuse. However, many projects report that this promise is hard to fulfill: the design of object-oriented frameworks is all but well understood. This introductory chapter sheds some light on why this is so, and presents several key problems. It thereby poses the research questions that have driven the work presented in this dissertation, and gives an overview of how and where these questions are answered in this work.

1.1 Why object-oriented frameworks?

Object-oriented frameworks promise higher productivity and shorter time-to-market of application development through design and code reuse (than possible with non-framework based approaches).

Object orientation comprises object-oriented analysis, object-oriented design, and object-oriented programming. Using a small set of concepts (objects, classes, and their relationships), developers can model an application domain (analysis), define a software architecture to represent that model on a computer (design), and implement the architecture to let a computer execute the model.

None of these activities (analysis, design, and implementation), nor the resulting models, are trivial. To carry them out effectively, developers have invented additional concepts that represent the conceptual entities they are dealing with. One such key concept is the object-oriented framework.

An object-oriented framework is a reusable design together with an implementation [JF88, CIM92, Lew95, FS97, FSJ99]. The design represents a model of an application domain or a pertinent aspect thereof, and the implementation defines how this model can be executed, at least partially. A good framework's design and implementation is the result of a deep understanding of the application domain, usually gained by developing several applications for that domain. The framework represents the cumulated experience of how the software architecture and its implementation for most applications in the domain should look like. It leaves enough room for customization to solve a particular problem in the application domain.

Developers who apply a framework reuse its design and implementation. They do so to solve an application problem that falls into the domain modeled by the framework. By reusing the design, application developers customize a (hopefully) well-understood software architecture to their own specific application problem. This helps them get the key aspects of the architecture right from the beginning. By reusing the implementation, application developers get up to speed more quickly.

Through design and code reuse, frameworks help developers achieve higher productivity and shorter time-to-market in application development.

Designing and implementing object-oriented frameworks is hard. Typically, it requires several iterations to get a framework "right" (which might mean nothing more than that it gets a pause before the evolution of domain requirements leads to yet another redesign and re-implementation of the framework).

In contrast to non-framework based application development, a framework requires additional up-front investments. If a framework is bought, it requires money to buy it and time to learn it. If a framework is developed in-house, it requires time and resources, both to develop it, and later to teach it or to learn it.

However, the promise of a significant increase in productivity and reduction in time-to-market makes the investment worthwhile in most cases. Today, every large object-oriented development project I know of uses frameworks in one way or the other. Yet, while there is no way around frameworks in large-scale object-oriented software development, they are all but well understood and sometimes do not live up to their promises.

1.2 Problems with frameworks

What is wrong with object-oriented software development based on frameworks? No single answer can be given. Most projects that fail do so for a multitude of reasons, with poor design and implementation quality of frameworks being only one of them. Yet, frameworks can significantly contribute to project success and ensure flexibility and evolvability of applications. It is therefore worthwhile to investigate current problems in framework development and search for solutions.

Case studies [FK97], current practice [BBE95], as well as my own experiences with frameworks in whose development I have participated, which I have used, or which I have reviewed suggest the following key problems (these are elaborated in Chapter 2):

  • Class complexity. Classes define the behavior of objects, their instances. Objects collaborate in multiple contexts, for multiple purposes, exhibiting task-specific behavior. For complex objects, the definition of this behavior in a single flat class interface is inadequate, and better mechanisms that describe the different aspects of objects, are needed.
  • Complementary focus on classes and collaborations. Objects collaborate with each other, for different purposes. Much of the complexity of frameworks goes into designing and implementing the object collaboration behavior. By assigning responsibilities to individual objects, the focus on overall collaborative behavior is lost. Thus, mechanisms to describe collaboration behavior are needed.
  • Object collaboration complexity. The overall collaborative behavior of framework objects and their collaboration with client objects may become complex. To make the overall object collaboration easier to understand and to manage, it needs to be broken up into independent pieces. Means to describe task-specific collaborative behavior of objects are needed, as well as mechanisms to compose these pieces of collaborative behavior to define the full object collaboration.
  • Difficulties with using a framework. It is easy to use a framework in ways unforeseen and not intended by their original designers. In particular, the requirements that a framework puts upon its clients are frequently unclear and unspecified. Framework misuse causes constant work-arounds for the client and may easily lead to unstable and buggy code. Thus, mechanisms are needed that help prevent the (mis-)use of frameworks in ways not intended by the framework developers.

These are the problems addressed in this dissertation. Of course, these problems are only a subset of technical problems with frameworks. Yet, they are a particularly pertinent kind of problems.

These problems suggest a separation of concerns approach: because complexity is high, it needs to reduced. Reduction of complexity is achieved by breaking up the framework up into (re-)composable pieces. Each of the pieces can then be analyzed, designed, and understood individually.

1.3 Role modeling for framework design

Role-based object-oriented modeling (or, for short, role modeling), is such a separation of concerns approach. This dissertation presents an approach for designing object-oriented frameworks using role modeling. The basic role modeling concepts are role, role type, object collaboration task, and role model. The next paragraphs, summarized from Chapter 3, shortly explain the concepts.

Objects do not occur in a vacuum. Rather, each object collaborates with other objects: it does so by playing roles. A role is an observable behavioral aspect of an object. While playing roles, an object collaborates with other objects, usually for several different purposes at once. Each such well-defined purpose of object collaboration is an object collaboration task. The composition of all object collaboration tasks becomes the overall object collaboration.

A role type describes each role an object may play. A role type is a regular type specification. Each object collaboration task is described by a role model. A role model uses role types to describe how an object in an object collaboration task must behave (play a role) if it wants to properly carry out its part of the work. The role types of a role model relate to each other using regular object relationship descriptions. The role model is effectively a specification of the set of possible valid object collaboration tasks.

A class defines the behavior of objects, their instances. A class is the composition of several role types, each of which is taken from a role model and assigned to one or more classes. The composition of role types forms the class type. Classes and role models are complementary: a role model focuses on one particular task of object collaboration, ignoring others, and a class focuses on how roles played in different tasks come together in one kind of object.

A class model describes the overall collaboration of objects. A class model is a set of classes that are related with each other through role models and class inheritance. The object relationship descriptions between the classes can be derived from the relationship descriptions between the role types from the role models. This way, role models serve as the interconnecting glue between classes, not only showing the overall structure, but the individual object collaboration tasks that make up the class model. Effectively, with the help of classes, the class model composes the different role models to define what a valid overall object collaboration is.

This dissertation extends the basic modeling approach to support the design of frameworks, leading to the role modeling for framework design approach. The next paragraphs, summarized from Chapter 4, shortly explain the involved concepts.

A framework is a class model that defines the collaboration of (framework) objects (and their client objects with respect to the framework). Next to the framework-internal role models, a framework defines so-called free role models that provide a bridge between the framework client and the framework. Free role types are those role types of a free role model that are to be picked up by client classes. They specify how client objects of the framework must behave to make proper use of framework objects. Only by playing roles defined by free role types may client objects make use of a framework.

Frameworks build on other frameworks by picking up these other frameworks' free role types and assigning them to one or more of their own classes. This mechanism of making use of frameworks by free role models is applied recursively to view systems as layers of frameworks and framework extension stacked on top of each other. Framework extensions are a set of subclasses of framework classes that add new free role models. Through the use of free role models new clients may make use of the extended framework functionality as well.

How does this approach help in overcoming the problems stated above?

  • Class complexity. The complexity of a class is reduced by breaking its interface up into distinct role types. Experience shows that it is easier to understand the parts first and then to compose them rather than trying to understand the whole all at once.
  • Complementary focus on classes and collaborations. The explicit focus on object collaborations and class models rather than just class hierarchies ensures that both perspectives are taken into account and represented in the design of a framework.
  • Object collaboration complexity. The complexity of the overall collaborative behavior of framework objects is reduced by breaking it up into object collaboration tasks and describing it as the composition of role models. Again, understanding the parts first makes understanding the whole easier.
  • Difficulties using a framework. The concept of free role model lets developers specify succinctly how a framework is to be used by use-relationship based clients. Free role models help to prevent misuse that would otherwise occur easily if the requirements put upon clients are not clarified.

Role modeling for framework design is evolutionary in nature rather the revolutionary. It is used as an addition to traditional class-based modeling. Role modeling does not try to replace class-based modeling but rather to refine it and improve over it where necessary. Developers who use this approach do not have to throw away existing investments, but may selectively apply the approach where necessary.

1.4 Dissertation overview

The dissertation comprises three main parts. The first part describes the role modeling approach and how it is applied to framework design. The second part presents three case studies, each one focussed on evaluating different aspects of the approach. The third and final part reiterates the claims posed by the dissertation, and validates them using qualitative arguments and experiences gained from the case studies.

The first part on role modeling for framework design comprises Chapters 2 to 5.

  • Frameworks, related work, and dissertation thesis. Chapter 2 puts object-oriented frameworks into the context of software architecture. It reviews related work on object-oriented software architecture and frameworks and lists remaining problems. Based on these problems, it develops the dissertation thesis.
  • Role modeling. Chapter 3 introduces the role modeling foundations, on which Chapter 4 on framework design builds. Chapter 3 shows how the traditional class-based modeling approach can be extended with the concepts of role type and role model, and how existing concepts need to be revised.
  • Framework design. Chapter 4 builds on the role modeling foundation from Chapter 3. It develops a comprehensive definition of the concept of framework and discusses its context. It covers framework definition, framework use, and framework extension. It also discusses framework layering and documentation.
  • Extension of industry standards with role modeling concepts. Chapter 5 shows how current industry standards can be extended with role modeling concepts. Such an extension lets developers use role modeling with current standards. The chapter provides extensions of UML, Java, C++, and Smalltalk.

The second part presents the case studies. It comprises Chapters 6 to 8.

  • The Geo Object framework. Chapter 6 presents the Geo Object framework as a case study. This framework is the root framework of the Geo system, a distributed object system based on a metalevel architecture. The Object framework provides core abstractions like Object and Class common to many industrial systems.
  • The KMU Desktop Tools framework. Chapter 7 presents the KMU Desktop Tools framework as a case study. The framework is used to build software tools for desktop applications. It is based on the Tools and Materials Metaphor approach to software development.
  • The JHotDraw drawing editor framework. Chapter 8 presents the JHotDraw framework for drawing editors as a case study. JHotDraw is based on HotDraw, which is a widely known and mature framework used to build drawing editor applications.

The third part validates the claim and draws conclusions from the dissertation. It comprises Chapters 9 and 10.

  • Validation of dissertation thesis. Chapter 9 reviews the experiences made in the case studies, supports them with qualitative arguments, and validates the dissertation thesis.
  • Conclusions. Chapter 10 reviews the dissertation as a whole. It explains the consequences of the dissertation results, both from a narrow perspective (the thesis claim), and a wider perspective.

Finally, Appendices A to E provide additional material.

  • References. Appendix A lists the references of work referred to by the dissertation.
  • Glossary. Appendix B provides a glossary of key terms defined by the dissertation.
  • Notation guide. Appendix C provides a notation guide to role modeling for framework design.
  • Design patterns. Appendix D presents common design patterns cast in a role model form.
  • Further material. Appendix E provides pointers to further material.

For comprehensive understanding, the theory chapters must be read first. Then individual case studies may be read, followed by the validation of the dissertation thesis. Those who want to get an impression only may restrict their reading to Chapter 3 and 4 and to one or more case studies. Alternatively, they may directly jump into a case study, using Appendix C, the notation guide, as a minimal introduction to role modeling for framework design.

1.5 Actors in this dissertation

For properly identifying actors in this dissertation, I use the following conventions:

  • "we" identifies the reader and the author (you and me),
  • "the project team" identifies the team described in Chapter 6,
  • "the redesign team" identifies the team described in Chapter 7.

"The project team" and "the redesign team" are only used in their respective chapter. They are sometimes abbreviated as "the team".

Copyright (©) 2007 Dirk Riehle. Some rights reserved. (Creative Commons License BY-NC-SA.) Original Web Location: http://www.riehle.org