标签:
第13章 写给C#程序员的UML概述
UML包含3类主要的图示。静态图(static diagram)描述了类、对象、数据结构以及它们之间的关系,藉此表现出了软件元素间那些不变的逻辑结构。动态图(dynamic diagram)展示了软件实体在运行过程中是如何变化的,其中描述了运行流程或者实体改变状态的方式。物理图(physical diagram)展示了软件实体不变的物理结构,其中描述了诸如源文件、库、二进制文件、数据文件等物理实体以及它们之间的关系。
查看如下代码,这段程序实现了一个基于简单二叉树算法的映射(map)数据结构,熟悉代码后,查看后面的图示:
using System; namespace TreeMap { public class TreeMap { private TreeMapNode topNode = null; public void Add(IComparable key, object value) { if (topNode == null) topNode = new TreeMapNode(key, value); else topNode.Add(key, value); } public object Get(IComparable key) { return topNode == null ? null : topNode.Find(key); } } internal class TreeMapNode { private static readonly int LESS = 0; private static readonly int GREATER = 1; private IComparable key; private object value; private TreeMapNode[] nodes = new TreeMapNode[2]; public TreeMapNode(IComparable key, object value) { this.key = key; this.value = value; } public object Find(IComparable key) { if (key.CompareTo(this.key) == 0) return value; return FindSubNodeForKey(SelectSubNode(key), key); } private int SelectSubNode(IComparable key) { return (key.CompareTo(this.key) < 0) ? LESS : GREATER; } private object FindSubNodeForKey(int node, IComparable key) { return nodes[node] == null ? null : nodes[node].Find(key); } public void Add(IComparable key, object value) { if (key.CompareTo(this.key) == 0) this.value = value; else AddSubNode(SelectSubNode(key), key, value); } private void AddSubNode(int node, IComparable key, object value) { if (nodes[node] == null) nodes[node] = new TreeMapNode(key, value); else nodes[node].Add(key, value); } } }
13.1 类图
类图展示了程序中主要的类和关系。
13.2 对象图
它展示了在系统执行的某个特定时刻的一组对象和关系。你可以把它看做是一个内存快照。
13.3 顺序图
它描述了TreeMap的Add方法是如何实现的。
人形线条图表示了一个未知调用者。这个调用者调用了TreeMap对象的Add方法。如果topNode变量为null,TreeMap就创建一个新的TreeMapNode对象并把它赋给topNode。否则,TreeMap就向topNode发送Add消息。
方括号中的布尔表达式称为监护条件(guard)。它们指示出应该选择哪条路径。终结在TreeMapNode图标上的消息箭头表示对象构造。带有小圆圈的箭头称为数据标记(data taken)。TreeMap下面的窄矩形条称为激活(activation)。它表示Add方法执行了多少时间。
13.4 协作图
它描述了TreeMap.Add中topNode不为null的情况。协作图中包含了顺序图中所包含的同样的信息。不过,顺序图是为了清楚地表达出消息的顺序,而协作图则是为了清楚地表达出对象之间的关系。
对象被称为链(link)的关系连接起来。只要一个对象可以向另外一个对象发送消息,就存在链关系。在链上传递的正是消息本身。它们表示为小一些的箭头。消息上标记有消息名称、消息顺序号以及任何使用的监护条件。
带点的顺序号表示调用的层次结构。TreeMap.Add函数(消息1)调用TreeMapNode.Add函数(消息1.1)。因此,消息1.1是消息1所调用的函数发送的第一条消息。
13.5 状态图
UML可以非常全面地表示有限状态机。下图展示了一个地铁旋转门的状态机:
它有两个状态:Locked和Unlocked。可以向这个机器发送两个事件。coin表示向旋转门投入了一枚硬币。pass表示用户已经通过了旋转门。
图中的箭头称为迁移(transition)。其上的标记有出发迁移的事件以及该迁移执行的动作。当一个迁移被触发时,会导致系统的状态发生改变。
翻译成自然语言描述:
13.6 结论
本章中的图示对于大多数场合来说足够了。大部分程序员了解这么多UML知识就足以应对实际工作需要了。
摘自:《敏捷软件开发:原则、模式与实践(C#版)》Robert C.Martin Micah Martin 著
转载请注明出处:
作者:JesseLZJ
出处:http://jesselzj.cnblogs.com
敏捷软件开发:原则、模式与实践——第13章 写给C#程序员的UML概述
标签:
原文地址:http://www.cnblogs.com/jesselzj/p/4766745.html