UML 中的端口具有类型,在 IBM® Rational® Rhapsody® 中,此类型被称为合同。端口的合同与对象的类相似。
如果某个端口有合同(例如接口 I),那么该端口将通过定义来提供 I。如果要让该端口提供另一个接口(例如接口 J),那么根据 UML,I 必须继承 J(这是因为,端口只能具有一种类型)。对于 Rational Rhapsody 而言,系统在您将 J 添加到供给接口的列表时自动创建此继承(同样,这是具有显式合同 I 的端口)。根据 UML 标准,如果 I 与 J 不相关,那么您必须指定新的接口作为合同并让此接口同时继承 I 和 J。
有些用户认为强制要求指定一个特殊接口作为端口合同不大自然,因此 Rational Rhapsody 提供了隐式合同这一概念。这意味着,如果合同是隐式的,那么您可以指定一组相互无关的供给接口和需求接口,而合同接口仍是隐式的(不需要将一个特殊接口显式地定义为模型中该端口的合同)。
使用隐式合同有利有弊。如果此端口所连接到的其他端口只提供并需要它的部分供给接口和需求接口,那么这比使用隐式合同更为自然。但是,如果此端口连接到正好“逆向”的另一端口(参见“特征”窗口中此端口的复选框),或者其他端口提供并需要同一组接口,那么最好使用显式合同。使用显式合同类似于以独立于类的方式指定对象,或者类似于指定具有隐式类的对象(如果系统中存在此类型或类的单一对象)。
快速端口是没有供给接口和需求接口的端口(这表示合同是隐式的,因为按照定义,具有显式合同的端口提供了合同接口)。这些端口将传递任何通过这些端口的事件。“快速端口”这一概念是 Rational Rhapsody 所特有,此概念使用户能够使用端口快速地建立原型。此功能对于使用状态图来指定行为的用户而言尤其有益 - 不需要在分析或设计的早期阶段详细设计合同。