敏捷软件开发:原则、模式与实践——第16章 对象图、第17章 用例、第18章 顺序图

第16章 对象图
  有时,呈现出系统在某个特定时刻的状态是非常有用的。和一个正在运行系统的快照类似。UML对象图展示了在一个给定时刻获取到的对象、关系和属性值。

  不过,你应该对花太多的对象图保持警惕。在大部分的情况下,它们都可以从相应的类图中直接推导出来,因此没有多少用处。

第17章 用例

  在所有的UML图中,用例图是最令人迷惑也是最没有用处的。我建议出来系统边界外,忽略掉所有其他的图。系统边界图示例如下:

大矩形是系统边界。矩形内的所有东西都是将要开发的系统的组成部分。矩形外面是操作系统的参与者。参与者可以是人也可以是其他系统或设备。

第18章 顺序图

  顺序图示UML用户最常绘制的动态模型。但是不要为每个方法都创建顺序图。 当你需要立即向某个人解释一组对象的协作方式或者当自己想要把这种协作关系可视化时,才使用顺序图。把顺序图当作一种偶尔使用以磨练自己分析能力的工具,不要把它们当作必须的文档。

18.1 基础知识
18.1.1 对象、生命线、消息及其他

  典型的顺序图:

  时间轴是垂直方向的,消息出现的位置越低,就越晚发送。注意GetEmployee消息中e变量的使用,Employee和e其实是同一个对象。GetEmployee的返回值就指向Employee对象的引用。EmployeeDB是一个类,所以它的名字下面没有下划线。这意味着GetEmployee只能是一个静态方法。

18.1.2 创建和析构

  创建一个对象,画一条线终结在要创建的对象,如下:

对应的代码:

public class ShapeFactory
{
    public Shape MakeSquare()
    {
        return new Square();
    }
}    

  把一个对象释放给垃圾回收器:

对应代码:

public class TreeMap
{
    private TreeNode topNode;
    public void Clear()
    {
        topNode = null;
    }
}    

18.1.3 简单循环

  画简单循环的方法是在需要重复发送消息的周围画一个框。然后在一个中括号中包含循环条件。

18.1.4 时机和场合

  不要绘制具有大量对象和消息的顺序图。没人能够理解,也没有人愿意去看。这是一种巨大的时间浪费。如果觉得顺序图是必要的,问一下自己是否能够把它分解成以小组场景。

  团队应该致力于创建出具有表达力、易读的代码。代码越是能够描述自己,你就越不需要图示,整个项目就越好。

  一般来讲,高层试图要比低层试图更有用一些。

18.2 高级概念
18.2.1 循环和条件

18.2.2 耗费时间的消息

以电话呼叫为例子,正常的呼叫电话如下:

失败的电话呼叫如下:

18.2.3 异步消息

示例如下:

18.2.4 多线程

示例如下,T1,T2是线程的名字:

18.2.5 主动对象

一个具有独立内部线程的对象,这种对象叫做主动对象。它们显示为粗体边框,如下所示:

18.2.6 向接口发送消息

示例如下:

通过接口向其派生类型发送消息:

18.3 结论

  顺序图就是一个工具。要按照其设计意图使用。在白板前使用它们来实时地和他人进行沟通。在简短的文档中使用它们记录系统中的那些核心、重要的协作。

  就顺序图而言,过少比过多要好。你总可以在以后需要时再画一幅顺序图。

摘自:《敏捷软件开发:原则、模式与实践(C#版)》Robert C.Martin    Micah Martin 著

转载请注明出处:

作者:JesseLZJ
出处:http://jesselzj.cnblogs.com

时间: 2024-12-20 21:59:00

敏捷软件开发:原则、模式与实践——第16章 对象图、第17章 用例、第18章 顺序图的相关文章

敏捷软件开发:原则、模式与实践(笔记)

一.敏捷软件开发宣言 1.个体和交互 > 过程与工具 a)人是获得成功最为重要的因素: b)合作.沟通以及交互能力要比单纯的编程能力更为重要: c)团队的构建要比环境的构建重要. 2.可以工作的软件 > 面面俱到的文档 a)文档应该短小并突出主题: b)在给新的团队成员传授知识方面,最好的两份文档是代码和团队: c)直到迫切需要并且意义重大时,才来编制文档. 3.客户合作 > 合同谈判 a)成功的项目需要有序.频繁的客户反馈. 4.响应变化 > 遵循计划 a)构建计划时,应该确保计

敏捷开发-原则 模式与实践(1)

