1 / 52

UML 建模语言及工具

UML 建模语言及工具. Introduce. 课程: UML 建模语言及工具 课时: 32 目标: 掌握 UML 运用 UML 进行简单的面向对象分析和设计 UML 工具 ( IBM Rational Rose2003, IBM Rational Software Architect ). 预备知识. 掌握某种面向对象程序设计语言(例如 Java 、 C++ 等) 。 希望同学们已经初步掌握面向对象的一些基本常识。. 参考书. UML 和模式应用面向对象分析与设计导论 UML 参考手册 Rational.Rose 从入门到精通

Télécharger la présentation

UML 建模语言及工具

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UML建模语言及工具

  2. Introduce • 课程:UML建模语言及工具 • 课时:32 • 目标: • 掌握UML • 运用UML进行简单的面向对象分析和设计 • UML工具(IBM Rational Rose2003, IBM Rational Software Architect)

  3. 预备知识 • 掌握某种面向对象程序设计语言(例如Java、C++等) 。 • 希望同学们已经初步掌握面向对象的一些基本常识。

  4. 参考书 • UML和模式应用面向对象分析与设计导论 • UML参考手册 • Rational.Rose从入门到精通 • Thinking in UML

  5. 考核方式 • 考试 • 课程结束后安排考试 • 平时成绩(出勤+作业等)

  6. Why? • 需要理由吗? • 我们从事软件行业 • 面向对象是最主流的软件开发思想 • UML是最主流的建模语言 对于今天的软件开发者来说,UML是他们的面包和黄油 UML+面向对象 系统定义、分析、设计、实现 OOAD

  7. What? • 1- 感受面向对象的思想 • 2- 学习基本的面向对象理论 • 3- 学习基本的UML语言 • 4-…利用UML语言进行面向对象的系统建模

  8. 1 上升到面向对象 2 对象技术与可视化建模基础 3 UML可视化建模实践 4 需求获取与用例建模技术 5 基于UML的面向对象分析技术 6 Rose工具介绍 7 RSA工具介绍 8 课程总结 Agenda

  9. 第 1 章 上升到面向对象An Approach to the Object-Oriented

  10. OO OOA OOD DP UML …………………… … Case-Study … 学 习 线 路 图 学习线路图

  11. 内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象

  12. 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.)

  13. 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

  14. Simula C ++ The UML Late 1980s 1996 1967 1991 2004 1972 Smalltalk Java UML 2 The History of Object Technology • Major object technology milestones

  15. 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.

  16. Where Is Object Technology Used? (continued) • Real-time systems • Object technology enables real-time systems to be developed with higher quality and flexibility.

  17. 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

  18. 面向对象技术定义 面向对象=对象 + 类 + 消息 + 继承 + 多态 面向对象技术是基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、刻划客观世界和设计、构建相应的软件系统 面向对象方法是一种把面向对象的思想运用于软件开发过程,指导开发活动的系统方法,包括分析、设计和实现等活动

  19. 面向对象技术利益-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 在计算机中模拟现实世界的事和物

  20. 面向对象技术利益-2 • 稳定 • 较小的需求变化不会导致系统结构大的改变 • 当需求变化时…… 功能:最易变 数据:较易变 对象:较稳定 稳定性增加 用较稳定把不稳定的包起来

  21. 面向对象技术利益-3 • 复用 • 代码重用:类库、框架等重用机制 • 能提高质量,减少由于编制新的系统代码而产生的成本 • 通过继承、关联、封装等手段

  22. 面向对象技术利益-4 • 改善软件结构(模块化与封装),提高软件灵活性 • 增加可扩展性 • 支持增量式开发,支持大型软件开发 • …

  23. 面向对象技术研究内容 • 面向对象的编程(OOP: Object-Oriented Programming) • 当今最流行的编程语言:Java、C# • 面向对象的分析与设计(OOAD: Object-Oriented Analysis and Design) • 当今最流行的建模语言:UML(Unified Modeling Language)

  24. 内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象

  25. 面向对象技术发展 • 60年代后期:Simul67,基本思想 • 70年代后期:Smalltalk80,实用化 • 80年代:理论基础,C++等,商业化 • 90年代:面向对象与设计方法学 • B.H. Sellers等提出喷泉模型 • G. Booch提出面向对象开发方法等 • P. Coad和E.Yourdon提出OOA和OOD • Jacobson提出OOSE • …… • 1997年:UML 面向对象程序设计语言 “方法大战”

  26. 面向对象技术发展-现状 • 现状 • OO成为最重要的软件开发方法 • OO在GUI、模拟系统、游戏开发、应用框架、软件构件化领域大显身手 • Java、UML 与 RUP • 构件技术 (CORBA、COM、EJB、.Net) • 类库与设计模式

  27. 内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象

  28. 面向对象 VS 结构化 • Programming

  29. 实例:BOM单成本计算 • 问题: • 根据BOM(Bill of Materials)单进行产品原料成本的计算 • 分别用面向过程和面向对象的方式解决 • 目的: • 体会过程式的思维方式与面向对象思维方式之间的区别,体会面向对象“模拟现实世界”的思维特色

  30. 问题描述 • 某产品BOM单如下,计算总价格

  31. 问题难点分析 • 零件(Piece)、组合件(Assembly)、部件(Part)的关系 • 零件和组合件都属于部件 • 组合件有零件和更小的组合件组成,而更小的组合件最终由零件组成 • 组合件与零件之间存在递归关系,如何在程序中体现这个递归关系,是本系统的关键

  32. 思考? • 用结构化的设计思路解决以上问题 • 用对象化的设计思路解决以上问题 • 将解决思路用自己认为合适的方式记录下来,可以是伪码,可以是图形 • 思考: • 结构化的设计与对象化的设计有什么本质的不同?体现了怎样的思维差异?面向对象思想有何优势? • 表达设计思想用代码合适吗?方便吗?图形表示有何优势?

  33. 结构化设计 • 关键:用算法来描述递归关系 totalCost = 0.0 初始化iterator 是否计算完毕? 是 返回totalCost 否 totalCost += calcPartCost(partID)

  34. 结构化设计-calcPartCost calcPartCost(partID) 入口 ASSEMBLY PIECE getType(partID) c = cost(partID) c =calcAssemblyCost(partID) 出口 return c;

  35. 结构化设计-calcAssemblyCost calcAssemblyCost(partID) 入口 List partList = getPartsOfAssembly(partID); Iterator iter = partList.iterator(); NO iter.hasNext() YES 出口 return c; c += calcPartCost(iter.next().partID)

  36. 结构化小结 • 针对过程抽象 • calcPartCost (partID)函数与calcAssemblyCost (partID)函数描述了前述的递归关系

  37. 面向对象设计 • 关键:通过对象间的关系描述递归关系

  38. 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; }

  39. 类图体现代码结构 abstract class Part { public double cost(); } class PiecePart extends Part { public double cost(); … } class Assembly extends Part { private LinkedList itsParts; // 以链表结构存放组合件的组成部件 public double cost(); }

  40. 代码: 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”; } }

  41. 代码: 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”; } }

  42. 代码:计算BOM总价 double totalCost = 0.0; Iterator iter = partsList.iterator(); // 把整个BOM当成一个大的Assembly while (iter.hasNext()) { Part part = (Part) iter.next(); totalCost += part.cost(); } return totalCost;

  43. 顶级代码 BOM bom = new BOM(“BOM.xls”); totalCost = bom.calculateCost(); 关键代码只有一行,因为bom知道怎么计算它自己的总成本

  44. 归纳总结 • 结构化设计用算法刻画数据的递归关系,而面向对象思想直接用对象表达递归关系——“模拟现实世界” • 结构化设计中,数据是死的,全部依赖算法操作,而面向对象中,数据是活的,所谓的smart data • 结构化设计更像是一个人在解决所有的问题,而面向对象设计更像是一个团队的分工协作

  45. 体会 • 使用得当,面向对象设计具有更大的灵活性,更好的模块化,可以进行更大规模的设计 • 但同时,面向对象设计和开发的难度更大,因为除了要考虑算法之外,还要考虑对现实世界的模拟、对象的识别和职责分配等等一系列问题 • 优秀的面向对象设计需要学习更多知识和技术,掌握一系列设计原则和模式 • UML图形化工具有助于表达和交流设计思想。但是否可以做到“无代码编程”,还在争论中

  46. 题外话 • 既然OO更难,为什么要用它? • 大规模程序设计 • 灵活多变的系统需求 • 技术进步的必经之路

  47. 内容安排 • 面向对象技术概述 • 面向对象技术发展 • 面向对象与结构化 • 上升到面向对象

  48. 什么是建模? • 建模就是认识现实世界 客观世界 主观世界 世界是什么样的呢? 认识世界 改造世界

  49. 模型因人而异 • 不同类型的人有不同的世界观 模块,函数,功能 类,关联,对象 持不同的世界观就会得到对现实世界的不同认识—— 建立不同的模型

  50. 模型体现现实世界 • 只存在同一个现实世界 模型没有对错、只有符合建模人目的多少之分

More Related