当前课程知识点:软件工程 >  第9章 面向对象分析与设计 >  9.1 面向对象分析 >  讲课视频

返回《软件工程》慕课在线视频课程列表

讲课视频在线视频

下一节:讲课视频-1

返回《软件工程》慕课在线视频列表

讲课视频课程教案、知识点、字幕

各位同学好

我是刘璘

这一节我来给大家介绍

面相对象分析有关的内容

当你看到图中的这幅图片的时候

你看到的是什么

对 这是在德国Dagstuhl

用于召开计算机方面

相关研讨会的

Dagstuhl城堡

但是

也许在一个面向

对象程序员的眼里

他看到的就会是另外一番景象

他看到的会是一个又一个

对外提供服务的对象

比如水池成了流体输入接口

门成了室内活动触发器

而窗子则成了访客监控接口

窗帘成为了隐私保护代理

走到室内

我们的面向对象的程序员

看到的

也同样是一个充满了对象的世界

比如椅子

成了臀部支撑服务代理

墙上的装饰画

成了空间分隔对象装饰器

果盘成了食品占存容器

火警监控器

成了安全服务监控代理

吊灯成了提供照明服务的

对象组合

通过这样的一个小小的比喻

大家应该可能看到

用面向对象的视角来看待世界

我们就把世界看成了是

一个一个彼此独立

又相互联系的对象实体

面向对象分析

是一种软件系统的

需求建模与分析技术

它是在上个世纪

八十年代末九十年代初提出

受到面向对象的程序设计

语义网络

和带语义的数据模型的影响

它的基本的观点

就是采用对象 类

方法等原子概念

在需求分析 设计与实现之间

建立自然的映射关系

面向对象的分析技术

关注运用领域中的实体

并将其建模为对象

面向对象分析技术

主要要基于分类 泛化 聚合关系

在对象的集合之间

建立某种层次结构

而对象的行为

就是执行预定的动作

有时候也称为服务或者活动

对象通过执行这些动作

来完成它自身状态的迁移

面向对向分析的思路

主要来源于四个方面

首先就是面向对象

程序设计中的概念

将面向对象程序设计中的概念

上推到分析和设计阶段

会使得各个阶段之间的转换

变得更为平滑

此外 面向对象分析

还从数据库设计中

汲取了主要的数据建模方法

ER图中的主要概念

其中的实体 关系 泛化

聚合和分类

用于系统中对象的建模和分析

在面向对象之前

主要的软件范型

就是结构化的分析方法

结构化分析方法

强调分而治之

将大的系统分解为

更小的子系统

单独完成独立的功能

这种思路在面向对象中

也有所体现

在人工智能 知识工程中

知识表示方法也对面向对象的

概念建模

提供了很好的借鉴的语义表示

主要是基于问题框架

和语义网络的知识表示方法

它对于刻画对象之间关系

有着很好的借鉴意义

在面向对象分析方法

全盛的时代

曾经有过50余种

面向对象的分析方法

同时存在

这其中影响最深远的要属

Peter Coad

和Yourdon 的方法

在Peter Coad的方法中

他提出对象是问题领域中

真实存在的实体

有着清晰定义的对象边界

这是什么意思

就是说

一个对象

给定的对象

我们能够清晰地知道 判断出

它是不是属于我们所定义的

这种类型的对象

也就是说

类型的区分是很明显的

那要想作出这样明显的区分

我们主要靠什么

靠的就是对象中封装的属性

和它的行为

因此面向对象的分析的

核心概念就是

对象 属性和行为

其中 行为我们用服务来定义

这个也和后来产生的

在2000年代比较流行的

面向服务的计算方法

实际上就是更强调

服务的这个角度

和对象是同一个问题的

不同的角度而已

在面向对象的分析中

除了对象属性

和服务这三个概念以外

另外两个概念

一个是结构 一个是主题

那我们先来看看

面向对象分析中

都支持哪些结构

首先就是用于表达

