面向对象的分析与设计PPT课件
合集下载
面向对象分析与设计.ppt
TCP/IP协议栈(TCPIP.SYS)
网卡驱动程序(NIC Driver) 基于历史状态的包处理
第 11 页
网络中间层状态包检测防火墙系统
11
练习2:ATM机用例图。以使用ATM机的经验,给出在
ATM机上存取款操作的用例图。
第 12 页
12
10.4 静态建模
任何建模语言都以静态建模机制为基础 ,标准建模语 言 UML也不例外。所谓静态建模是指对象之间通过属性 互相联系,而这些关系不随时间而转移。 类和对象的建模,是UML建模的基础。我们认为,熟 练掌握基本概念、区分不同抽象层次以及在实践中灵活 运用,是三条最值得注意的建模基本原则。
第 2 页
2
10.1 UML概述
UML(Unified Modeling Language)是软件界第 一个统一建模语言,该方法结合了Booch, OMT, 和OOSE方法的优点,统一了符号体系,并从其它的 方法和工程实践中吸收了许多经过实际检验的概念 和技术。 它是一种标准的表示,已成为国际软件界广泛承 认的标准。是一种基于面向对象的可视化的通用 (General)建模语言。为不同领域的用户提供了统一 的交流标准 — UML图。 UML应用领域很广泛,可用于软件开发建模的 各个阶段,商业建模(Business Modeling), 也可用 于其它类型的系统。
第 4 页
4
UML的特点
(1) 统一标准 UML统一了Booch、OMT和OOSE等方法中的基本概 念,已成为 OMG 的正式标准,提供了标准的面向对象的 模型元素的定义和表示。 (2) 面向对象 UML 还吸取了面向对象技术领域中其它流派的精华。 删除了大量易引起混乱的、多余的和极少使用的符号 , 也 添加了一些新符号。 (3) 可视化、表示能力强 系统的逻辑模型或实现模型都能用 UML 模型清晰的 表示,可用于复杂软件系统的建模。 (4)易掌握、易用 UML 的概念明确,建模表示法简洁明了,图形结构 清晰,易于掌握使用。
面向对象的设计与分析课件
例如
//myheadfile1.h
#include myheadfile2.h
……
//myheadfile2.h
#include myheadfile1.h
……
整理ppt
7
为了避免上述情况的发生,引入了条件预处 理指令,用来判断是否已经包含了某个头函 数或头函数的某个部分,若已经包含了某个 头函数或头函数的某个部分,则在以后遇到 要求再包含该头函数或头函数的该部分时, 跳过包含指令#include ,以避免头文件重复 包含或循环调用的情况。条件预处理指令包 括:
//定义四个双精度型变量
credit1 = 3.0; //给变量赋值 credit2 = 4.0; credit3 = 2.0; average =
(credit1*score1+credit2*score2+credit3*score3)/
(credit1+credit2+credit3); //计算表达式的值,并赋给变量
例如
#include <math.h> #include <iostream.h> ………
整理ppt
6
(2) 条件预处理指令 由于被预处理包含指令#include所指定的头文件
中也可以使用#include指令包含别的头文件,因此 就可能出现头文件嵌套包含甚至是头
cout<<“第一门功课成绩:”; //显示提示信息
cin>>score1;
//接受用户输入
cout<<"第二门功课成绩:";
cin>>score2;
cout<<"第三门功课成绩:";
//myheadfile1.h
#include myheadfile2.h
……
//myheadfile2.h
#include myheadfile1.h
……
整理ppt
7
为了避免上述情况的发生,引入了条件预处 理指令,用来判断是否已经包含了某个头函 数或头函数的某个部分,若已经包含了某个 头函数或头函数的某个部分,则在以后遇到 要求再包含该头函数或头函数的该部分时, 跳过包含指令#include ,以避免头文件重复 包含或循环调用的情况。条件预处理指令包 括:
//定义四个双精度型变量
credit1 = 3.0; //给变量赋值 credit2 = 4.0; credit3 = 2.0; average =
(credit1*score1+credit2*score2+credit3*score3)/
(credit1+credit2+credit3); //计算表达式的值,并赋给变量
例如
#include <math.h> #include <iostream.h> ………
整理ppt
6
(2) 条件预处理指令 由于被预处理包含指令#include所指定的头文件
中也可以使用#include指令包含别的头文件,因此 就可能出现头文件嵌套包含甚至是头
cout<<“第一门功课成绩:”; //显示提示信息
cin>>score1;
//接受用户输入
cout<<"第二门功课成绩:";
cin>>score2;
cout<<"第三门功课成绩:";
ch01面向对象分析与设计PPT课件
复用
硬件逼软件发展
复用
为什么用复用
软件开发组越大,组中每 个成员的生产率就越低。 Philippe kahn,Borand 公司创始人
应变能力
面向对象分析 以稳定的问题 领域结构来封 装易变的部分, 以此形成具有 灵活性的系统 结构,使得系 统能够顺应需 求的变动。
减少变化引起的整理波动
“分析”一个含义广泛的词汇。在软件开发中, 我们关注两种类型的分析。
需求分析:调查研究系统要成功所必须满足的需求。 面向对象分析:调查研究领域对象以发现重要信息来
满足需求。
什么是设计
设计强调的是满足需求的概念上的解决方案(在 软件或硬件方面)。设计不是实现,虽然一个好 的设计在完成后可以被(编程)实现。
应用UML的三种方式
UML作为草图:非正式的、不完整的图(如白板 上的手绘草图)。用于讨论问题。
实现
在实现(Implementation)或面向对象程序设 计( Object-Oriented Programming,OOP )过程中,会实现设计出来的对象。如,, Java
中的“book”类。
实现又称为“编程”(Coding)或构建
(Construction)
如何进行面向对象分析与设计
科学的一个普遍问题是,必须对被观测的对象和 情况,建立一种有意义的分类方法,以便人们理 解这些观测结果,也有助于科学理论的持续发展
▪ Grady Booch
UML的统一(5)
UML的统一(6)
致力于并推动 UML 发展的一些重要公司有
Hewlett – Packard Microsoft Oracle IBM Unisys
“设计”一词含义也很广泛,应加以限定,如:
面向对象的设计与分析课件
WENKU DESIGN
2023-2026
END
THANKS
感谢观看
KEEP VIEW
WENKU DESIGN
WENKU DESIGN
WENKU
REPORTING
https://
PART 01
面向对象的基本概念
对象与类
对象
现实世界中的事物或概念在面向对象 编程中的表示。每个对象都有其属性 (状态)和方法(行为)。
类
对象的抽象,定义了一组具有相同属 性和方法的对象的共同特征。类是对 象的模板或蓝图。
封装与继承
封装
将对象的属性和方法封装在一起,隐藏对象的内部实现细节,只通过对象的方法来访问其属性。
目的
提高类的可维护性和可复用性,降低类之间的耦 合度。
示例
一个表示用户的类,只负责存储和提供用户数据, 不包含其他如登录、注册等操作。
开闭原则
定义
软件实体应该对扩展开放,对修改封闭。即软件实体应该通过扩 展来实现变化,而不是通过修改已有的代码来实现变化。
目的
提高软件的可维护性和可复用性,降低修改代码的风险。
目的
降低类之间的耦合度,提高系统的可维护性和可复用性。
示例
使用接口或抽象类来实现高层模块和低层模块之间的依赖关系, 而不是直接依赖于具体实现类。
PART 03
面向对象的分析方法
识别对象与类
01
确定问题域中的实 体
通过分析问题背景,识别出问题 域中的实体,如人、事物、组织 等。
02
抽象出对象的属性 和行为
VS
继承的实现
继承的实现方式因编程语言而异。在Java 中,子类通过使用关键字"extends"来继 承父类。在C中,子类通过在类名前使用 冒号":"来实现继承。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参考书
面向对象软件工程与 UML, 李飞跃, 人民邮电 出版社 ( 高职教材 )
UML与软件建模 , 徐宝文,清华大学出版社(重 点大学教材)
面向对象设计原理与模式,(美)Dale Skrien著, 清华大学出版社 (国外经典教材)
Java设计模式, 耿祥义,清华大学出版社 大话设计模式,程杰,清华大学出版社
2.实现前面设计接口 – 实现接口 ---- 开发阶段完成, 完成细节设计
思考题:
1. 为什么我们要面向接口编程? 2. Java程序设计中学会的OO方法和本课程
学习的OO有什么区别和联系 3. 按OO要求,项目中的类分几个阶段设计
开发? 每阶段的主要任务是什么?
子类型必须能替换掉它们的父类型 分析:
“企鹅不是鸟” ––子类型必须包含父类型的全部特征
依赖倒转原则
抽象不应该依赖于细节,细节应该依赖于抽象; ---- 针对接口编程,不要对实现编程
解释: 1.高层类不应该依赖低层类;两者都应依赖于 抽象; 2.抽象不应该依赖细节;细节应该依赖抽象
反转实例: 电话指挥修电脑,谁依赖谁? 抽象与实现: 电脑主板-总线插槽-PIC卡的实
例— 抽象不依赖细节,细节依赖抽象。
依赖止于接口--用接口消除强耦合
依赖
A
B
依赖
依赖
A
I
B
用通用接口消除强耦合
案例分析
计算柱体的体积 从键盘输入2个数和一个运算符号,实现简单
运算
要点:分析类的单一职责原则; 分析耦合性及面向抽象编程的基本方法
项目开发中的2个典型问题
1. 需求总是在变 2. 维护和调试花费的大量时间是确定错误
如果一个类承担的职责过多,就等于把这些职 责耦合在一起。一个职责的变化可能会引起消 弱或抑制这个类完成其他职责的功能。这种耦 合会导致脆弱的设计。当变化发生时,设计会 遭到意想不到的破坏。
开-闭原则(核心原则)
软件实体(类、模块、方法)应该可以扩展,但 不可以修改;
换个说法: 类对扩展是开放的, 对修改是封闭的; 用extends 和implements等开放,用private封闭 实际使用:
1.随时准备修改:改变是合理的; 2.原来的代码一般不要改动,合理的方法是
基于原先的代码产生新的类
3.设计之初就准备好应对变化,用抽象来隔 离变化,减少耦合。
开-闭原则的运用:
写一个相对固定的内核; 不断产生新的类,当修改发生时; 新的类给予接口或抽象类创建;
理解: 面向接口编程
里氏替换原则
实现一个最简单的实例
计算立体型几何体体积 要点: 分析其中的耦合性、 程序的复用性
“脏代码”分析
OO基本原则
单一职责原则
功能单一
开-闭原则 依赖倒转原则
允许继承但禁止修改 面向接口编程
里氏替换原则
子类可以完成替换父类
面向抽象原则
耦合止于接口
多用组合少用继承原则 弱耦合
迪米特(最少知识)原则 高内聚/低耦合原则 合成/聚集复用原则
开发阶段(实现): 方法:隐藏实现细节
变化的只是实现而不是设 计
用新的视角思考OO问题
OO设计分析的几个关键目标
内聚度: (亦称: 透明度) 程序中的操作之间联系紧密的程序
耦合度: 两个程序之间联系的强度 耦合度与内聚度成反比
OOAD 追求高内聚底耦合
OO方法中对象的开发
1. 建立一个初步的设计—设计抽象接口 ---- 设计阶段完成,避免陷入细节
面向对象的分析与设计
课程学习的内容
OO设计原则 UML设计图及Rose Rational 工具 OO设计模式 典型项目的分析与设计
学习方法
掌握主要OO原则的原理和应用要点 改变java编程习惯
学会设计 Rational工具的使用; 掌握类图、用例图、顺序图、活动图的设计
熟练掌握MVC 设计方法 熟练掌握数据库编程 深化了解API,深化基于API的编程 反复实践典型模式应用于项目的分析和设计
考核
基于典型项目的考察: 项目的分析与方案设计 UML典型图 项目代码中基本原则的应用 项目设计中模型的使用
OOP编程要点
OOP 典型特点 : 封装性、继承性、重载、属性和修饰符、多态、重构、抽象类 接口、集合、泛型、委托与事件
OOP追求的目标: 可用性、完整性、健壮性、有效性、可伸缩性、可读性、 可重用性、简洁性、可维护性、可扩充行
及其方法调用产生的副作用(而编写和 修改代码的时间却很少)
追求: 适应变化的体系结构
如何处理变化的需求?
变化总会发生的 改进开发过程,以便有效地应付需求的变
化 模式及其应用
对象的分界层
设计与实现的分界面
设计阶段: 目标:抽象、封装 方法:面向接口(抽象)编程
发现并封装变化点
抽象是一种上下层间概念上z)
接口隔离原则
使用者应该只知道接口
单一职责原则(SRP原则)
就一个类而言,应该只有一个引起它变化的原因;
失败的案例:
界面处理类+数据库操作+文件读写+业务流程控制 类比: 多功能手机、集成主板的电脑—坏一处就全坏
经验: 类的设计倾向于越小越好
解释: