面向对象分析实例清华大学
面向对象分析实例

4
学生ID 自选习题,
5
习题解答 核对答案
练习本类的属性和方法
确定对象类
属性: 方法:
01
习题号 编写习题,
02
题目内容 编写答案,
03
答案 习题入库
04
所属课程
02
筛选对象原则:
发现对象
2
3
从需求中找名词作为侯选对象:
教师,系统,习题,答案,作业,时间,学生,试题,系统管理员,权限,学校,班,学期,课程,习题板,考试板,练习本,习题库.
共18项
具体做法:
发现对象
系统:太大的抽象,不能作为对象.
时间:只有考试板要求,可作为考试板属性处理.
作业:是习题的同义词,可舍弃.
系统需求说明按三方面描述:
01
系统问题域说明:应用系统的业务范围
02
系统边界说明:确定系统与用户之间接口
03
系统功能说明:系统需要实现的责任
04
实例描述:习题管理系统
对象
系统问题域说明:
在一个公共习题库的支持下, 负责各科习题的教师: 可用系统编写习题及答案,并存入习题库; 从习题库中选择一组习题去组成作业,并在要求时间公布习题答案; 从习题库中选择一组习题组成考试题公布; 可以批改学生的作业; 学生答题后收卷,阅卷评分.
用系统完成作业或答题并提交给系统; 可在习题库中选择习题自己练习; 可以在公布答案后核对自己的作业;
每个学生:
负责习题,编班和权限管理和维护习题库.
一名系统管理员:
壹
贰
系统问题域说明:
系统的用户有本校教师,学生,系统管理员.
学校以班组织学生,每班每学期有若干课程.
第十章 状态机图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

对应于触发器转换,没有明确的触发器的转换成为结束转换或无触 发器转换,是在状态的内部活动执行完毕后隐式触发的。
转换——事件
能够在触发器中接收的事件有以下四种:
调用事件:调用事件表示对象接收到一个调用操作的请求。其期待的结 果是事件的接收者触发一个转换并执行相应的操作。
改变事件:改变事件的发生依赖于事件中某个表达式所表达的布尔条件。 改变事件没有参数,要一直等到条件被满足才能发生。
信号事件:信号由一个对象准确地送给另一个或一组对象。发送给一组 对象的信号可能触发每个对象的不同转换。
时间事件:时间事件的发生依赖于事件中的一个时间表达式。比如,可 以让对象进入某状态后经过一段给定的时间或到达某个绝对时间后发生 该事件。
转换——事件
stm 订单类 Unselected
click(posX, posY) [posX==x and posY==y]
Selected
(a)
SingleSelectionMode shiftKeyUp MultiSelectionMode shiftKeyDown (c)
状态机图
状态机 状态机图
状态机图的基本概念
状态机
状态机是一种行为,它说明对象在其生命周期中响应事件所经历的 状态变化序列以及对那些时间的响应。
一般情况下,一个状态机依附于一个类,用来描述这个类的实例的 状态及其转换,和对接收到的事件所做出的响应。此外,状态机也可 以依附于用例、操作、协作等元素上,描述它们的执行过程。
等待支付
[立即支付] 审核完成
[及时支付]
[超出支付时限]
审核失败
状态机图
清华面向对象程序设计:第09章

bel组件 . 组件 Label被称为标签组件,它是一种用来显示说明 性的静态文本的组件.用户不能直接地编辑它, 但可以在应用程序中,通过调用Label提供的成 员方法更换文本的内容. Label类提供了三种构造方法的格式: Label() Label(String text) Label(String text, int alignment) alignment可以是Label类定义的整型常量,比如: LEFT(居左),CENTER(居中)和RIGHT (居右).
java.awt是java1.1用来建立GUI的图形包, 这 里 的 " awt" 是 抽 象 窗 口 工 具 包 (Abstract Windowing Toolkit)的缩写, 其 中 的 组 件 常 被 称 为 AWT 组 件 . javax.swing是Java2提出的AWT的改进包, 它主要改善了组件的显示外观,增强了 组件的控制能力.
4.Checkbox组件 . 组件 Checkbox被称为复选组件,它是一种图形化的, 可以设置"on"和"off"两种状态的组件.用鼠 标 点 击 一 个 复 选 按 钮 , 可 以 使 其 在 " on" 和 "off"之间进行切换.不仅如此,还可以将几 个复选按钮利用CheckboxGroup组件绑定成一 组,使得每一组复选按钮在每一时刻只有一个 处于"on"状态. 在Checkbox类中,提供了四种构造方法的格式: Checkbox() Checkbox(String label) Checkbox(String label, boolean state) Checkbox(String label, boolean state, CheckboxGroup group)
第十二章 组件图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

