Last Updated: 12 August 2010
Attribute classification in Shlaer-Mellor [OOA91] involves the following attribute categories:
OOA10 adds literal attributes which can be useful when creating referential or polymorphic attribute mappings. It also adds system set attributes for defining system allocated IDs and providing controlled access to current subtype and current state information. Much more significantly, it adds polymorphic attributes which may descriptive, naming or referential. These additions can be grouped into the following attribute subcategories:
Naming attributes are those representing arbitrary names and labels. Mathematically dependent attributes are often used to create formatted names and labels from more primitive base attributes. Naming attributes will normally participate in one or more identifiers. The distinction between descriptive and naming is not essential for code generation purposes and many analysts ignore the distinction defining all base attributes as descriptive. However, whether an attribute is identifying or not is important for code generation purposes since object indexes and uniqueness constraints are determined from identifiers.
Categories and subcategories are modelled within the Information Model
subsystem of the
OOA of OOA.
However, a partial
OIM
outlining the key relationships is given below:
The leaf subtypes in the model are:
Simple Base Attribute
Simple Referential Attribute
Literal Base Attribute
Literal Referential Attribute
Mathematically Dependent
Base Attribute
Mathematically Dependent
Referential-Like Attribute
System Set Attribute
Polymorphic
Base Attribute
Polymorphic
Referential Attribute
Attribute categories, subcategories and the resulting leaf subtypes are summarised in the table below:
Attribute Subcategory | ||||||||
True | Polymorphic | |||||||
Simple | Literal | Mathematically Dependent | System Set | |||||
Attribute Category | Base | Descriptive | Simple Base Attribute |
Literal Base Attribute |
Mathematically Dependent
Base Attribute |
Mathematically Dependent
Referential-Like Attribute 1 |
System Set Attribute 2 |
Polymorphic
Base Attribute 4 |
Naming | None | |||||||
Referential | Simple Referential Attribute |
Literal Referential Attribute |
None | None3 |
Polymorphic
Referential Attribute |
Identifying attributes are central to the idea that relationships should be formalized in information model specific terms allowing constraints between relationships to be clearly specified. However, the object identities defined by identifying attributes are not fixed and may change frequently depending on the number and nature of the identifying attributes that compose each identifier. The reason that mathematically dependent, referential and polymorphic attributes may be identifying attributes is that the implementation of object identity within Action Language code is normally based on object instance handles. It only appears within an information model that object identity is implemented using identifying attributes.
Of course, this appearance was reinforced in OOA91 because lifecycle model directed events carry identifying attributes to reference destination object instances. This is no longer the case in OOA10. Some would argue that a software architecture should be free to choose how it implements object identity. However, the original scheme either has to place significant restrictions on when identifying attributes are allowed to change or has to constantly monitor for changes and fix any effected object indexes when changes occur. I should also point out that referential attribute changes are not normally observable at all even though they can appear frequently in compound identifiers.