Safety (Cont.)


Redefined Attributes and Methods
Attribute driver is redefined for class manager.
employee IsA person: [
  ...,
  driver: person, ... ]

manager IsA employee, sharesholder: [
  ...,
  driver: employee ]

SELECT domicile FROM p IN person
  WHERE p IN ( SELECT driver FROM employee );

The inner select-expression may supply a heterogeneous set containing objects of type person and type employee.

This heterogeneity will not result in a type violation, because all employees are persons as well and thus all properties of person—particularly domicile—apply equally to employee.

Consider two signatures and implementations for the method deputy:

deputy ( employee, employee ): BOOLEAN
...
a1.denomination = a2.denomination AND NOT ( a1 == a2 )

deputy ( manager, manager ): BOOLEAN
...
m1.denomination = m2.denomination AND m1.party = m2.party AND NOT ( m1 == m2 )

Determines the deputies of all employees:

SELECT a1, a2 FROM a1 IN employee, a2 IN employee WHERE a1.deputy(a2);

If a1 references a manager and a2 references an employee, and argument of the wrong type will be passed.