Grammar-Oriented Object Design (GOOD) Homepage

Material on this and related links (c) Copyright Ali Arsanjani 1989-2002

Unauthorized reproduction or usage is prohibited.



What is GOOD?


GOOD is about writing very flexible software.

Grammar-oriented Object Design started with a university registration project around 1983 with H.Mirian and F. Oromchian. This project used an LL(1) parser to drive the execution of the program which would accept input tokens from user input using a scanner that would then submit them to a parser. This parser used a grammar that described the university registration system; specifically its screen flow and back end logic (then on the mainframe).

Around 1989, a set of Computer-based Training systems were built using this grammar-based approach [Arsanjani89]. This evolved into a method for designing object-oriented software. The engine of the CBT did not change, content , questions, pages, te3sts, etc. changed but the core "laws of the training domain" were intact and remained pretty much the same, or were very easy to modify non-intrusively by simply changing the grammar.

Many generative programs were then written: where a grammar-based approach was combined with generating code for every project, to decrease cycle time.

Later, GOOD attempted to address one of the primary risk areas within software engineering -- namely, that of the gulf between business and technical understanding of the architecture is addressed. A business architecture of mapping business architectures to software architectures in an adaptive fashion. There are many ways of using GOOD. One way starts out with defining a domain-specific language for the business domain, as part of extensions to current object-oriented and component-based methods such as the Unified Process or IBM GS Method, and creating a Configurable Workflow for the Enterprise Component's business logic controller. The Business Flow is often implemented inside a Configurable Profile for each component; representing a Product Line Instance.

The e-bazaar project at Maharishi University of Management is a public domain working example of this approach.

Map of Concepts


Here is a mind map of the concepts within GOOD.

Applications

Other applications of GOOD include:

1. Creating Adaptive Objects

2. Building Configurable Workflows

3. Tier-to-tier Mapping in n-tiered software architectures

4. Object Graph Traversal Definition

GOOD starts out by defining the manners of a component-oriented system. Manners are rules governing the behavior of a component or business object, plus the meta-data needed to give it the following properties:

1. Self-decription

2. Dynamic Configuration

3. Dynamic Collaboration

Manners also have to do with Business Rules as First-class Constructs of the component-based paradigm of software development where replaceable, executable parts are defined on the basis of their externally visible ports, connectors and interfaces. A component can be queried for its manners within a given processing context.

GOOD can be used to build Adaptive or Active Object Models. Here is a workshop that will address using Grammar-oriented Object Design in building Adaptive Systems.

Grammar-Oriented Object Design (GOOD) Homepage
What is GOOD?
Map of Concepts
Applications
Variation-oriented Design
Presentations on GOOD
People I have collaborated with on GOOD

 

Variation-oriented Design: The Business Language describes the domain and its variations

The architecture defines a language in which, among other things, the variantions of the product family (product line or business line) may be expressed. For example, if your domain of investigation is telecommunications, and you have many customers subscribed to your various products (Wireless, wireline, internet, cable, DSL, etc.), there will be parameters and variations from the needs of one product to another. You can specify a set of components within that context, that can be wired together in different combinations in order to meet the needs of each product line.

Thus each configuration is a statement in a language about telecommunication [products]. Taking the architecture into detailed design and implementation using GOOD, then involves specifying an often "small" domain-specific language which captures both the baseline of commonality between the products and their variations.

The next step in implementation would be to use or design a (parser) compiler that, given a description (grammar) in the language, assembles the components and allows them to interact in the right way.

In a sense you are defining the business flow language (e.g., workflow) between enterprise components. Use of a graphical language in this context would facilitate adoption and ease of maintenance.

 

Subsystem Anlaysis describes the interface language: The Configurable Architectural Style

A separate language can be used to specify the static and dynamic aspects of a business domain in terms of its subsystems and enterprise components. This langauge focuses on defining the how the components should interact; "talk to each other."

In order to make the components capable of adopting many configurations, it's essential to have a common set of interface definitions -- significantly fewer than there are components. 

In simple components at the Java Beans level, the language is elementary: this event has happened, this property has been changed. In more complex business components, the language is about events in the domain: "a Business Party has placed an Order for a Product Instance."

So the interface language definition consists of two parts:

  • the protocol of transactions that components can perform with each other -- 'event occurred', 'order cancelled', etc; and the details of the messages used to implement them;
  • the model of what they're talking to each other about -- Business Party, Orders, etc. (Notice that the important objects here are not the components themselves, but the business concepts they deal with).

In defining the model, it isn't usually sufficient to make a data model: you need to say something about the operations that can be done on the business components, the sequences of operations that are allowed, and the constraints on values their attributes may take. Different components may have different internal representions of the concepts, so the model should ideally be independent of any implementation --- just saying what the effects of operations are, rather than what they achieve.

They should be specified with respect to a business context, sensitive to business events and business rules:

Product Families and Product Lines

In families of products, the architecture is crucial in ensuring different family members can readily be formed by composing the components in different configurations. The same is true in enterprise integration.


Formal vs. Informal

In many cases the formal specification schools of thought have their arguments on rigour brushed aside by the pragmatic considerations of real-life ("in the trenaches") software engineering.

From this perspective, GOOD provides a balance between things like Z and a general purpose programming language like Java.


Component Identification

This involves more than the traditional noun underlining or using use-cases to non-systematically divine out key architectural abstractions rather, we suggest using business goals and business rules to drive out the functional chunks that support the business and may be represented as components downstream.


References

[Arsanjani89] Using Grammars to Dynamically Describe Applications

[Arsanjani98] GOOD: Meta-modeling and Grammar-oriented Object Design. OOPSLA 98 Workshop on Meta-Data and Active Object Models.

[Arsanjani99] Developing GOOD Business Frameworks

[Arsanjani2000] USING GRAMMAR-ORIENTED OBJECT DESIGN TO SEAMLESSLY MAP BUSINESS MODELS TO COMPONENT-BASED SOFTWARE ARCHITECTURES

Other publications

[Mirian 96] Application Programming and LL(1) Grammar, Seyed-Hassan Mirian-Hosseinabadi Farhad Oroumchian October 31, 1996


Presentations on GOOD

  1. Writing GOOD Business Compilers
  2. Writing a parser for GOOD
  3. Steps in Developing GOOD Business Frameworks
  4. Mapping Business Architecure to Software Architecure



People I have collaborated with on GOOD and Active Object Models:


Dissertation


Last Updated : Jan 2000, Dec 2001