第19章 类图
19.1 基础知识
19.1.1 类
类一般表示成下面的样子:
分成格间的类图标以及对应的代码
注意类图标中变量和函数名前面的符合。(-)表示private;(#)表示protected;(+)表示public。
19.1.2 关联
类之间的关联表示的是那些持有对其他对象引用的实例变量。如phone和Button之间的关联:
一个PhoneBook对象和多个PhoneNumber对象相连(星号表示许多):
19.1.3 继承
UML中所有的箭头都指向源代码依赖的方向。类和类之间的继承用实线,类和接口之间的继承用虚线。我建议在白板上画图是,不要把箭头画成虚线,画虚线太浪费时间了。
继承关系示例:
实现关系示例:
等价于如下棒棒糖状接口:
19.2 类图示例
以下为ATM示例:
看到这幅图时,你应该能设想出代码。UI实现的代码如下:
public abstract class UI : WithdrawalUI, DepositUI, TransferUI { private Screen itsScreen; private MessageLog itsMessageLog; public abstract void PromptForDepositAmount(); public abstract void PromptForWithdrawalAmount(); public abstract void InformInsufficientFunds(); public abstract void PromptForEnvelope(); public abstract void PromptForTransferAmount(); public abstract void PromptForFromAccount(); public abstract void PromptForToAccount(); public void DisplayMessage(string message) { itsMessageLog.LogMessage(message); itsScreen.DisplayMessage(message); } }
19.3 细节
在大多数情况下,细节和修饰是不应该加入的,不过,有时候它们却是有用的。
19.3.1 类衍型
类衍型出现在一对语法号(<<>>)之间。C#程序员可以使用两个标准的衍型:<<interface>>和<<utility>>。
19.3.2 抽象类
把名字写成斜体的,或者使用(abstract)属性,即可表示抽象类:
在白板上画图时,可以使用非正式的表示:
19.3.3 属性
属性被书写成以逗号分隔的名字/值对列表。属性写在类名右下方:
除了{abstract}属性,我不知道属性还有什么用处。就我个人而言,画UML图这么多年,我没有找到任何使用类属性有用的地方。
19.3.4 聚集
聚集(aggregation)是关联的一种特殊形式,暗含整体/部分关系。
19.3.5 组合
组合(composition)是聚集的一种特殊形式。所有者/所有物关系。
19.3.6 多重性
对象可以含有其他对象的数组或者集合,也可比不同的实例变量中持有许多其他同类对象。多重性表达式可以是简单的数字、范围或者两者的组合。
允许的多重性格式:
数字——元素的确切数目;
*或者0..*——0个到多个。
0..1——0个或者1个,在C#中,常常用可以为null的引用来实现。
1..*——1个到多个。
3..5——3~5个
0,2..5,9..*——可笑,但却是合法的。
19.3.7 关联衍型
<<create>>衍型意味着源创建出目的并把它传递给系统的其他部分。
<<local>>衍型意味着创建出来的实例的生存期就在创建它的成员函数的作用域之内。
<<parameter>>衍型表示源类通过某个成员函数的参数获取对目标实例的访问权。虚依赖箭头线是一种常用且方便的参数表示惯用法。
<<delegate>>衍型表示源类把一个成员函数调用转交给目标。
19.3.8 内嵌类
19.3.9 关联类
虽然多重性关联告诉我们源和许多目标实例相连,但是从图中我们却无法看出使用了哪种容器类。可以通过关联类来描述这一点。
19.4 结论
要避免UML中大多数神秘、复杂的特性,只要了解经常使用的部分就可以了。过少使用UML几乎总是比过多使用要好。
摘自:《敏捷软件开发:原则、模式与实践(C#版)》Robert C.Martin Micah Martin 著
转载请注明出处:
作者:JesseLZJ
出处:http://jesselzj.cnblogs.com