敏捷开发-原则 模式与实践 这的确是一本关于开发者的好书,对于我们开发者.研究人员,它提出了一个开发的全新的价值观(对我来说),甚至人生都有启发.需要认真阅读. 书中总结了敏捷开发的实例,确确实实更够感觉到对于项目的完成大有裨益,有种相读恨晚的感觉.想想自己之前的开发状态,想想自己导师安排公司项目的情况,就是低效率,就是小儿科,就是书上批评讽刺的那样,这正是开发者十几年开发智慧的结晶,前人的经验,前人的智慧,激发了我的阅读的快感,我获取知识的兴奋感,激发了我的成就感. 阅读前两天(结合思维导图)

敏捷软件开发 – STATE模式

地铁旋转门 最直接的实现FSM策略的方式是使用嵌套switch/case语句. public enum State { LOCKED, UNLOCKED }; public enum Event { COIN, PASS }; public class TurnStile { private State state = State.LOCKED; private TurnstileController turnstileController; public TurnStile(Turnstile

敏捷软件开发原则

敏捷软件开发原则 ----<敏捷软件开发原则.模式与实践>学习笔记 最近在系统地学习并且有意地在工作中实践敏捷软件开发,文章乍看起来,都是一些说教性.理论性,比较无聊的东西. 但是如果静下心来结合自己自身的经历.思考地去阅读,可能会发现,有的观点确实很赞同,然而有的可能会有自己的想法. 以下是在<敏捷软件开发 原则.模式与实践>一些读书笔记,斜体字是直接摘录于书本,非斜体字是自己的一些理解.   一.尽早的,持续地交互有价值的软件来使客户满意.初期交付的系统功能越少,最终交付的系统

敏捷软件开发 – FACADE模式和MEDIATOR模式

FACADE模式 Db类使得Application类不需要了解System.Data命名空间中的内部细节.它把System.Data的所有通用性和复杂性隐藏在一个非常简单且特定的接口后面. 像Db这样的FACADE类对System.Data的使用施加了许多规约.它知道如何初始化和关闭数据库连接.它知道如何将ProductData的成员变量转换成数据库字段,或反之.它知道如何去构建合适的查询和命令去操纵数据库.它对用户隐藏了所有的复杂性.在Application看来,System.Data是不存在

[书摘]《敏捷软件开发: 原则、模式与实践》第一部分:敏捷开发

面向对象设计的原则 单一职责 开放-封闭 Liskov替换原则 依赖倒置原则 接口隔离原则 重用发布等价原则 共同封闭原则 共同重用原则 无环依赖原则 稳定以来原则 稳定抽象原则 人的重要性 交付产品的关键因素是人,而不是过程.(敏捷 Agile) 人与人之间的交互式复杂的,并且其效果从来都是难以预期,但却是工作中最为重要的方面. ------ Tom DeMacro 和 Timothy Lister<人件> 有凝聚力的团队将具有最强大的软件开发力量. 敏捷软件开发宣言 我们一直在实践中探寻更

读书笔记-敏捷软件开发 原则,模式与实践

看了一下夹在书中的发票,2010年在当当网购买的. 断断续续的也看过几次,一直没有看完过. 这次试着写写读书笔记.看看能不能坚持住.

敏捷软件开发 – OCP 开放-封闭原则

软件实体(类.模块.函数等)应该是可以扩展的,但是不可修改的. 如果程序中的一处改动就会产生连锁反应,导致一系列相关模块的改动,那么设计就具有僵化性的臭味.OCP建议我们应该对系统进行重构,这样以后对系统再进行这样那样的改动时,就不会导致更多的修改.如果正确地应用OCP,那么以后再进行同样的改动时,就只需要添加新的代码,而不必改动已经正常运行的代码. OCP概述 遵循开放-封闭原则设计出的模块具有两个主要的特征.它们是: 对于扩展是开放的(open for extension).这意味着模块的行

敏捷软件开发 – SRP 单一职责原则

SRP:单一职责原则  一个类应该只有一个发生变化的原因. 为何把两个职责分离到单独的类中很重要呢?因为每一个职责都有变化的一个轴线.当需求变化时,该变化会反映为类的职责的变化.如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个. 如果一个类承担的职责过多,就等于把这些职责耦合在了一起.一个职责发生变化可能会削弱或抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏. 有两个不同的应用程序使用Rectangle类.一个应用程序是有关计算几何

敏捷软件开发 – ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式

设计运行在简易台灯中的软件.台灯由一个开关和一盏灯组成.可以询问开关是开着还是关着,也可以让灯打开或者关闭. 下面设计了一个简易的模型.Switch对象可以轮询实际开关的状态,并且可以发送相应的turnOn和turnOff消息给Light. 这个设计违反了两个设计原则:依赖倒置(DIP)和开放-封闭(OCP).对DIP的违反是明显的,Switch依赖了具体类Light.DIP告诉我们要优先依赖于抽象类.对OCP的违反虽然没有那么明显,但是更加切中要害.我们之所以不喜欢这个设计是因为它迫使我们在任