软件设计-uml-3
软件设计 从程序设计到体系结构1 Internal Use Only 讲师简介 ¨姜晓东 ¨负责软件架构设计,基础框架设计 ¨研究方向:J2EE,.NET,SOA,WEB DEV ¨联系方式: MSN/MAIL:J2EEHOTMAIL.COM 2 Internal Use Only Unified Modeling Language 统一建模语言(UML) 3 Internal Use Only 时序图 统一建模语言(UML) 4 Internal Use Only 关于“里氏代换原则”-A 里氏代换原则是由麻省理工学院(MIT)计 算机科学实验室的Liskov女士,在1987年的 OOPSLA 大 会 上 发 表 的 一 篇 文 章 Data Abstraction and Hierarchy'harrk里 面提出来的,主要阐述了有关继承的一些原则, 也就是什么时候应该使用继承,什么时候不应 该使用继承,以及其中的蕴涵的原理。 Internal Use Only 关于“里氏代换原则”-B 正方形和长方形的问题 class Rectangle double length; double width; public double getLength() return length; public void setLength(double height) this.length = length; public double getWidth() return width; public void setWidth(double width) this.width = width; Internal Use Only 关于“里氏代换原则”-C 正方形和长方形的问题 class Square extends Rectangle public void setWidth(double width) super.setLength(width); super.setWidth(width); public void setLength(double length) super.setLength(length); super.setWidth(length); Internal Use Only 关于“里氏代换原则”-D 正方形和长方形的问题 class TestRectangle public void resize(Rectangle objRect) while(objRect.getWidth() = objRect.getLength() ) objRect.setWidth( objRect.getWidth () + 1 ); length width Internal Use Only 里氏代换原则带来了怎样的启示? ¨类的继承原则类的继承原则:如果一个继承类的对象可能会 在基类出现的地方出现运行错误,则该子类不 应该从该基类继承,或者说,应该重新设计它 们之间的关系。 ¨动作正确性保证动作正确性保证:符合里氏代换原则的类扩展 不会给已有的系统引入新的错误。 Internal Use Only 开发过程-时序图 10 Internal Use Only 静态建模 vs 动态建模 通过画顺序图完成责任分配 Internal Use Only 用例类图顺序图 12 Internal Use Only 交互模式 13 Internal Use Only 三种版型的类 在分析阶段 ¨边界类:一个用例映射一个边界类,××UI ¤责任:输入、输出、过滤 ¨控制类(可选):一个用例映射一个控制类, ××UC ¤责任:控制事件流,负责为实体类分配责任 ¨实体类:一个用例有多个实体类参与,一个实体 类可以参与多个用例 ¤责任:业务行为的主要承载体 14 Internal Use Only 用例文档每个步骤的责任 ¨执行者×××× ¨系统××××× ¨系统××××× ¨执行者×××× 15 边界类的责任 各种类都可能有 责任 Internal Use Only 顺序图解说 16 Internal Use Only 顺序图和类图的映射 17 分析 设计 消息的传入:类对象所具有的操作责任 Internal Use Only 顺序图和类图的映射 18 检索零件UI.提交查询条件() 检索零件UC.检索零件() (检索零件UI.)显示零件列表() 消息的传出:类对象完成操作所需合作协作 Internal Use Only 练习 19 Internal Use Only 练习 20 Internal Use Only 练习 21 结账UC.检查() 会员.检查账户状态(); 库存.检查库存(); Internal Use Only 顺序图绘制要点(Rose)(1) 22 ¨位置:每个用例下面,对 应用例的路径 ¨基本路径:一张图 ¨简单的扩展点:可以合并 到基本路径图,用Text说 明条件 ¨复杂扩展点:单独一张图, 和主图间用Note连接 Internal Use Only 顺序图绘制要点(Rose)(2) 23 Internal Use Only 顺序图绘制要点(Rose)(3) Internal Use Only 顺序图绘制要点(Rose)(4) 25 Internal Use Only 轻松一下 讲一个小故事,小熊兄弟两个在路上捡到一块面包。两熊决定平分, 于是老大就掰开了,结果一半多点,一半少点。老二又不愿意拿少的。 恰在这时,一狐狸经过,打听究竟。于是笑着说,I have a great idea. 多出来的那点我吃了,你俩不就公平了吗!狐狸咬了一口,结 果咬的太多,变的更小了。怎么办呢?同理可做,又咬了另一半。哎! 那另一半更少了。于是乎!再咬,又再咬。终于,面包不见了。兄弟 俩什么也没吃到!你知道这个狐狸是谁吗? Internal Use Only 顺序图绘制要点(Rose)(5) 27 Internal Use Only 顺序图绘制要点(Rose)(6) 28 Internal Use Only 责任分配vs. 功能分解 29 Internal Use Only 总的责任分配原则 30 Internal Use Only 没有耦合,无法一起行动;耦合太高,无法转弯,类间要保持低耦合低耦合。目的:复用。 耦合描述设计的组成部分之间的相互依赖 31 Internal Use Only 内聚 ¨描述模块内各元素的紧密结合程度 32 类内各元素要保持高内聚高内聚 小类,短方法明确责任 Internal Use Only 反例(1) 33 某些属性只对部分对象有意义 Internal Use Only 反例(2) 34 不同领域的类之间形成错误的关系 Internal Use Only 责任分配原则 ¨原则1. 专家( Expert )原则 ¨原则2. 老板(Boss)原则 ¨原则3. 可视(Visibility)原则 35 Internal Use Only 责任分配原则(1) 专家(Expert )原则 ¨把责任分配给信息专家 ¤-有足够资源来承担该责任的类。 36 Internal Use Only 责任分配原则(2) 老板(Boss)原则 ¨聚合/组合结构的消息传递 ¨当出现以下情况时,发给A的消息先通过B处理和中转 ¤B聚合A(Aggregation) ¤B组合A( Composition ) 37 Internal Use Only 责任分配原则(2) 老板(Boss)原则 38 Internal Use Only 责任分配原则(3) 可视(Visibility)原则 ¨两个对象之间有消息传递,相应类应有关联 ¨不要与陌生人说话 39 Internal Use Only 用例:结账:基本路径 ¨1. 会员请求结账 ¨2. 系统验证会员的账户处于打开状态 ¨3. 系统验证订单的信息充分 ¨4. 系统找出有足够库存且运费最低的供应商 ¨5. 系统合计订单总价(订单总价所有订单项价钱合计税金 运费) ¨6. 系统显示收费明细 ¨7. 会员确认 ¨8. 系统保存订单信息,扣除会员账户金额,通知供应商发货, 从库存扣除相应数量。 40 Internal Use Only 责任分配给谁? 41 会员?账户? Internal Use Only 应用:专家老板原则 42 Internal Use Only 类图和代码变化 43 会员.检查账户状态() 账户.检查状态() Internal Use Only 责任分配给谁? 44 Internal Use Only 应用专家原则 ¨“合计总价”操作分配给哪个类? ¤目的:统计所有订单项的总价钱。 ¤所需信息:每一个订单项的价钱及其总和。 ¨考虑:谁知道这些? ¨答案:订单 45 Internal Use Only 责任分配给谁? 46 Internal Use Only 应用专家原则 ¨“计算订单项价钱”操作分配给哪个类?(零件?订单项?订单?) ¤统计某个订单项的价钱需要用到的信息: 订单项.购买数量×零件.价格 ¨考虑:谁知道以上的所有信息?零件?订单项? ¨答案:订单项 47 零件不知道订单项,订单项知道零件 Internal Use Only 订单项找零件取价格 48 Internal Use Only 同样符合可视原则 49 Internal Use Only 谁来计算税金? 50 Internal Use Only 应用专家原则 ¨计算税金 ¤需要用到的信息:税金价钱×相应税率 ¨考虑:订单知道所有这些吗? ¨解决方法:添加一个“计费”类,负责计算各种附 加费用。 ¨计算运费也是如此 51 Internal Use Only 增加“计费”类 52 Internal Use Only 对象之间的交互:对象之间的交互:消息 ¨两个对象之间的交互表现为:一个对象发送一个消息给另一个一个对象发送一个消息给另一个 对象对象 ¨通常情况下,当一个对象调用另一个对象中的操作时, 消息是通过一个简单的操作调用来实现;当操作执行完 成时,控制和执行结果返回给调用者 ¨在所有动态图中消息消息是作为对象间的一种通信方式来表 示的 Internal Use Only 归纳·回顾 CallerOperatorCallee 时间轴时间轴 call ack number call ack talk transfer 序列图 生命线 激活 状态 保持 角色 Internal Use Only 下节课将讲解UML模型之状态图 55 Internal Use Only