A reference can be either human-readable or an internal object reference. Human-readable references refer to identifiers that are used in human communication, such as the unique names of astronomical bodies, the ISBN of books and the employee numbers of the employees of a company. Internal object references refer to the computer memory addresses of OOP objects, thus providing an efficient mechanism for accessing objects in the main memory of a computer.
Some languages, like SQL and XML, only support human-readable, but not internal references. In SQL, human-readable references are called foreign keys, and the identifiers they refer to are called primary keys. In XML, human-readable references are called ID references and the corresponding attribute type is
Objects in an OO program can be referenced either with the help of human-readable references (such as integer codes) or with internal object references, which are preferable for accessing objects efficiently in main memory. Following the XML terminology, we call human-readable references ID references. We follow the standard naming convention for ID reference properties where an ID reference property defined in a class
A and referencing objects of class
B has the name
b_id using the suffix
_id. When we store persistent objects in the form of records or table rows, we need to convert internal object references, stored in properties like
publisher, to ID references, stored in properties like
publisher_id. This conversion is performed as part of the serialization of the object by assigning the standard identifier value of the referenced object to the ID reference property of the referencing object.
In OO languages, a property is defined for an object type, or class, which is its domain. The values of a property are either data values from some datatype, in which case the property is called an attribute, or they are object references referencing an object from some class, in which case the property is called a reference property. For instance, the class
Committee shown in Figure 1.1 below has an attribute
name with range
String, and a reference property
chair with range
By default, the multiplicity of a property is
1, which means that the property is mandatory and functional (or, in other words, single-valued), having exactly one value, like the property
chair in class
Committee shown in Figure 1.1. When a functional property is optional (not mandatory), it has the multiplicity
0..1, which means that the property's minimum cardinality is 0 and its maximum cardinality is 1.
A reference property can be either single-valued (functional) or multi-valued (non-functional). For instance, the reference property
Committee::chair shown in Figure 1.1 is single-valued, since it assigns a unique club member as chair to a club. An example of a multi-valued reference property is provided by the property
Book::authors shown in Figure 1.11 below.
Normally, the collection value of a multi-valued reference property is a set of references, implying that the order of the references does not matter. In certain cases, however, the order matters and, consequently, the collection value of such a multi-valued reference property is an ordered set of references, typically implemented as a list.