Issue 12250: formal definitions of 'isCompatibleWith' (pages 622, 647, 649) (uml2-rtf) Source: OFFIS e.V. (Mr. Christian Mrugalla, nobody) Nature: Revision Severity: Critical Summary: The three formal definitions of 'isCompatibleWith' start with: 'isCompatibleWith = p->oclIsKindOf(self.oclType) and [...]'. This is wrong, p and self have to be swapped, that is: 'isCompatibleWith = self.oclIsKindOf(p.oclType) and [...]'. Rationale: As defined in the OCL-specification formal/06-05-01, the function 'oclIsKindOf(t)' determines if t is either the direct type or one of the supertypes of the object, on which this function is called. That is, if the function returns true, the type t is a generalization or equal to the type of the current object. The corresponding has to be valid for 'isCompatibleWith(p)': If the function returns true, the type of p has to be the same or a generalization of the type of the object, on which this function is called (otherwise, the constraints [1] of 17.5.4 and 17.5.5 would make no sense). Resolution: Revised Text: Actions taken: February 28, 2008: received issue Discussion: End of Annotations:===== m: webmaster@omg.org Date: 28 Feb 2008 10:12:31 -0500 To: Subject: Issue/Bug Report -------------------------------------------------------------------------------- Name: Christian Mrugalla Company: OFFIS e.V. mailFrom: christian.mrugalla@offis.de Notification: Yes Specification: OMG UML Section: 17 FormalNumber: formal/2007-11-02 Version: 2.1.2 RevisionDate: 11/02/2007 Page: 622,647,649 Nature: Revision Severity: Critical HTTP User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12 Description The three formal definitions of 'isCompatibleWith' start with: 'isCompatibleWith = p->oclIsKindOf(self.oclType) and [...]'. This is wrong, p and self have to be swapped, that is: 'isCompatibleWith = self.oclIsKindOf(p.oclType) and [...]'. Rationale: As defined in the OCL-specification formal/06-05-01, the function 'oclIsKindOf(t)' determines if t is either the direct type or one of the supertypes of the object, on which this function is called. That is, if the function returns true, the type t is a generalization or equal to the type of the current object. The corresponding has to be valid for 'isCompatibleWith(p)': If the function returns true, the type of p has to be the same or a generalization of the type of the object, on which this function is called (otherwise, the constraints [1] of 17.5.4 and 17.5.5 would make no sense).