继承关系的一般特殊结构

一般特殊结构

将类组织成基于继承关系的

分层次的一个结构

自底向上

就是从特殊的类到一般的类

一般的类也称为父类

或者是基类

特别的类就是父类的子类

自顶向下

就是从一般到特殊

我们先有抽象的

具有公共属性的类

然后再把它特化为

更具体的

属性定义更具有特殊性的这样的类

如图中的这个类图

我们看到

患者可以分为两个特殊的类

一类是住院患者

一类是门诊患者

住院患者和门诊患者

他们有一个公共的属性

就是他们都要有一个医生

为他负责

我们要在患者的属性中添加

他所负责任的医生的名字

而在住院患者中

他有两个特殊的属性

就是住院患者

他是有相应的病房号和病床号的

而门诊患者

我们只是记录他的

上一次诊疗的时间

和相关的诊疗记录

以及下一次的预约的时间

所以我们可以看到

通过类结构

我们就能把类之间的公共的属性

提取出来

放到父类和奇类中去

而那些所属于这个类的

独特的一些属性

则放到特定的这个类

自身来定义

这样我们就可以更好的支持重用

除了一般特殊结构

在面向对相的分析中

另一个主要的结构就是

整体部分结构

整个部分结构用于描述

对象之间的组合关系

比如一个交通灯对象

是由零到三个灯组

以及支撑杆和位置组成的

我们说这样的结构就是一个

整体部分结构

它表明了一个整体的对象

是由哪些更小的

部分的对象组合而成

在面向对相的这种方法学中

它所倡导的

这一种分而治之的世界观

就仿佛是把世界切碎了

每一个碎片都是一个

独立的对象

但是对象之间

并非老死不相往来

每个对象

它存在于这个环境中

就要为他周遭的其他对象

提供服务

比如医生对象

对外提供的服务是体检

出体检报告等等

在Coad的OOA方法中

它把对象的

能够对外提供的服务

抽象成了三种类型

而这种三种类型的服务

仍然是我们目前的软件系统

最流行 最常见的服务

首先是瞬时服务

这类服务

它是用事件发生的这样的形式

提供出来的

比如创建一个新对象

终止一个旧的对象

修改某个对象的某些属性等等

它都是瞬时完成的

做一个动作之后

服务过程就结束了

另外一类服务就是计算服务

这也是计算机软件

能够对外提供的主要服务之一

这类服务主要是为其他的对象

完成某些复杂的科学计算任务

当然也包括很简单的数学计算

最后一类是持续性的服务

通常就是监控类型的服务

这类服务它需要对象

持续地去监控某些业务流程

检查预设的条件是否得到满足

当预设的报经条件满足的时候

这些监控的服务

要采取一定的动作或者报警

或者发消息

或者切断某些服务等等

这类监控服务也是现在

最常见的服务类型

我们在类图中

用带箭头的虚线来表示一个对象

引用另外一个对象的服务

这里我们就可以看到

从面向对象到面向服务

其实是看待问题的

视角的一个切换

面向对象更强调在对象的内部

所封装的那些信息

所以它采用的是一些

信息建模的这样的角度

而面向服务

它更强调的是服务过程本身

强调的是功能

因此 我们可以看到

在信息系统或者软件系统中

对象和服务

是一个事物的两个方面

一个是静态的信息结构

一个是动态的操作流程

在这个系统的模型中

我们可以看到

一共有三个类被定义出来

首先是医生类

其次是住院病人

还有病例类

这三者之间

互相调用彼此的服务

来完成它们预期的功能

比如医生对外提供的服务

是体检和出体检报告

而住院病人他对外提供的

是看病和做体检

这里实际上看病和体检

是由这个病人发出的

要用到医生相应服务

才能完成的一个服务

因此我们可以看到

医生和住院病人

他们彼此使用对方的服务

来合作完成看病体检等

系统的功能

而病历作为一个实体对象

它主要是一个信息的载体

医生对象需要调用

