Specialization is an abstraction mechanism that allows defining object classes consisting of subsets of objects of other ( generic) object (super) classes. The inverse of specialization is usually called generalization.
There are two types of specialization: ISA and ISA*.
If class
isa
then all instances of
are also instances of
;
if
isa*
then all instances of
are also of instances of
, but cannot be
instances of any other (immediate) subclass of
,
that is, all isa* subclasses of a superclass are pair-wise disjoint.
Specialization defines a transitive relationship between object classes.
Thus, if object class
is a direct specialization of
object class
, and
is a direct specialization of
object class
, then
is a transitive specialization of
.
The specialization object classes form directed acyclic graphs.
Each specialization object class,
, must satisfy
generalization referential integrity constraints
requiring each object in
to belong to all the superclasses of
.
A specialization class
inherits all the attributes
of its superclass
.
If an attribute A is explicitly defined in both
and superclass
, then the local definition in
overrides the
inherited property in superclass
.
OPM allows multiple inheritance;
that is, an object class can have two (or more) superclasses
and
, neither is a superclass of the other.
If an attribute B is defined in both
and
then B must be defined locally in
and override
the definitions of B from
and
.
A specialization object class can either have an explicitly specified identifier or can inherit identifiers from its superclasses. Similarly, a specialization object class can either have an explicitly specified representation list, or can inherit the representation lists from its superclasses.
<specialization object class> ::= OBJECT CLASS <object class name>
<generic object classes>
<class description>
<class example>
<domain-specific properties>
<object identifier>
<represented by>
<object class delete rules>
;
<generic object classes> ::= <isa> <object class name>
| <generic object classes>, <isa> <object class name>
;
<isa> ::= isa | isa*
;
The following is an example of a specialization object class:
OBJECT CLASS AUTHOR isa PERSON ATTRIBUTE authored: list-of [1,] PUBLICATION