Account Account Details
12.2 组件图的组成元素
组件 接口 组件图中的关系
组件的内部结构
组件
组件,是系统设计的一个模块化部分, 它隐藏了内部的实现,对外提供了一组 接口。
组件是一个封装完好的物理实现单元, 它具有自己的身份标示和定义明确的接 口。并且由于它对接口的实现过程与外 部元素独立,所以组件具有可替换性。
组件图在面向对象设计过程中起着非常重要的作用:它明确了系统 设计,降低了沟通成本,而且按照面向对象方法进行设计的系统和子 系统通常保证了低耦合度,提高了可重用性。
组件图的基本概念
cmp 组件图
Item Code
ProductLeabharlann Order Payment
Customer Details
Customer
组件B的支持
实现关系
组件与提供接口之间建立实现关系
组件图的建模技术
对源代码结构建模
识别出感兴趣的源代码文件集合,并建模为组件。 如果系统规模较大,使用包对组件进行分组。 可以使用约束或注解来表示源代码的作者、版本号等信息。 使用接口和依赖关系来表示这些源代码文件之间的关系。 检查组件图的合理性,并识别源代码文件的优先级以便进行开发工作。
接口
对于一个组件而言,它有两类接口,提供接口与需求接口。
提供接口:又被称为导出接口或供给接口,是组件为其他组件提供服务 的操作的集合。
需求接口:又被称为引入接口,是组件向其他组件请求相应服务时要遵
循的接口。
cmp 组件图
cmp 组件图
Drawing
供给接口
需求接口
Shape
Drawing
IShape
第四章 用例图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

依赖关系
特性 作用 执行过程 对基用例的要求
include
extend
增强基用例的行为
增强基用例的行为
包含用例一定会执行
扩展用例可能被执行
在没有包含用例的情况下,在没有扩展用例的情况下, 基用例可以是也可以不是 基用例一定是良构的 良构的
表示法
箭头指向包含用例
是用例的重要服务对象,而次参与者处于一
种协作地位。
系统管理员
用例与参与者
在确定用例时可以通过参与者入手来寻找用例:
参与者的主要任务是什么? 参与者需要系统的什么信息? 参与者可以为系统提供什么信息? 系统需要通知参与者发生的变化和事件吗? 参与者需要通知系统发生的变化和事件吗?
用例的特征
用例的特征保证用例能够正确地捕捉功能性需求,同时也是判断用 例是否准确的依据。
不改变基用例的同时,根据需要自由地向用
例中添加行为。
检查实名信息
依赖关系——扩展
扩展用例的使用包括四个部分:
基用例:需要被扩展的用例,如图5-10中的“注册”用例。 扩展用例:提供所添加的行为序列的用例,如图5-10中的“检查实名信
息”用例。 扩展关系:使用虚线箭头表示,箭头指向基用例。 扩展点:基用例中的一个或多个位置,表示在该位置会根据某条件来决
一个父参与者的直接实例,这就要求属于抽象父
直接客户
电话客户
参与者的外部对象一定能够属于其子参与者之一。
网上客户
用例的概念 用例与参与者 用例的特征 用例的粒度
用例
用例的概念
用例是类元提供的一个内聚的的功能单元,表明系统与 一个或多个参与者之间信息交换的顺序,也表明了系统 执行的动作。
第七章 包图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

包图的基本概念
包图是用来描述模型中的包和所包含元素的组织方式的图,是维护 和控制系统总体结构的重要内容。包图能够组织许多UML中的元素, 不过其最常用的用途是用来组织用例图和类图。
在UML 1.X规范中,虽然没有明确规定包图属于一种图类型,却可以 使用包及包的关系来表示系统的结构,包图作为实际上存在并经常被 使用的一种图出现在UML中。最新的UML 2规范中已经明确定义了包 图。
元素的分包原则
元素不能“狡兔三窟”:树形结构的一个节点不能同时拥有两个父 节点,一个元素也不允许在两个包中重复出现。
相同包内元素不能重名:包所具有的命名空间的作用要求用一个包 中的同种类元素名称必须是唯一的。
包内元素要紧密联系:分在同一个包中的元素应该具有某些相同的 性质,即包的高内聚性。
包与包尽可能保持独立:包和包之间需要尽可能减少耦合度,要求 包内元素与外部元素有尽可能少的依赖关系。
DataType
+ Intege 元素的分包原则
包的概念
pkg Logical View
包是用于把模型本身组织成层次结构的通用机制, PackageName 它不能执行。
PackageName
+ ContentA + ContentB
包名:与类图相似,包有简单名与路径名两种命 pkg Logical View
PackageB
包的依赖关系
容易出现的问题:循环依赖
pkg Logical View PackageA
循环依赖的出现是令人困惑、也是非常容易
产生错误的。尤其是当依赖关系表示包的引 pkg Logical View PackageA
入时,循环依赖会导致将模型转化成代码后
清华面向对象程序设计第章共71页