病例对象的取数据服务

来访问他所关注的

患者的就诊记录

以及检查结果等等

在住院病人和病历之间的

这条实线

它表明的是

病例和祝住院病人之间

存在一个关联关系

住院病人

他都有对应的病例

通过上述的简单介绍

我们知道面向对象的分析方法学

最主要的任务

首先是识别对象和类

在领域中找出类和对象

给出它们的抽象的定义

识别类之间的关系

建立由继承和组合关系

组成的类层次结构

之后就是定义主题

主题是用来将对象模型

组织成多个抽象层次或视角的

这样的一个概念

主要是通过继承关系

或者整体部分关系

联系起来的一系列的类

通常都是属于同一个主题的

我们用主题来划分领域中的

关注的不同的点

识别每个对象内部的属性信息

并把它赋予到

相应的抽象层次的类

就是我们建模的重点之一

在定义了属性之后

我们再为每个对象类

去定义相应的公共的服务

这样

我们就完成了面向对象的

分析的主要的步骤

面向对象分析方法的

局限性在于

我们最初希望采用

面向对象的思路

能够更早的进入分析和设计环节

这一初衷

往往因为分析阶段的概念

和设计阶段的概念无法对齐

而无法实现

我们在面向对象分析中

所能够沉淀下来的

最有用的对象

就是对领域实体对象的建模

这些领域实体对象

可以在后续的系统设计和实现中

沉淀为一或多个实体对象的保存

这是在我们做面向对象分析中

最有用的部分

在面对一个具体的

现实世界的问题的时候

我们应该很好的评估

对象 关系 服务等概念

是建模我们现实问题的

业务流程的最好的元素与否

当判断为是的时候

我们就可以采用

面向对象的分析方法

当感觉不适用的时候

我们就要转换方法学

去采用最适用的方法

正如我刚刚说到的

大家在后续的学习过程中

其实还经常会看到

面向对象分析的

对同一件事物的不同的叫法

我给出了一个常用术语的对照表

让大家能够对它们之间的语义

有一个很好的认识

其中最主要的就是我们知道

对象和实例

它是指的同一个东西

一般特殊关系和继承关系

是同样的

以及泛化关系

这几个是同样含义的

组成关系和整体部分关系

聚合关系

它们又是具有语义上是可替代的

消息和刺激以及事件

这几者它代表的含义是类似的

服务和操作这二者之间

表达的是同样的含义

主题或者视角

这两者又是可以互相替换的

情景这里和用例的关系

是一个抽象定义的

模板和实例的关系

在前边用例学习的过程中

大家已经了解了

另外就是参与者的概念

在有的方法中

也把它叫做用户

软件工程课程列表:

第1章 初识软件工程

-1.1 软件无处不在

--讲课视频

-1.2 软件的本质特性

--讲授视频

-1.3 软件工程的产生与发展

--讲授视频

-1.4 软件工程的基本概念

--讲授视频

-1.5 软件质量实现

--讲授视频

-1.6 业界人士谈软件工程

--海芯科技创始人施侃乐访谈

-测验题--作业

-讨论题

--讨论题

-作业题

--第一张 作业题

第2章 编写高质量代码

-2.1 编程过程与规范

--讲课视频

-2.2 良好的编程实践

--讲课视频

-2.3 Python集成开发环境

--讲课视频

-2.4 代码静态检查

--讲课视频

-2.5 代码性能分析

--讲课视频

-2.6 结对编程实践

--讲课视频

-2.7 刘贺谈软件工程

--讲课视频

--讨论

-测验题--作业

-作业题

--第二章 作业题

第3章 单元测试

-3.1 单元测试概述

--讲课视频

-3.2 黑盒测试方法

--黑盒测试方法

-3.3 白盒测试方法

--基本概念

--代码覆盖标准

--基本路径测试

-3.4 单元测试工具

--单元测试工具

--html

-测验题--作业

-作业题

--第三章 作业题

--作业题附件

