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:
- Design patterns;[2]
- Design principles;
- Design heuristics.
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.[3]
- 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, for example, Coffee Shop.[4]
Some work has been done towards building relationships between patterns and classifying them:
Design Pattern Relationships and Classifications [5][edit]
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[6]
The building-blocks of object-oriented design[edit]
According to A Theory of Object-Oriented Design,[7] 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')
External links[edit]
- http://www.eden-study.org/articles/2002/isf4(4).pdf
- Knowledge
- CODeP
- Design Patterns Applied (Pattern Hatching) C++ Examples
- Course Design Patterns
- WebML
- A Theory of Object-Oriented Design The building-blocks of object-oriented design
- Object-Oriented Design Patterns
References[edit]
- ↑ http://protege.stanford.edu/publications/ontology_development/ontology101-noy-mcguinness.html
- ↑ http://www.patternlanguage.com/leveltwo/caframe.htm?/leveltwo/../bios/douglea.htm
- ↑ http://webofpatterns.blogspot.com/
- ↑ http://hamilton.bell.ac.uk/designpatterns/
- ↑ http://www.ida.liu.se/~uweas/Lectures/DesignPatterns01/
- ↑ http://www.jonathanholloway.co.uk/thesis/industry.jpg
- ↑ http://www.eden-study.org/articles/2002/isf4(4).pdf
This article "Object-oriented design ontology" is from Wikipedia. The list of its authors can be seen in its historical. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.