Box类的定义
public class Box {
int long,width, height; void setLong(int longValue){long=longValue;} void setWidth(int widthValue){width=widthValue;} void setHeight (int heightValue){ height = heightValue;} void setBox(int longValue,int widthValue,int heightValue) {
year=y; month=m; day=d; } int getYear(){return year;} int getMonth(){return month;} int getDay(){return day;} }
Book类定义
class Book //书籍类 {
String name; String author; Date publishDate; float price; …… //其他一些成员变量 …… //成员方法 }
清华面向对象程序设计 第章
聪明出于勤奋,天才在于积累
第3章
抽象与封装
3.1 抽象与封装的实现技术
实现抽象和封装 ——类和对象
一个对象包含了若干个成员变量和成员方法,它是现实世 界中特定实体在程序中的具体体现。其中,成员变量反映 实体的属性状态,成员方法反映实体具有的行为能力,这 些内容的规格描述将由类承担,类是对具有类似特征的对 象的抽象说明,对象是类的实例。
Date是描述日期的类,Book是描述书籍的类。在Book 类
中,设一个表示出版日期的成员变量,它属于Date类。
面向对象的理论与C++实践清华课程设计

面向对象的理论与C++实践清华课程设计一、课程介绍面向对象的理论与C++实践是清华大学计算机科学与技术系本科生专业选修课程,涵盖面向对象编程理论和C++编程实践两个方面,旨在帮助学生深入理解面向对象思想并用C++语言进行实现。
二、课程内容面向对象编程理论1.面向对象思想概述2.类与对象3.继承、多态与虚函数4.抽象类与纯虚函数5.STL库简介C++编程实践1.C++程序设计基础2.类与对象的实现3.继承、多态与虚函数的实现4.STL库的使用三、课程教材《C++ Primer》(第五版)(中文版),作者:Lippman, Lajoie, Moo,译者:侯捷。
四、课程参考资料1.《Effective C++》(中文版),作者:Scott Meyers,译者:侯杰。
2.《STL源码剖析》(中文版),作者:侯捷。
3.《深入浅出设计模式》(中文版),作者:程杰。
五、课程设计要求1.选题要求:要求选好一个项目,体现应用面向对象编程的思想。
2.设计方案包括:给出所设计类的类体及成员函数原型,试画出相应的类图,写出内部数据结构方案的描述,描述各类或各函数功能作用的注释。
3.程序要求:为了反映面向对象编程语言的特征,要使用C++语言进行编程,采用面向对象思想,必须使用类和对象来体现程序设计思想,要充分利用C++语言的特性和STL库进行程序开发。
六、课程设计流程第一阶段:选题第一次课程上老师将介绍课程设计大概内容,学生需要结合个人实际情况,选定一个初步的设计主题,初步选题可与老师讨论资讯。
相当于开题选题环节。
第二阶段:设计方案在确定题目后,需要自己独立完成课程设计方案。
设计方案要求如上述第五部分所说明。
相当于中期论文。
第三阶段:实现程序在建立好方案后,开始进行程序实现。
实现过程中出现问题,需及时向老师或助教请教解决,最终提交实现代码。
相当于结题报告。
七、课程评分标准1.选题:选题是否合理,是否具有一定难度性;2.设计方案:方案是否完善,方案中的类设计是否具有标准性;3.程序代码:代码是否规范,是否达到良好的代码质量,代码是否具有可扩充性、可移植性等软件工程方面的优良特征;4.报告:书面报告是否符合规范,语言表达、图表使用是否得当;5.程序演示:演示时是否条理清晰,是否表现出更高的带了解问题以及解决问题的能力。
第三章 初识UML-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

行为图
状态图
活动图
顺序图
协作图
用例图
UML 2中的图
UML图
结构图
类图
组件图
对象图
外廓图
组合结构 图
部署图
包图
顺序图
行为图
用例图
活动图
状态机图
交互图
通信图
交互概览 图
时间图
UML 1.4与UML 2中不同图的对比
UML 1.4
状态图 活动图
UML 2 包图 状态机图 活动图
对比说明
尽管UML 1.4使用包图说明规范的组织结构,但是没有对包图进行明确 定义。
例如,在一个类的符号中暗示了一种规格说明:它提供类所有的属性、 操作等信息的全面描述。
修饰
修饰是对规格说明的文字的或图形的表示。
例如,通过对类名添加斜体修饰来表明这是一个抽象类。
在UML中的每个元素符号都以一个基本的符号开始,在其上添加一 些具有独特性的修饰。
例如,这里有一个类,我们可以通过不同的修饰来标示出它是一个抽象 类,拥有两个公有性的操作,一个保护性的操作和一个私有性的操作。
通用划分
在面向对象系统建模中,通常有几种划分方法,其中最常见的有两 种划分:
类型-实例:是通用描述与某个特定元素的对应。
➢例如,类和对象就是一种典型的类型-实例划分。
接口-实现:接口是一个系统或对象的行为规范,这种规范预先告知使 用者或外部的其它对象这个系统或对象的某项能力,和其提供的服务。 实现是接口的具体行为,它负责执行接口的全部语义,是具体的服务兑 现过程。
只是名称不同,技术上完全相同。 UML 2的活动图独立于状态机存在。
组合结构图 显示结构化类元或协作的内部结构,和普通类图之间没有严格界限。
06_OOAnalysis清华大学软件工程教材

