- Object-oriented design ontology
-
An object oriented design ontology [1] is a hierarchical structure of design constructs. Possible constructs that may be included within an object oriented design ontology are:
It also describes the various relations that may exist amongst these constructs. There may also be specific meta data attached to a construct.
The intention for this is to provide part of a larger ontology for programming and engineering. There are also a number of general design ontologies.
A design ontology could have a number of different uses:
- Design Decision Support - for support when making design decisions, i.e. which pattern and accompanying principles to use for solving a particular problem.
- Patterns Recognition In Code - an ontology could be used to identify particular patterns within existing code when carrying out maintenance or as part of code comprehension, see Web Of Patterns [5].
- As a language agnostic way of structuring patterns possibly further in XML. This would allow the generation of patterns in particular languages much easier and could be used as an alternative to Pattern Languages which are relatively unstructured natural language descriptions of patterns.
A BlueJ extension currently exists to generate design pattern structures based on XML templates. This allows a user to generate a design pattern in a simplistic manner for a given domain, e.g. A Coffee Shop. [6]
Some work has been done towards building relationships between patterns and classifying them:
Design Pattern Relationships and Classifications - http://www.ida.liu.se/~uweas/Lectures/DesignPatterns01/
There are a number of different design pattern families:
- Basic Design Patterns
- Enterprise Patterns
- J2EE Design Patterns
- Integration Patterns
- Antipatterns
There are a number of different design principles:
- Separation of concerns
- Convention over configuration
Design heuristics have been looked at in many different disciplines, this includes:
- Human Computer Interface
- Object Oriented Design Heuristics [Riel, 1996]
- Language Specific, Effective Java [Bloch, 2000]
Previous research has looked at aligning patterns, anti-patterns and principles in a taxonomy. These are built and situated within a specific domain using qualitative interviews between groups of developers An Object Oriented Design Taxonomy
The building-blocks of object-oriented design
According to A Theory of Object-Oriented Design, the rudiments ('building-blocks') in the ontology of object-oriented design are as follows:
Individual entities:
- Classes
- Methods
Higher-dimensional entities
- Uniform sets of entities (sets of classes, sets of methods)
- Uniform sets of uniform sets (sets of sets of classes, sets of sets of methods)
- Class hierarchies (sets of classes such that all inherit from one)
Relations:
- Simple relations ('method m1 calls method m2', 'class subcls inherits from class supercls')
- Total relations ('all the concrete collections inherit from the Collection interface')
- Isomorphic relations ('each factory method creates and returns instances of a distinct product class')
See also
Web Of Patterns - http://webofpatterns.blogspot.com/
Design Knowledge - http://www.springerlink.com/content/j62k9ruh40dt4jhx/
CODeP - http://www.cs.vu.nl/~guus/public/ekaw-tutorial/content-patterns.pdf
Design Patterns Applied (Pattern Hatching) C++ Examples - http://www.research.ibm.com/designpatterns/pubs/ph-jun99.pdf
Course Design Patterns - http://www.ida.liu.se/~uweas/Lectures/DesignPatterns01/
WebML - http://www.webml.org/webml/page1.do
The building-blocks of object-oriented design - A Theory of Object-Oriented Design
Object Oriented Design Patterns - http://www.oodesign.com/References
Wikimedia Foundation. 2010.