331.子状态(substate)
作为复合状态一部分的一个状态。
见复合状态(composite state)、并发子状态(concurrent substate)、互斥子状态(disjoint substate)。
332.可替代性规则(substitutability principle)
给定其类型声明为X的变量或者参数的一个定义,任何X后代的实例都可以用做实际值而不会违反声明和使用的语义,这就是可替代性规则。换言之,后代元素的实例可以替代祖先元素的实例。(这是 Barbara Liskov 的贡献)
见泛化(generalization)、实现继承(implementation inheritance)、继承(inheritance)、接口继承(interface inheritance)、多态(polymorphic)、私有继承(private inheritance)。
讨论
可替代性规则的目的是使多态操作可以正常工作。这不是一个逻辑规则,而是提供一定封装性的实用编程规则。泛化关系支持可替代性。
可替代性规则使得孩子不能去掉或者放弃它的父亲的属性。否则,孩子就不能在其父亲被声明的地方替代。
333.子系统(subsystem)
作为一个整体处理的元素构成的包,包括把包的内容作为一个内在整体处理时对其行为的声明。子系统被模型化为包和类。子系统有一个接口的集合,这些接口描述了它与系统的其他部分的联系以及在何种情况下可以使用它们。
见 接口(interface)、包(package)、实现(realization)。
语义
子系统是系统的一个内在的可以被作为一个抽象独立单元的部分。它代表系统的某一部分自然发生的行为。作为一个整体,它有它自己的行为声明和实现部分。它的行为声明定义了作为一个整体,它和别的子系统交互的自然发生的行为。它的行为声明以用例和别的行为元素的形式给出。实现部分以构成其内容的附属元素的形式描述了行为的实现,并且作为被包含元素之间的合作集合给出。
系统本身构成最顶层的子系统。一个子系统的实现可以写成一些低级子系统的合作。在这种方式下,整个系统可以扩展为子系统的层次树,直到最底层的子系统以普通类的形式定义给出。
子系统可能包含结构元素和声明元素,比如由子系统导出的用例和操作。子系统声明通过结构元素实现。子系统的行为实际上是它里面的元素的行为。
结构
对一个子系统的声明包含指定为声明元素的元素,连同作为一个整体定义在子系统上的操作和接口。声明元素包括用例,限制,用例之间的联系等等。这些元素和操作定义了子系统作为自然实体所执行的行为,即它的各个部分协同工作的净结果。用例声明了子系统和外部操作者的完整的交互顺序。声明没有说明各个部分是如何交互以完成必要的行为。
子系统里的其他元素实现它的行为。这可能包含各种类元和它们之间的联系。子系统联系元素之间的合作构成的集合实现这个声明。通常,由一个或者多个合作实现每个用例。每个合作描述实现元素的实例如何合作完成用例或操作声明的行为。在声明级别的所有到达和出发的消息都必须被映射为它的实现元素以及其他子系统的实现元素之间的消息。
子系统是一个包,具有包的特性。特别的,子系统的导入象对包的描述那样工作,子系统之间的泛化具有和它的内容相同的可见性。
表示法
子系统表示为在子系统名称上面的包含关键字 subsystem 的包符号(带有小标签的矩形)。如图13-175。
讨论
考虑一个子系统,它处在设计元素的自然分组里,比如逻辑类。一个组件是一个实现元素的构成的自然分组,例如实现级别的类。在很多情况下,子系统作为组件实现。这简化了从设计到实现的映射。所以,这是一种普通的结构方法。更进一步,很多组件实现为直接实现组件接口的的类。在这种情况下,子系统、组件、类可以有完全相同的接口。
334.子类型(subtype)
是其他类型的孩子的类型。更中性的术语"孩子"可以用于任何可泛化元素。
见泛化(generalization)。
本文地址:http://com.8s8s.com/it/it2072.htm