– 体系结构描述( 从设计角度 )
• 从设计模型的角度,描述系统的体系结构; • 通常包括由设计模型分解的子系统、接口、依赖、关键设计类和 用例实现的设计。
9
面向对象设计
• 面向对象设计的制品(续)
– 部署图
• 根据系统在计算节点上的功能分布,描述整体的物理分布。
– 体系结构描述( 从部署角度 )
• 面向对象设计
– 面向对象设计是根据已建立的系统分析模型,运用面向对象 技术,进行系统的软件设计。 – 通常包括系统设计和详细设计(或对象设计)两个层次。
7
面向对象设计
• 面向对象设计的制品
– 设计类
• 考虑与实现有关的因素,具体描述操作的参数、属性和类型等。 • 类的设计应当充分利用预定义的系统类库或其他来源的现有类, 并采用继承、复用、演化等方法设计所需要的新类。
• 思考:如何识别 MiniLibrary 的实体类?
34
MiniLibrary:识别实体类
实体类
BorrowerInfo Loan Reservation Title Item
– 用例实现( 从设计角度 )
• 基于用例实现的分析结果,使用设计类及其对象描述一个用例是 如何实现和执行的。 • 通常由类图、交互图、事件流设计(即使用对象或子系统的术语 进行文本描述)和与实现相关的需求组成。
8
面向对象设计
• 面向对象设计的制品(续)
– 设计子系统与接口
• 子系统是组织设计模型的一种手段,用以描述大粒度的构件,通 常由设计类、用例实现、接口和其它子系统等组成。 • 接口表示由设计类和子系统提供的操作。
17
实体类
• 实体类
– 描述必须存贮的信息及其相关行为 – 通常对应现实世界中的“事物”
第8章 面向对象分析-软件工程基础(第3版)-胡思康-清华大学出版社

第8章 面向对象分析
第 5 页5
面向对象分析概述
面向对象分析的3类模型
OOA模型由3类独立模型构成:功能模型、静态模型和动态模型。 ➢功能模型描述软件系统的用户交互和功能。 ➢静态模型描述软件系统中类与对象以及它们间的关系,也因也称 为对象模型。 ➢动态模型描述系统的控制结构,也称为交互模型。
第8章 面向对象分析
第 6 页6
面向对象分析概述
类
静态模型的5个层次 类-对象层
对象
Coad和Yourdon 提出,对于大型、复杂 性软件系统,需要建立 分析问题域的静态模型。 该模型由5个层次组成: 类-对象层、结构层、 属性层、服务层和主题 层。
结构层 属性层 服务层 主题层
泛化关系
关联关系
属性
对象连接
服务
消息连接
⑶ 用例描述:用文字信息详细描述用例的内容,它是对用 例的有益补充。
第8章 面向对象分析
第 8 页8
建立静态模型
➢用例模型分别从参与者和系统的角度描述用户需求, 依据用例模型导出静态模型。静态模型是面向对象建 模中最基本、最重要、最耗时的技术活动。 ➢静态建模的任务是构建问题域的概念模型,把问题 域中的实体转变为信息域的类与对象以及它们间的关 系,因此也被称为对象模型或领域模型。 ➢静态模型通过建立类图及关系来反映领域概念,而 面向对象设计也建立类图,但各阶段对类的抽象程度 不同。
第8章 面向对象分析
第 12 页12
建立动态模型
建立状态图
状态图描述的就是对象状态的转换过程。通过对对象状态 的分析,能够了解对象在系统流程中的变换,从而发现潜在的事 件和条件。
建立状态图的一般过程如下: ⑴ 了解系统的主要功能和性能,确定和它们有关的主要对象。 ⑵ 列出一个对象的生存期内的所有可能的状态。 ⑶ 确定对象状态改变时的触发条件或事件。 ⑷ 在一个对象中,选定一组与描述状态相关的行为属性和促使 改变状态的方法。 ⑸ 结合触发条件、事件、行为属性值改变的先后顺序,建立软 件系统的状态图。
第十一章 活动图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

