目录
今天继续基础知识,讲下公共机制。
在UML中,规格说明(Specification)是一种重要的公共机制,用于定义、解释和说明模型元素的属性和行为。规格说明提供了对模型元素的详细描述,以确保开发人员、利益相关者和其他相关人员对模型元素的理解和解释是一致的。
规格说明的定义包括以下几个方面:
示例:
考虑一个简单的在线购物系统,其中包括一个“商品”(Product)类。为了确保开发人员和其他相关人员对“商品”类的理解是一致的,可以使用规格说明来定义该类的属性和行为。
规格说明示例如下:
“商品”类:
规格说明可以进一步详细描述每个属性和操作的语义和行为,例如:
通过使用规格说明,开发人员和其他相关人员可以清楚地了解“商品”类的属性和行为,以及如何与其他模型元素进行交互和操作。这有助于确保对模型元素的一致理解和解释,提高软件开发的质量和效率。
修饰(Decoration)是一种公共机制,用于对模型元素进行附加说明和注释,以提供更详细的信息或解释。修饰可以通过添加标记、颜色、字体、图标等元素来修改或补充模型元素的外观,以突出显示特定属性、行为或关系。
修饰的定义包括以下几个方面:
示例:
考虑一个简单的类图,其中包含一个“用户”(User)类和一个“订单”(Order)类,它们之间存在关联关系。为了突出显示这两个类之间的关系,并添加一些额外的信息,可以使用修饰来进行说明。
修饰示例如下:
通过使用修饰,UML图可以更加直观地传达模型元素的含义和行为,并提供额外的信息和解释。这有助于增强UML图的可读性和可理解性,减少解释偏差和歧义,并提高软件开发过程中的沟通和协作效率。
在UML中,“+”和“-”符号确实被用作修饰符,用于表示类成员的可见性。其中,“+”表示公有(public)可见性,意味着该成员可以被其他类直接访问,没有任何限制。而“-”表示私有(private)可见性,意味着该成员对外部完全不可见,只有类本身内部可以访问和使用这些成员。“#”通常表示受保护的(protected)可见性,意味着该成员只能被该类及其子类访问。此外,无修饰符通常代表默认的访问权限,也就是包内可见性(internal),意味着该成员只能在同一个包内的其他类中被访问。
这些修饰符在UML类图中非常重要,它们准确地描述了类成员的可见性和访问权限,帮助开发人员和其他相关人员更好地理解类的结构和行为。通过使用这些修饰符,UML图可以提供更清晰、更精确的信息,从而提高软件开发过程的效率和质量。
在UML的公共机制中,通用划分是对模型元素进行分类和组织的一种方法,其中类和对象是核心概念之一。
类的定义:
类(Class)是对现实世界中具有相同属性、操作和关系的对象的抽象表示。它定义了一组具有相似特性和行为的对象的集合。类描述了对象的结构、属性和操作,并规定了对象之间的关系。在UML中,类使用矩形符号来表示,其中包含类的名称、属性和操作等信息。
对象的定义:
对象(Object)是类的实例,即具有类所定义的属性和操作的具体实体。对象是现实世界中具体事物的表示,例如人员、车辆、订单等。每个对象都具有唯一的标识,并且可以有自己的状态和行为。在UML中,对象通常使用带有类名的矩形来表示,并展示其具体的属性值和行为。
在上面这个图中,Dog是一个类,而下面三个是它的对象,其中第一个显式的指出Jack是类Dog的一个对象;而第二个是Dog的一个匿名对象;第三个未给出其所属的对象,但可以在其规格说明中指出其所属的类。
在UML的公共机制中,通用划分中的接口和实现是核心概念之一。
接口的定义:
接口(Interface)是一种定义了一组操作的契约或规范,但没有具体实现的结构。它描述了类或组件应该具备的行为,但并不提供具体的实现细节。接口定义了一组操作的签名,包括操作的名称、参数和返回类型,但不包含具体的实现代码。在UML中,接口通常使用带有“<<interface>>”标签的矩形来表示,其中列出了接口所定义的操作。
实现的定义:
实现(Implementation)是指类或组件对接口定义的操作的具体实现。它描述了类或组件如何实现接口中声明的行为。实现可以是一个类、一个组件或一个对象,它必须提供接口中定义的所有操作的具体实现代码。实现与接口之间存在一种“实现关系”,表示实现满足接口的契约或规范。在UML中,实现关系使用带有虚线的箭头来表示,箭头从实现指向接口。
上图是接口的一个棒棒糖表示法。圆头旁边是接口名称。
?
上图是类对接口的实现,用虚线和空三角箭头来指向实现的接口。?
示例:
考虑一个简单的例子,以描述“打印机”(Printer)接口及其实现。
1. 接口的定义:
2. 实现的定义:
假设我们有一个具体的打印机实现类,名为“喷墨打印机”(InkjetPrinter),它实现了“打印机”接口。
通过使用接口和实现的概念,UML可以帮助开发人员更好地组织和设计软件系统中的组件和它们之间的交互。接口定义了组件之间的契约和规范,而实现则提供了这些契约和规范的具体实现。这种分离使得组件之间的依赖关系更加清晰和灵活,同时也促进了代码的重用和扩展性。
(未完待续)