-- $ProjectHeader: use 0.393 Wed, 16 May 2007 14:10:28 +0200 opti $ model Company -- classes class Employee attributes name : String salary : Integer end class Department attributes name : String location : String budget : Integer end class Project attributes name : String budget : Integer end -- associations association WorksIn between Employee[*] Department[1..*] end association WorksOn between Employee[*] Project[*] end association Controls between Department[1] Project[*] end -- OCL constraints constraints context Department -- the number of employees working in a department must -- be greater or equal to the number of projects -- controlled by the department inv MoreEmployeesThanProjects: self.employee->size >= self.project->size context Employee -- employees get a higher salary when they work on -- more projects inv MoreProjectsHigherSalary: Employee.allInstances->forAll(e1, e2 | e1.project->size > e2.project->size implies e1.salary > e2.salary) context Project -- the budget of a project must not exceed the -- budget of the controlling department inv BudgetWithinDepartmentBudget: self.budget <= self.department.budget -- employees working on a project must also work in the -- controlling department inv EmployeesInControllingDepartment: self.department.employee->includesAll(self.employee)