540 likes | 790 Views
UML 建模语言及工具. Introduce. 课程: UML 建模语言及工具 课时: 32 目标: 掌握 UML 运用 UML 进行简单的面向对象分析和设计 UML 工具 ( IBM Rational Rose2003, IBM Rational Software Architect ). 预备知识. 掌握某种面向对象程序设计语言(例如 Java 、 C++ 等) 。 希望同学们已经初步掌握面向对象的一些基本常识。. 参考书. UML 和模式应用面向对象分析与设计导论 UML 参考手册 Rational.Rose 从入门到精通
E N D
Introduce • 课程:UML建模语言及工具 • 课时:32 • 目标: • 掌握UML • 运用UML进行简单的面向对象分析和设计 • UML工具(IBM Rational Rose2003, IBM Rational Software Architect)
预备知识 • 掌握某种面向对象程序设计语言(例如Java、C++等) 。 • 希望同学们已经初步掌握面向对象的一些基本常识。
参考书 • UML和模式应用面向对象分析与设计导论 • UML参考手册 • Rational.Rose从入门到精通 • Thinking in UML
考核方式 • 考试 • 课程结束后安排考试 • 平时成绩(出勤+作业等)
Why? • 需要理由吗? • 我们从事软件行业 • 面向对象是最主流的软件开发思想 • UML是最主流的建模语言 对于今天的软件开发者来说,UML是他们的面包和黄油 UML+面向对象 系统定义、分析、设计、实现 OOAD
What? • 1- 感受面向对象的思想 • 2- 学习基本的面向对象理论 • 3- 学习基本的UML语言 • 4-…利用UML语言进行面向对象的系统建模
1 上升到面向对象 2 对象技术与可视化建模基础 3 UML可视化建模实践 4 需求获取与用例建模技术 5 基于UML的面向对象分析技术 6 Rose工具介绍 7 RSA工具介绍 8 课程总结 Agenda
第 1 章 上升到面向对象An Approach to the Object-Oriented
OO OOA OOD DP UML …………………… … Case-Study … 学 习 线 路 图 学习线路图
内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象
What Is Object Technology? • A set of principles (abstraction, encapsulation, polymorphism) guiding software construction, together with languages, databases, and other tools that support those principles. (Object Technology - A Manager’s Guide, Taylor, 1997.)
The Strengths of Object Technology • Reflects a single paradigm • Facilitates architectural and code reuse • Reflects real world models more closely • Encourages stability • Is adaptive to change
Simula C ++ The UML Late 1980s 1996 1967 1991 2004 1972 Smalltalk Java UML 2 The History of Object Technology • Major object technology milestones
Where Is Object Technology Used? • Client/Server Systems and Web Development • Object technology allows companies to encapsulate business information in objects and helps to distribute processing across the Internet or a network.
Where Is Object Technology Used? (continued) • Real-time systems • Object technology enables real-time systems to be developed with higher quality and flexibility.
Differences Between OO and Structured Design • Object-orientation (OO) • Melds the data and data flow process together early in the lifecycle • Has a high level of encapsulation • Promotes reuse of code differently • Permits more software extensibility
面向对象技术定义 面向对象=对象 + 类 + 消息 + 继承 + 多态 面向对象技术是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、刻划客观世界和设计、构建相应的软件系统 面向对象方法是一种把面向对象的思想运用于软件开发过程,指导开发活动的系统方法,包括分析、设计和实现等活动
面向对象技术利益-1 • 沟通 • 顺应人类思维习惯,让软件开发人员在解空间中直接模拟问题空间中的对象及其行为 AHare.Run; ALion.Catch(AHare); ALion.Kill(AHare); AHare.Dead; ALion.Eat; ALion.Happy; PUSH EBX MOV EBX,EDX MOV EDX,EAX SHR EDX,16 DIV BX 在计算机中模拟现实世界的事和物
面向对象技术利益-2 • 稳定 • 较小的需求变化不会导致系统结构大的改变 • 当需求变化时…… 功能:最易变 数据:较易变 对象:较稳定 稳定性增加 用较稳定把不稳定的包起来
面向对象技术利益-3 • 复用 • 代码重用:类库、框架等重用机制 • 能提高质量,减少由于编制新的系统代码而产生的成本 • 通过继承、关联、封装等手段
面向对象技术利益-4 • 改善软件结构(模块化与封装),提高软件灵活性 • 增加可扩展性 • 支持增量式开发,支持大型软件开发 • …
面向对象技术研究内容 • 面向对象的编程(OOP: Object-Oriented Programming) • 当今最流行的编程语言:Java、C# • 面向对象的分析与设计(OOAD: Object-Oriented Analysis and Design) • 当今最流行的建模语言:UML(Unified Modeling Language)
内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象
面向对象技术发展 • 60年代后期:Simul67,基本思想 • 70年代后期:Smalltalk80,实用化 • 80年代:理论基础,C++等,商业化 • 90年代:面向对象与设计方法学 • B.H. Sellers等提出喷泉模型 • G. Booch提出面向对象开发方法等 • P. Coad和E.Yourdon提出OOA和OOD • Jacobson提出OOSE • …… • 1997年:UML 面向对象程序设计语言 “方法大战”
面向对象技术发展-现状 • 现状 • OO成为最重要的软件开发方法 • OO在GUI、模拟系统、游戏开发、应用框架、软件构件化领域大显身手 • Java、UML 与 RUP • 构件技术 (CORBA、COM、EJB、.Net) • 类库与设计模式
内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象
面向对象 VS 结构化 • Programming
实例:BOM单成本计算 • 问题: • 根据BOM(Bill of Materials)单进行产品原料成本的计算 • 分别用面向过程和面向对象的方式解决 • 目的: • 体会过程式的思维方式与面向对象思维方式之间的区别,体会面向对象“模拟现实世界”的思维特色
问题描述 • 某产品BOM单如下,计算总价格
问题难点分析 • 零件(Piece)、组合件(Assembly)、部件(Part)的关系 • 零件和组合件都属于部件 • 组合件有零件和更小的组合件组成,而更小的组合件最终由零件组成 • 组合件与零件之间存在递归关系,如何在程序中体现这个递归关系,是本系统的关键
思考? • 用结构化的设计思路解决以上问题 • 用对象化的设计思路解决以上问题 • 将解决思路用自己认为合适的方式记录下来,可以是伪码,可以是图形 • 思考: • 结构化的设计与对象化的设计有什么本质的不同?体现了怎样的思维差异?面向对象思想有何优势? • 表达设计思想用代码合适吗?方便吗?图形表示有何优势?
结构化设计 • 关键:用算法来描述递归关系 totalCost = 0.0 初始化iterator 是否计算完毕? 是 返回totalCost 否 totalCost += calcPartCost(partID)
结构化设计-calcPartCost calcPartCost(partID) 入口 ASSEMBLY PIECE getType(partID) c = cost(partID) c =calcAssemblyCost(partID) 出口 return c;
结构化设计-calcAssemblyCost calcAssemblyCost(partID) 入口 List partList = getPartsOfAssembly(partID); Iterator iter = partList.iterator(); NO iter.hasNext() YES 出口 return c; c += calcPartCost(iter.next().partID)
结构化小结 • 针对过程抽象 • calcPartCost (partID)函数与calcAssemblyCost (partID)函数描述了前述的递归关系
面向对象设计 • 关键:通过对象间的关系描述递归关系
API package BOM; class BOMAPI { static final int PIECE = 0; // 零件 static final int ASSEMBLY = 1; // 组合件 static final int getType(String id); // 判断是零件还是组合件 // 返回零件的价格,如果不是零件,抛出NotPieceException异常 static final double cost(String id) throws NotPieceException; // 返回一个列表,其中包含组成组合件的零件 static final List getPartsOfAssembly(String id) throws NotAssemlyException; }
类图体现代码结构 abstract class Part { public double cost(); } class PiecePart extends Part { public double cost(); … } class Assembly extends Part { private LinkedList itsParts; // 以链表结构存放组合件的组成部件 public double cost(); }
代码: PiecePart.cost() public double cost() { double c = 0.0; try { c = BOMAPI.getCost(this.myID); return c; } catch (NotPieceException e) { assert false : “Piece identify assertion error”; } }
代码: Assembly.cost() public double cost() { try { double c = 0.0; List parts = BOMAPI. getPartsOfAssembly(this.myID) Iterator iter = parts.iterator(); while (iter.hasNext()) { Part p = (Part)iter.next(); c += p.cost(); } return c; } catch (NotAssemblyException e) { assert false : “Assembly identify assertion error”; } }
代码:计算BOM总价 double totalCost = 0.0; Iterator iter = partsList.iterator(); // 把整个BOM当成一个大的Assembly while (iter.hasNext()) { Part part = (Part) iter.next(); totalCost += part.cost(); } return totalCost;
顶级代码 BOM bom = new BOM(“BOM.xls”); totalCost = bom.calculateCost(); 关键代码只有一行,因为bom知道怎么计算它自己的总成本
归纳总结 • 结构化设计用算法刻画数据的递归关系,而面向对象思想直接用对象表达递归关系——“模拟现实世界” • 结构化设计中,数据是死的,全部依赖算法操作,而面向对象中,数据是活的,所谓的smart data • 结构化设计更像是一个人在解决所有的问题,而面向对象设计更像是一个团队的分工协作
体会 • 使用得当,面向对象设计具有更大的灵活性,更好的模块化,可以进行更大规模的设计 • 但同时,面向对象设计和开发的难度更大,因为除了要考虑算法之外,还要考虑对现实世界的模拟、对象的识别和职责分配等等一系列问题 • 优秀的面向对象设计需要学习更多知识和技术,掌握一系列设计原则和模式 • UML图形化工具有助于表达和交流设计思想。但是否可以做到“无代码编程”,还在争论中
题外话 • 既然OO更难,为什么要用它? • 大规模程序设计 • 灵活多变的系统需求 • 技术进步的必经之路
内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象
什么是建模? • 建模就是认识现实世界 客观世界 主观世界 世界是什么样的呢? 认识世界 改造世界
模型因人而异 • 不同类型的人有不同的世界观 模块,函数,功能 类,关联,对象 持不同的世界观就会得到对现实世界的不同认识—— 建立不同的模型
模型体现现实世界 • 只存在同一个现实世界 模型没有对错、只有符合建模人目的多少之分