UMLUML 建模语言及工具建模语言及工具
-2-
Introduce
课程: UML 建模语言及工具 课时: 32 目标:
掌握 UMLUML 运用 UMLUML 进行简单的面向对象分析和设计进行简单的面向对象分析和设计 UMLUML 工具工具( IBM Rational
Rose2003, IBM Rational Software Architect )
-3-
预备知识 掌握某种面向对象程序设计语言(例如
Java 、 C++ 等) 。 希望同学们已经初步掌握面向对象的一
些基本常识。
-4-
参考书 UML 和模式应用面向对象分析与设计导论 UML 参考手册 Rational.Rose 从入门到精通 Thinking in UML
-5-
考核方式 考试
课程结束后安排考试 平时成绩(出勤 + 作业等)
-6-
Why ? 需要理由吗?
我们从事软件行业 面向对象是最主流的软件开发思想 UML 是最主流的建模语言
UML+ 面向对象
OOAD系统定义、分析、设计、实现
对于今天的软件开发者来说,对于今天的软件开发者来说, UMLUML 是他们的面包和黄油 是他们的面包和黄油
-7-
What ? 1- 感受面向对象的思想 2- 学习基本的面向对象理论 3- 学习基本的 UML 语言 4-… 4-… 利用利用 UMLUML 语言进行面向对象的系语言进行面向对象的系
统建模统建模
-8-
Agenda 1 上升到面向对象 2 对象技术与可视化
建模基础 3 UML 可视化建模实
践 4 需求获取与用例建
模技术
5 5 基于基于 UMLUML 的面向的面向对象分析技术对象分析技术
6 Rose 工具介绍 7 RSA 工具介绍 8 课程总结
第 第 1 1 章 上升到面向对象章 上升到面向对象An Approach to the An Approach to the
Object-OrientedObject-Oriented
-10-
学习线路图
OO
UML
: :
OOA OODDP
… 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-
Major object technology milestones
Simula
1967
C ++
Late 1980s
Smalltalk
1972
Java
1991
The UML
1996
UML 2
2004
The History of Object Technology
-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.
4
-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 沟通
顺应人类思维习惯,让软件开发人员在解空间中直接模拟问题空间中的对象及其行为
PUSH EBXPUSH EBXMOV EBX,EDXMOV EBX,EDXMOV EDX,EAXMOV EDX,EAXSHR EDX,16SHR EDX,16DIV BXDIV BX
AHare.Run;AHare.Run;ALion.Catch(AHare)ALion.Catch(AHare);;ALion.Kill(AHare);ALion.Kill(AHare);AHare.Dead;AHare.Dead;ALion.Eat;ALion.Eat;ALion.Happy;ALion.Happy;
在计算机中模拟现实世界的事和物在计算机中模拟现实世界的事和物
-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 单如下,计算总价格零部件编号零部件编号 零部件名称零部件名称 采购价格采购价格00147 零件 1 10.00
00235 零件 2 21.50
10221 组合件 1 38.15
00772 零件 3 20.00
10039 组合件 2 19.90
-31-
问题难点分析 零件( Piece )、组合件
( Assembly )、部件( Part )的关系 零件和组合件都属于部件 组合件有零件和更小的组合件组成,而更小
的组合件最终由零件组成 组合件与零件之间存在递归关系,如何在程如何在程
序中体现这个递归关系序中体现这个递归关系,是本系统的关键
-32-
思考? 用结构化的设计思路解决以上问题 用对象化的设计思路解决以上问题 将解决思路用自己认为合适的方式记录下来,
可以是伪码,可以是图形 思考:
结构化的设计与对象化的设计有什么本质的不同?体现了怎样的思维差异?面向对象思想有何优势?
表达设计思想用代码合适吗?方便吗?图形表示有何优势?
-33-
结构化设计 关键:用算法来描述递归关系
totalCost = 0.0初始化 iterator
是否计算完毕?是
返回 totalCost
否
totalCost += calcPartCost(partID)calcPartCost(partID)
-34-
结构化设计 -calcPartCost
getType(partID)
入口
PIECE
c = cost(partID)
ASSEMBLY
c =calcAssemblyCost(partID)calcAssemblyCost(partID)
出口return c;
calcPartCost(partID)calcPartCost(partID)
-35-
结构化设计 -calcAssemblyCostcalcAssemblyCost(partID)calcAssemblyCost(partID)
iter.hasNext()
入口
NO
YES
c += calcPartCostcalcPartCost(iter.next().partID)出口
return c;
List partList = getPartsOfAssembly(partID);Iterator iter = partList.iterator();
-36-
结构化小结 针对过程抽象 calcPartCostcalcPartCost (partID)函数与
calcAssemblyCostcalcAssemblyCost (partID)函数描述了前述的递归关系
-37-
面向对象设计 关键:通过对象间的关系描述递归关系
Piece
cost() : double
Assembly
itsParts : LinkedList
cost() : double
Part
cost() : double
-38-
APIpackage BOM;package BOM;
class BOMAPI {class BOMAPI {
static final int PIECE = 0; // static final int PIECE = 0; // 零件零件
static final int ASSEMBLY = 1; // static final int ASSEMBLY = 1; // 组合件组合件
static final int getType(String id); // static final int getType(String id); // 判断是零件还是组合件判断是零件还是组合件
// // 返回零件的价格,如果不是零件,抛出返回零件的价格,如果不是零件,抛出 NotPieceExceptionNotPieceException 异常异常
static final double cost(String id) throws static final double cost(String id) throws NotPieceException;NotPieceException;
// // 返回一个列表,其中包含组成组合件的零件返回一个列表,其中包含组成组合件的零件
static final List getPartsOfAssembly(String id) static final List getPartsOfAssembly(String id)
throws NotAssemlyException;throws NotAssemlyException;
}}
-39-
类图体现代码结构abstract class Part {abstract class Part {
public double cost();public double cost();
}}
class PiecePart extends Part {class PiecePart extends Part {
public double cost();public double cost();
… …
}}
class Assembly extends Part {class Assembly extends Part {
private LinkedList itsParts; // private LinkedList itsParts; // 以链表结构存放组合件的组成部件以链表结构存放组合件的组成部件
public double cost();public double cost();
}}
-40-
代码 : PiecePart.cost()public double cost() public double cost()
{{
double c = 0.0;double c = 0.0;
try {try {
c = BOMAPI.getCost(this.myID);c = BOMAPI.getCost(this.myID);
return c;return c;
}}
catch (NotPieceException e) {catch (NotPieceException e) {
assert false : “Piece identify assertion error”;assert false : “Piece identify assertion error”;
}}
}}
-41-
代码 : Assembly.cost()public double cost() public double cost() {{ try {try { double c = 0.0;double c = 0.0; List parts = BOMAPI. getPartsOfAssembly(this.myID) List parts = BOMAPI. getPartsOfAssembly(this.myID) Iterator iter = parts.iterator();Iterator iter = parts.iterator(); while (iter.hasNext()) {while (iter.hasNext()) { Part p = (Part)iter.next();Part p = (Part)iter.next(); c += p.cost();c += p.cost(); }} return c;return c; }} catch (NotAssemblyException e) {catch (NotAssemblyException e) { assert false : “Assembly identify assertion error”;assert false : “Assembly identify assertion error”; }}}}
-42-
代码:计算 BOM 总价double totalCost = 0.0;double totalCost = 0.0;
Iterator iter = partsList.iterator(); // Iterator iter = partsList.iterator(); // 把整个把整个 BOMBOM 当成一个大的当成一个大的AssemblyAssembly
while (iter.hasNext()) {while (iter.hasNext()) {
Part part = (Part) iter.next();Part part = (Part) iter.next();
totalCost += part.cost();totalCost += part.cost();
}}
return totalCost;return totalCost;
-43-
顶级代码BOM bom = new BOM(“BOM.xls”);
totalCost = bom.calculateCost();
关键代码只有一行,因为 bom知道怎么计算它自己的总成本
-44-
归纳总结 结构化设计用算法刻画数据的递归关系,
而面向对象思想直接用对象表达递归关系——“模拟现实世界”
结构化设计中,数据是死的,全部依赖算法操作,而面向对象中,数据是活的,所谓的 smart data
结构化设计更像是一个人在解决所有的问题,而面向对象设计更像是一个团队的分工协作
-45-
体会 使用得当,面向对象设计具有更大的灵活性,更好的模块化,可以进行更大规模的设计
但同时,面向对象设计和开发的难度更大,因为除了要考虑算法之外,还要考虑对现实世界的模拟、对象的识别和职责分配等等一系列问题
优秀的面向对象设计需要学习更多知识和技术,掌握一系列设计原则和模式
UML图形化工具有助于表达和交流设计思想。但是否可以做到“无代码编程”,还在争论中
-46-
题外话 既然OO更难,为什么要用它?
大规模程序设计 灵活多变的系统需求 技术进步的必经之路
-47-
内容安排 面向对象技术概述 面向对象技术发展 面向对象与结构化 上升到面向对象上升到面向对象
-48-
什么是建模? 建模就是认识现实世界
客观世界客观世界 主观世界主观世界认识世界
改造世界
世界是世界是什么样什么样的呢的呢 ??
-49-
模型因人而异 不同类型的人有不同的世界观
持不同的世界观就会得到对现实世界的不同认识——
建立不同的模型
模块,函数,功能
类,关联,对象
-50-
模型体现现实世界 只存在同一个现实世界
模型没有对错、只有符合建模人目的多少之分模型没有对错、只有符合建模人目的多少之分
-51-
OO ( Object Oriented )、 UML 与建模
建模是最终目的 OO 是一种建模理论 UML 是一种体现 OO 的建模语言,是
将 OO 理论转化为实践的工具
-52-
作业 安装 Rose
Top Related