判断节点具有多个导出流,对于每条导 出流而言,应当在表示该控制流的箭头 上附加控制条件。
act 取款 输入i
[x>0] 列出数列第x项
[x<=0] 报错
合并节点
合并节点将多个控制流进行合并,并 统一导出到同一个离开控制流。
合并节点仅有逻辑意义而没有时间和 数据上的意义:几个动作都指向同一 个合并节点也并不意味着这些动作要 在进入之后互相等待或进行同步数据 之类的操作。
act 考试
主任务
并发任务A
分叉节点 并发任务B
结合节点 下一个主任务
对象流
act 考试
客户
订单中心
对象流是UML为填补活动图与面向对象 选择商品 思想之间的疏离而出现的。如果需要在 生成订单
活动图中表现对象流,则首先需要绘制
出泳道,且对象应该作为泳道的负责对
订单: Order [未支付]
象出现。
开始
终止
控制流
控制流是活动图中用于标示控制路径 的一种符号。它负责当一个动作或活 动节点执行完毕后,将执行主体从当 前已完毕的节点转移到过程的下一个 动作或动作节点。
控制流从活动图的开始标记开始运行, 经过顺序、分支等结构引导着各个动 作的连续执行。
act 取款
x=5
判断节点
判断节点是活动图中进行逻辑判断、并 创造分支的一种方法。
对业务流程建模
选择一个将要描述的重要过程,过程中尽量涉及数量少但是关键的对象 或参与者,将无关或关联很小的对象排除在外,为每一个对象或参与者 绘制泳道。
在总体业务流程中提取关键的动作或活动节点,并且将他们与对象或参 与者相对应;若发现有些动作无法对应,则考虑动作是否在这个流程中 起关键作用,或者是否遗漏了某些对象或参与者。
Visual C++面向对象程序设计教程与实验(第二版)清华大学出版社第2章习题参考答案

1.分析下列程序的执行结果:输出随机数2. 分析下列程序的执行结果:i=03. C++语言对C语言在结构化程序设计方面进行了哪些扩充?主要在以下方面进行了扩充:文件扩展名、注释符、名字空间、输入输出、变量的定义、强制类型转换、动态内存的分配与释放、作用域运算符::、引用、const 修饰符、字符串、函数4. 下述C++程序有若干处错误,试找出并纠正之。
正确程序为:#include<iostream.h>const float PAI=3.14159265;float square(float r){return PAI*r*r;}float square(float high,float length=0 ){return high*length;}float (*fs)(float,float=0);void main(){fs=□cout<<"The circle's square is "<<fs(1.0)<<'\n';}5. 引用类型与指针类型有什么区别?指针的内容或值是某一变量的内存单元地址,而引用则与初始化它的变量具有相同的内存单元地址。
指针是个变量,可以把它再赋值成其它的地址,然而,建立引用时必须进行初始化并且决不会再指向其它不同的变量。
C++没有提供访问引用本身地址的方法,因为它与指针或其它变量的地址不同,它没有任何意义。
引用总是作为变量的别名使用,引用的地址也就是变量的地址。
引用一旦初始化,就不会与初始化它的变量分开。
6.函数、内联函数以及宏的区别。
程序的模块在C++中通过函数来实现,函数由函数说明和函数体2部分组成。
内联函数是C++语言特有的一种函数附加类别,是通过在函数声明之前插入“inline”关键字实现的。
编译器会将编译后的全部内联函数的目的机器代码复制到程序内所有的引用位置并把往返传送的数据也都溶合进引用位置的计算当中,用来避免函数调用机制所带来的开销,提高程序的执行效率。
第十四章 统一软件开发过程-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

过程的静态结构
“谁”——工作者 “什么方法”——活动 “做什么”——制品 “什么时候”——工作流
工作者
工作者定义了软件开发工作中某个工作单位的行为和责任,这个工 作单位可能指某个个体,或者某个工作小组。
工作者更像是一种角色:在不同的时刻(也可能同时),同一个个 体可能担任着不同的工作者角色。
确定的工作者角色担任着确定的任务和责任,它要亲力亲为地完成 那些任务。
细化阶段具有承前启后的意义:
一方面,细化阶段的结果可能为整个项目的进一步开展提供了重要的依 据,也可能为这个项目宣判死刑;
另一方面,在细化过程交付之后,项目将从前面的轻量级、低风险的工 作进入高风险、高投入的工作中。
细化阶段的重点控制对象是系统分析的稳定性和开发的可行性。
பைடு நூலகம் 构建阶段
在构建阶段中,我们将要开发和整合所有剩余的组件和应用特性, 然后对所有的功能和特性进行完全的测试。
统一软件开发过程简介
统一软件开发过程(简称RUP)是一套由IBM下属的RATIONAL分部提 出的软件工程方法,它由IVAR JACOBSON的THE OBJECTORY PROCESS和 THE RATIONAL APPROACH发展而来。
统一软件开发过程将软件开发过程按照时序组织成几个阶段,每个 阶段有当前阶段的最重要任务,并且根据这些任务的完成情况为下一 个阶段提供输入,实现每个阶段的逻辑连接。
执行活动后的成果(输出)。 一些常见的制品:
模型:用例模型、设计模型、分析类模型等 模型中的元素:类、用例、参与者、子系统等 文档:需求分析文档、可行性分析文档、用户手册等 代码 可执行文件
工作流
当活动具备了工作者、活动、制品三个核心元素之后,需要使用工 作流来对活动的操作顺序进行描述。除此之外,工作流还可以展示工 作者之间的交互关系。
清华大学郑利c++4类与对象