第4章 软件开发过程

-4.1 软件过程

--讲课视频

-4.2 软件过程模型

--讲课视频

-4.3 敏捷开发过程

--讲课视频

-4.4 微软公司开发过程

--邹欣经理自我介绍

--微软开发过程之一

--微软开发过程之二

-测验题--作业

第5章 团队开发管理

-5.1 团队组织与管理

--讲课视频

-5.2 项目沟通管理

--讲课视频

-5.3 软件项目计划

--讲课视频

-5.4 软件项目估算

--讲课视频

-测验题--作业

-讨论题

--讨论

第6章 敏捷开发与配置管理

-6.1 敏捷开发之Scrum

-- 敏捷开发之Scrum

--html

-6.2 用户故事与估算

--讲课视频

-6.3 团队协作工具Tower

--Tower工具介绍(1)

--Tower工具介绍(2)

-6.4 配置管理

--讲课视频

-6.5 配置管理工具Git

--讲课视频

-测验题--作业

-作业题--作业

第7章 需求获取

-7.1 需求工程师

--讲课视频

-7.2 需求定义

--讲课视频

-7.3 需求的类型

--讲课视频

--讲课视频(2)

-7.4 需求工程过程

--讲课视频

-7.5 需求的主要来源

--讲课视频

-7.6 需求获取技术

--讲课视频

--讲课视频二

--讲课视频三

-7.7 撰写需求文档

--讲课视频

-测验题--作业

-讨论题

--讨论

第8章 用例建模

-8.1 用例建模概念

--讲课视频

-8.2 用例建模过程

--讲课视频

-8.3 用例建模精讲

--讲课视频

-8.4 建模工具介绍

--讲课视频

-8.5 微信抢票应用案例

--讲课视频

-测验题--作业

-讨论题

--讨论

第9章 面向对象分析与设计

-9.1 面向对象分析

--讲课视频

-9.2 CRC卡片分拣法

--讲课视频-1

--讲课视频-2

-9.3 面向对象设计

--讲课视频-1

--讲课视频-2

-9.4 类图建模

--讲课视频-1

--讲课视频-2

-第9章 面向对象分析与设计--测验题

-讨论题

--讨论

第10章 行为建模

-10.1 顺序图概念

--讲课视频

-10.2 顺序图建模

--讲课视频

-10.3 顺序图风格

--讲义视频

-10.4 状态建模

--讲课视频

-10.5 状态图

--讲课视频

-10.6 状态图精讲

--讲义视频

-测验题--作业

-讨论题

--讨论

第11章 软件系统设计

-11.1 软件体系结构概念

--讲授视频

-11.2 软件设计原则

--讲授视频

-11.3 软件体系结构风格(一)

--讲授视频

-11.4 软件体系结构风格(二)

--讲授视频

-11.5 软件体系结构风格(三)

--讲授视频

-11.6 软件设计过程

--讲授视频

-11.7 Web系统架构设计

--讲授视频

-11.8 数据库选择策略

--讲授视频

-测验题--作业

-作业题

--html

--html

--html

-作业题--作业

第12章 软件交互设计

-12.1 交互设计概述

--讲授视频

-12.2 交互设计目标

--讲授视频

-12.3 GUI设计原则

--讲课视频

-12.4 KLM效率模型

--Video

-12.5 Fitts定律

--讲授视频

-12.6 交互设计过程

--讲授视频

-测验题--作业

第13章 软件系统测试

-13.1 软件测试概念

--讲课视频

-13.2 软件测试类型

--讲课视频

-13.3 软件功能测试

--讲课视频

-13.4 软件性能测试

--讲课视频

-测验题--作业

第14章 软件交付与维护

-14.1 软件部署与交付

--讲课视频

-14.2 软件演化与维护

--讲课视频

-测验题--作业

第15章 期末考试与总结

-第一部分:基础知识

-第二部分:编程与测试(选做)

--编程与测试(选做)

讲课视频笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。