32
C++语言程序设计
清华大学 郑莉
例4-2 拷贝构造函数举例
构
造 class Point
函 数 和 析
{ public: Point(int xx=0,int yy=0){X=xx; Y=yy;} Point(Point& p); int GetX() {return X;}
构
int GetY() {return Y;}
数 现拷贝赋值。
和 void main(void)
析 构 函
{ Point A(1,2); Point B(A); //拷贝构造函数被调用
数
cout<<B.GetX()<<endl;
}
35
C++语言程序设计
清华大学 郑莉
例4-2拷贝构造函数举例
构 造 函
若函数的形参为类对象,调用函数时,
实参赋值给形参,系统自动调用拷贝 构造函数。例如:
函 private:
数
int X,Y;
};
33
Point::Point (Point& p) {
X=p.X; Y=p.Y; cout<<"拷贝构造函数被调用"<<endl; }
34
C++语言程序设计
清华大学 郑莉
例4-2 拷贝构造函数举例
构
造 当用类的一个对象去初始化该类的另一
函 个对象时系统自动调用拷贝构造函数实
函
int Hour,Minute,Second;
数 };
30
构造函数的实现: Clock::Clock(int NewH, int NewM, int NewS) {
清华面向对象程序设计:第01章

父类 子类
多态性——
不同的类对象收到同一个消息可以产 生完全不同的响应效果,这种现象叫 做多态。利用多态机制,用户可以发 送一个通用的消息,而实现的细节由 接收对象自行决定,这样,同一个消 息可能会导致调用不同的方法。
面向对象的4个特性
抽象性 封装性 继承性 多态性
1.4 面向对象程序设计语言
一个类的不同对象; 对象一定属于某个类,我们又将这个对象称为所
属类的一个实例; 类是将具有共同属性的对象进行抽象的结果,它
可以具有层次关系,即一个类既可以通过继承其 他类而来,也可以被其他类继承。
举例:快速拼写检查程序。
快速拼写检查程序将对用户提供的 单词进行拼写检查,如果在字典中 找到,输出“拼写正确”的字样, 否则输出“拼写不正确”的字样。
第1 章
面向对象程序设计概述
1.1 结构化程序设计方法
1.1.1 结构化程序设计思想的提出背景
回首计算机的发展历程,人们发现计算机软件的发展速 度始终滞后于计算机硬件的发展,它已经成为制约计算 机产业整体发展的瓶颈。究其原因可能有很多方面,但 下面两点不容忽视。
软件产业的个体化 受限于程序设计语言
1.1.2 结构化程序设计方法
自顶向下、逐步求精的开发方法 模块化的组织方式 结构化的语句结构
自顶向下、逐步求精
将编写程序看成是一个逐步演化的 过程。所谓自顶向下是指将分析问 题的过程划分成若干个层次,每一 个新的层次都是上一个层次的细化, 即步步深入,逐层细分。
模块化
将整个系统分解成若干个模块,每 个模块实现特定的功能,最终的系 统将由这些模块组装而成。模块之 间通过接口传递信息,力求模块具 有良好的独立性。
行为2
行为3
第102章面向对象分析实例(清华大学)

1. 确定业务参与者
• 从选课系统的需求描述中,可以确定4类参与者: 学生(Student) 教师(Teacher) 系统管理员(Administrator) 学籍档案系统(Archive System)
第102章面向对象分析实例(清华大 学)
2. 确定业务需求用例
• 以下问题可以帮助我们更好地标识系统的 用例:
• 当系统比较庞大和复杂时,要搞清楚系统的需求 往往比较困难,通过明确参与者,可以针对参与 者确定系统需求,有助于保证系统需求的完整性。
第102章面向对象分析实例(清华大 学)
1. 确定业务参与者
• 可通过以下资料来确定系统的参与者:
➢ 标识系统范围和边界的环境图; ➢ 现有系统(如果有的话)的文档和用户手册; ➢ 项目会议和研讨会的记录; ➢ 现有的需求文档、工作手册等。
划分主题
• 在开发大型、复杂系统的过程中,为了降低复杂 程度,人们习惯于把系统再进一步划分成几个不 同的主题。
• 应该按问题领域而不是用功能分解方法来确定主 题。此外,应该按照使不同主题内的对象相互间 依赖和交互最少的原则来确定主题。
• 主题可以采用UML中的包来展现。
第102章面向对象分析实例(清华大 学)
使用Rose创建用例模型
• 添加了包含关系的主用例图如图所示。
第102章面向对象分析实例(清华大 学)
8.3 建立对象模型
• 在系统分析阶段,对象建模的主要任务是建立问 题域的概念模型。
• 这个模型描述了现实世界中的“类与对象”以及 它们之间的关系。
• 在UML中,通过建立类图来表示对象模型。
第102章面向对象分析实例(清华大 学)
第102章面向对象分析实例(清华大 学)
(最新整理)清华面向对象程序设计:第11章

2021/7/26
6
Java客户端应用程序 JDBC
客户端
DBMS
数据库服务器
两层结构的应用模型
2021/7/26
Java客户端应用程序
客户端
HTTP RMI CORBA
举例3:用Microsoft SQL Server驱动程序连接SQL Server的 URL:
jdbc:microsoft:sqlserver://host; DatabaseName=Student
2021/7/26
12
11.2.4 创建SQL语句对象
在建立了与数据库的连接后,应用程序可以在此连接 上创建SQL语句对象,以便执行用户定义的特定SQL 语句。在Connection中,可以利用面向对象的重载技 术定义3种格式的createStatement成员方法创建 Statement对象:
Statement createStatement() throws SQLException;
Statement createStatement(int resultSetType,
int resultSetConcurrency) throws SQLException;
Statement createStatement(int resultSetType,
Statement stmt = conn.createStatement();
int rowcount = stmt.executeUpdate("DELETE FROM Student WHERE Sno = '04060001'");
第九章 通信图-UML面向对象分析、建模与设计-吕云翔-清华大学出版社

通过描绘对象之间消息的传递情况来反映具体使用语境的逻辑表达。 显示对象及其交互关系的空间组织结构。 表达一个操作的实现。
对象 链 消息
9.2 通信图的组成元素
对象
通信图中的对象与顺序图中对象的概念相同,都是表示类的实例。 通信图只关注相互有交互作用的对象和对象关系,而忽略其他对象。 由于通信图中不表示对象的创建与销毁,因此,对象在通信图中的
通信图的概念
从结构方面来看,通信图包含了一个对象的集合并且定义了它们之 间的行为方面的关系,表达了一些系统的静态内容。
从行为方面来看,通信图包含了在各个对象之间进行传递交换的一 系列的消息集合,以完成协作的目的。
通信图是一种描述协作在某一语境下的空间组织结构的图形化方式, 在使用其进行建模时,主要具有以下三个作用。
ObjectB ObjectB
通信图与顺序图
通信图与顺序图的共同点主要有如下3点:
主要元素相同。两种图中的主要元素都是对象与消息,且都支持所有的 消息类型。
表达语义相同。两种图都是对系统中的交互建模,描述了系统中某个用 例或操作的执行过程,二者的语义是等价的。
对象责任相同。两种图中的对象都担任了发送者与接收者的角色并承担 了发送与接收消息的责任。通过对象之间消息的传递来实现系统的功能。
顺序图还可以表示对象的激活情况,而对于通信图来说,由于缺少表示 时间的信息,除了对消息进行解释,无法清晰地表示对象的激活情况。
通信图建模技术
按组织对控制流建模
识别交互的语境,即交互所处的环境。 识别出图中应该存在的对象。 识别可能有消息传递的对象并设置链。 设置对象间的消息。 如果需要更多约束,如时间或空间的约束,可以使用其他的约束来修饰
位置没有限制。 与顺序图中对象的表示法不同的是,通信图中的无法显示对象的生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用Rose创建用例模型
1. 在Rose中创建参与者(actors)
使用Rose创建用例模型
2. 给参与者添加文档 • 在Rose中我们对模型元素都可以(在多数情况下
是必须的)添加文档以描述更多的信息。 • 应该给模型中的每个actor添加摘要描述,摘要描
述表示actor和系统交互的规则。 • 课程注册系统中actor的摘要描述如下:
• 当系统比较庞大和复杂时,要搞清楚系统的需求 往往比较困难,通过明确参与者,可以针对参与 者确定系统需求,有助于保证系统需求的完整性。
1. 确定业务参与者
• 可通过以下资料来确定系统的参与者:
➢ 标识系统范围和边界的环境图; ➢ 现有系统(如果有的话)的文档和用户手册; ➢ 项目会议和研讨会的记录; ➢ 现有的需求文档、工作手册等。
• 每个系统通常都有一个总体视图(Global View of Actors and Use Cases),如果总体视图过 于复杂,则可以创建多个用例图,每个用例图关 注系统的某一方面。
• 通常是围绕参与者创建用例图。
使用Rose创建用例模型
1. 在Rose中创建参与者(actors) 创建的角色应放在Use-Case Model包中的Actors 包中比较好,如果模型结构中没有这样的包,可以 先创建Actors包,之后按下面的步骤创建角色: (1) 在浏览器窗口中的Actors包上单击鼠标右键, 显示弹出菜单; (2) 选择New:Actor菜单选项,系统创建名为New Class的参与者; (3) 选中新创建的参与者,更名为设计的名字。
(2) 确定业务需求用例──参与者需要系统提供的完 整功能。
(3) 创建用例图──标识参与者与用例之间、用例与 用例之间的关系。
例:选课系统。给教师分配课程和学生注册课程。
在每个学期选课开始之前,系统管理员需要对系统中的教 师信息、课程信息和学生信息进行维护。学期结束后,将本 学期成绩归档到学籍档案系统。 学生登录系统后会得到一份本学期将要开设的课程目录。 每门课程包含的信息有开课系别、教师、上课时间、教室、 容纳的学生数量和学生选择课程的先决条件。 当学生选择了一门课程后,系统需访问学籍档案系统,查询 是否符合选课的先决条件 。如果不符合,系统给出提示信息。 每个学期有一段时间让学生可以改变计划,学生可以在这段 时间内访问联机系统以增选课程或退选课程。
•ቤተ መጻሕፍቲ ባይዱ主事件流表示正常情况下执行者与系统之间的信 息交互及动作序列,备选事件流则表示特殊情况 或异常情况下的信息交互及动作序列。
• 应给出每个用例的规格说明。
用例“选择课程”的规格说明
• 用例“选择课程”的规格说明
3. 创建用例图
• 用例图是若干个参与者和用例,以及它们间的关 系构成的图形表示。
• 对象模型的5个层次
➢ Coad & Yourdon提出,复杂问题(大型系统)的对象模型 应该由下述5个层次组成:主题层(也称为范畴层)、类-对 象层、结构层、属性层和服务层,如图所示。
8.2 建立用例模型
• 建立用例模型的过程
(1) 确定业务参与者──标识目标系统将支持的不同 类型的用户,可以是人、事件或其他系统。
Student——在学校注册上课的人; Teacher——学校授权上课的人; Administrator——系统认同的维护人员; Archive System——管理学生学籍档案的外部系统。
使用Rose创建用例模型
3. 在Rose中创建用例(Use Case) • 应该将用例放在Use cases包中,如果您的模型
例:选课系统。给教师分配课程和学生注册课程。
教师可以访问在线系统,查看将要教授哪些课程和每门课程 有哪些学生报名,课程考试结束后可以提交成绩,系统可以 生成带有成绩分布统计结果的成绩单。
1. 确定业务参与者
• 通过关注系统的业务参与者,我们可以将重点放 在如何使用系统,而不是如何构造系统上,并且 有助于进一步明确系统的范围和边界。
• 环境图是分析参与者和发现潜在用例的极好来源, 它不仅可以用在结构化分析方法中,也可以用于 面向对象的分析方法中。
• 通过环境图,可以确定系统的主要输入输出,通 过提交和接收输入输出的各方确定潜在的用例。
• 选课系统的环境图
• 选课系统的业务列表
• 用例的规格说明
• 对用例的完整描述包括用例名称、执行者、前置 条件、后置条件、一个主事件流、零到多个备选 事件流。
第8章 面向对象分析
• 面向对象分析概述 • 建立用例模型 • 建立对象模型 • 建立动态模型 • 建立数据模型
8.1 面向对象分析概述
• 面向对象分析的3个模型
➢ 用例模型:用例和场景表示的功能模型; ➢ 对象模型:用类和对象表示的静态模型; ➢ 交互模型:由状态图和顺序图表示的动态模型。
8.1 面向对象分析概述
2. 确定业务需求用例
• 以下问题可以帮助我们更好地标识系统的 用例:
➢ 每个参与者的特定任务是什么? ➢ 是否每个参与者都要从系统中创建、存储、改变、
移动或读取信息? ➢ 是否任何参与者需要通知系统有关突发性的、外
部的改变? ➢ 哪些用例支持或维护系统? ➢ 目前的用例是否覆盖了所有功能需求?
2. 确定业务需求用例
1. 确定业务参与者
• 还可以通过提出以下问题,明确系统的参 与者:
➢ 谁或者什么为系统提供输入? ➢ 谁或者什么接收系统的输出? ➢ 需要与其他系统连接的接口吗? ➢ 是否存在在预定的时间自动触发的事件? ➢ 谁将维护系统中的信息?
1. 确定业务参与者
• 从选课系统的需求描述中,可以确定4类参与者: ➢ 学生(Student) ➢ 教师(Teacher) ➢ 系统管理员(Administrator) ➢ 学籍档案系统(Archive System)
结构中没有这样的包,则应该先创建包。 • 也可以将每个用例放在单独的包中,因此可以先
创建相应的包,再创建用例。 • 另外,在多个用例中使用的公共用例,如验证用
户(Validate User),可以放在一个单独的包 中,如可以在Use cases包中创建Included Use Cases包来存放公共用例。