当前课程知识点:软件工程与软件自动化 >  第四章 对象模型分析 >  4.3 对象模型之二 >  授课视频1/2

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

授课视频1/2在线视频

下一节:授课视频2/2

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

授课视频1/2课程教案、知识点、字幕

大家好,下面我们继续讨论这个案例

在这个案例当中我们讨论到业务逻辑当中的

如何确定对象的职责

这一点是非常重要的

首先来看一看

确定对象职责

实际上我们也可以看到

如何来确定对象职责

还是我们说的,谁在什么地方干了什么事儿

这事儿,刚才分了,分实际物体与事务

谁在什么地方干了什么事

来看一看

确定职责的时候我们要看一看

谁,我们前面确定了两个类

一个是个人,就是person,包括个人的基本信息

还有收银员,就是角色

确定某个对象的职责的时候

一般问三个问题就可以确定它的职责

这里所谓的职责我们也认为包括了它的属性

我知道什么?我指的就是这个对象

对每个对象要确定职责的时候

我就问它我知道什么?我知道谁?

我做什么?注意,我知道什么?

这个问题主要就是为了解决类的基本属性

所谓的基本属性就是整型、浮点型、字符串

这些语言工具当中支持的内置类型

我知道谁,这个谁指的是其他对象

也就是说,这个问非常关键

这个对象知道其他什么对象

这是一个Do型职责和Know型职责

进行确定的一个非常重要的问题

然后确定我做什么

我做什么,实际上就是它的一个成员函数

比如问这个人

我知道什么

我记录这个人的姓名、住址、电话号码

以及其他的基本信息

都是基本类型就能解决的

这个“个人”我知道谁

我知道收银员

所以说在个人里面,有可能在编程的时候

大家想象一下,在它的属性里面

可能有一个收银员这个对象

这个对象可以是一个对象变量

指向这个收银员对象

我做什么,这里面

我们仅仅提供了它的一个实体属性

就是说它是一个实体类

本身这个person也不干什么

或者是现在以我们的理解还不够深入

那可以暂时不写我做什么

不太明确,那就空着

将来在迭代的时候

再补上

好了,按着这个思路,对每个问题

都问这三个问题

收银员能干什么呢?

我知道什么呢?我知道谁呢

通过这种方式我可以确定收银员的

比如说收银员登录的时候,有一个工号

用工号登陆,有密码

刚才提到了收银员要包括收银主管

通过一个level,一个授权级别来识别

收银员还知道谁呢?

收银员除了知道这个个人之外

他还知道session,前面也提到了

一个收银员登录进来之后

会开启一个新的对话

记录下这个收银员的整个工作过程

按照这种思路,我们进一步地来看

谁在什么地方干了什么事

商店,商店对象知道什么

知道谁,然后它能干什么

如果说商店对象是一个地点对象

它是个容器,容器自然包括

这里面的一些实体的类

它能做什么?因为商店是一个容器

我们很多统计的这些职责

都可以交给商店来做

比如说扫描条形码获取价格信息

这件事情是一个通用的职责

就可以把它放到商店这个类里面

根据二维码获取上面的信息

根据收银员的ID来获取收银员的信息

我知道谁?就是

根据我们的类图

就知道它和哪些类之间有连线

在将来编程实现的时候

就可能以一种成员变量的形式存在

好,地点讨论完了。那我们讨论什么呀?

实际的物体

实际物体当中非常重要的就是商品类

我们给出了一些商品的基本的信息

我知道什么,比如商品的编号,商品的描述

以及厂家等等

这里想像一下,商品的价格

如果你考虑商品价格作为商品的一个基本字段

比如有一个float浮点型来表示这个商品的价格

它能不能满足用户的需求

或者是将来需求的变更呢?

比如说,商品国庆大促销要降价

国庆之后价格要恢复

各种各样的促销降价活动

要求有很多价格

这时候一个float字段

肯定没有办法来保留这么多的价格信息

所以说,就把价格单独拿出来

生成一个新的类

这个类,和商品类形成一个一对多的关系

这是通过对商品进一步的分析

我们发现了一些所谓的附加对象

就是说价格,促销价格

可以有多种多样的促销价格

促销价格里面可能有一些有效期等等

这部分需要大家进一步在设计的时候

要静下心来根据用户的需求

以及将来可能的需求变更

来发现新的对象

对原有的对象进行调整

这是类的这种实际物体的职责

下面除了实际的物体,还有事务

这个事务,前面提到了销售

销售是一个很重要的事务类

它是个动词,要记录下整个动作发生的时间

日期时间,通过这个销售

还要计算、小计、计税以及最后保存提交等等

我们看销售单项,销售单项里面

前面提到了退货的问题

这时候可以进一步来看

如果我们设计成退货,是派生自销售

这里面有一些字段需要补充

比如说,退货时候的价格

销售时候的价格

销售的日期

退货的原因等等

支付这个比较容易设计

它是比较典型的一个泛化关系

我们还可以进一步地把它拆解成

需要认证的和不需要认证的这种支付方式

这是整个事务,还有一个事务就是session

session比较重要,要记录下整个登录的

开始时间、开始日期

结束时间和结束日期

还可以统计每个收银员

在这次销售当中他卖了多少东西等等

这里面有很多的How many、 How much这种职责

但这些职责比较多,需要跟客户一一地确认

在前期,这个职责可以暂时地放在这

这是我们讨论的这种职责

确定它的职责

确定职责实际上就丰富和完善了

我们面向对象整个类图里面的类及其相互关系

这时单个职责确定完之后

还有一些职责

它和一般职责不一样

不一样的意思是说

有的职责不是由一个类来承担

而是由整体来承担的

比如说这里提到的集合与成员

什么意思?

比如说我们来看这个参与者—事务

就是说谁干了什么事

要进行统计的时候

就是说想要知道在某一段时间内

某个收银员他收了多少钱

他卖了多少东西

这是谁干了什么事,用于统计的

事务与事务单项

就是前面提到的销售和销售单项

它用于统计,小计即subtotal

项目与单项统计某一种商品

在一段时间内的销售量

从这里面看得出来

所谓的这种整体的职责

并不是由一个类来完成的

所以说,要把它放到

所有对象的这种职责当中去

经过这样的分析

我们发现类图更加完善了

每个类,它里面的属性

主要的属性已经出现

它的主要方法也出现了,尤其是对象之间

对象就是我知道谁,它干什么

就更加明确,确定了这个职责之后

下一步可以通过序列图

来确定它应该是按照什么样的流程来做

在整个销售过程当中

每个对象和其他对象之间的协作关系

发送消息的次序等等

已经涉及到了一些性能的要求

在这个场景当中都可以体现

大家注意,这里展示的表达方式

是在UML之前的版本当中表达的

采用什么样的符号并不重要

重要的是我们的大脑对整个事件的认知

对一个模型的表达

在这里还可以使用设计模式

来进一步地优化和确认

整个的类间关系和类的职责

比如说我们通过这样一个原型系统

通过界面,通过商品的ID和它的数量

然后把这个消息传递给接口层

接口层通过业务逻辑层的分发机制

发送给不同的控制器

从而完成整个系统的流转

好,这是我们讨论的问题域

软件工程与软件自动化课程列表:

第一章 软件工程基础

-1.1 软件工程的前生今世

--开篇阅读

--授课视频

-第一章 软件工程基础--1.1 软件工程的前生今世

-1.2 万变不离其宗

--授课视频1/3

--授课视频2/3

--授课视频3/3

-第一章 软件工程基础--1.2 万变不离其宗

-1.3 唯一不变的是变化

--授课视频1/3

--授课视频2/3

--授课视频3/3

--外部链接

-第一章 软件工程基础--1.3 唯一不变的是变化

-1.4 亡羊补牢为时不晚

--授课视频1/2

--授课视频2/2

-第一章 软件工程基础--1.4 亡羊补牢为时不晚

-扩展阅读与话题讨论

--扩展阅读

--话题讨论

第二章 敏捷开发

-2.1 方法论来源于恐惧

--授课视频

-第二章 敏捷开发--2.1 方法论来源于恐惧

-2.2 敏捷是什么

--授课视频

-第二章 敏捷开发--2.2 敏捷是什么

-2.3 典型敏捷开发方法

--SCRUM敏捷开发方法

--XP敏捷开发方法

-第二章 敏捷开发--2.3 典型敏捷开发方法

-2.4 敏捷不是万能药

--授课视频

-第二章 敏捷开发--2.4 敏捷不是万能药

-专家谈敏捷

--专家谈敏捷开发方法

-扩展阅读与话题讨论

--外部链接

--话题讨论

第三章 OO与UML

-3.1 面向对象核心概念和基本特性

--核心概念与基本特性

-第三章 OO与UML--3.1 面向对象核心概念和基本特性

-3.2 面向对象设计基本原则

--面向对象设计基本原则

-第三章 OO与UML--3.2 面向对象设计基本原则

-3.3 通用职责分配模式(GRASP)

--通用职责分配模式

-3.3 通用职责分配模式(GRASP)--作业

-3.4 从重构到模式

--模式和设计模式

-第三章 OO与UML--3.4 从重构到模式

-3.5 使用UML设计面向对象系统

--UML综述

-第三章 OO与UML--3.5 使用UML设计面向对象系统

-3.6 主要UML模型图绘制技巧

--UML用例图

--UML类图

--UML序列图绘制技巧

-第三章 OO与UML--3.6 主要UML模型图绘制技巧

-扩展阅读与话题讨论

--设计模式有毒么?

--话题讨论

第四章 对象模型分析

-4.1 案例简介

--书籍参考

--案例说明

-4.2 对象模型之一

--授课视频1/2

--授课视频2/2

-第四章 对象模型分析--4.2 对象模型之一

-4.3 对象模型之二

--授课视频1/2

--授课视频2/2

-第四章 对象模型分析--4.3 对象模型之二

-4.4 对象模型之交互

--授课视频

-第四章 对象模型分析--4.4 对象模型之交互

-扩展阅读与话题讨论

--图书推荐

--话题讨论

第五章 软件自动化技术

-5.1 软件自动化概述

--软件自动化概述

-第五章 软件自动化技术--5.1 软件自动化概述

-5.2 典型自动化方法和工具

--典型自动化工具视频

-第五章 软件自动化技术--5.2 典型自动化方法和工具

-5.3 文档自动化

--文档自动化视频

-第五章 软件自动化技术--5.3 文档自动化

-5.4 测试自动化

--测试自动化视频

--白盒测试工具VU的示例演示片段(版权属原作者)

--功能和性能自动化测试工具及简单应用演示

-第五章 软件自动化技术--5.4 测试自动化

-专家访谈

--北京理工大学刘辉教授谈软件自动化新进展

-扩展阅读与话题讨论

--各个开发阶段最流行的Java工具汇总

--话题讨论

第六章 CI/CD与DevOps

-6.1 持续集成

--持续集成视频1/2

--持续集成视频2/2

-第六章 CI/CD与DevOps--6.1 持续集成

-6.2 持续交付和部署

--持续交付和持续部署

-第六章 CI/CD与DevOps--6.2 持续交付和部署

-6.3 DevOps

--DevOps授课视频

-第六章 CI/CD与DevOps--6.3 DevOps

-专家访谈

--卓睿科技总架构师带来的精彩访谈

-扩展阅读与话题讨论

--DevOps专题

--话题讨论

第七章 软件质量保证

-7.1 质量和质量保证

--授课视频

-第七章 软件质量保证--7.1 质量和质量保证

-7.2 软件质量模型

--授课视频

-第七章 软件质量保证--7.2 软件质量模型

-7.3 SQA组织与职责

--授课视频

-第七章 软件质量保证--7.3 SQA组织与职责

-7.4 全面软件质量管理

--授课视频

-第七章 软件质量保证--7.4 全面软件质量管理

-专家访谈

--专家访谈

-扩展阅读与话题讨论

--外部链接

--话题讨论

第八章 软件过程改进

-8.1 软件过程综述

--授课视频

-第八章 软件过程改进--8.1 软件过程综述

-8.2 软件过程改进

--授课视频

-第八章 软件过程改进--8.2 软件过程改进

-8.3 能力成熟度模型

--授课视频

-第八章 软件过程改进--8.3 能力成熟度模型

-8.4 过程改进标准框架

--授课视频

-第八章 软件过程改进--8.4 过程改进标准框架

-扩展阅读与话题讨论

--敏捷和CMM矛盾么?

--话题讨论

第九章 软件复用

-9.1软件复用综述

--授课视频

-第九章 软件复用--9.1软件复用综述

-9.2 软件构件技术

--授课视频

-第九章 软件复用--9.2 软件构件技术

-9.3 软件复用实施

--授课视频

-第九章 软件复用--9.3 软件复用实施

-9.4 微服务架构

--授课视频

-第九章 软件复用--9.4 微服务架构

-扩展阅读与话题讨论

--微服务扩展

--话题讨论

文档提交处

-文档提交处--文档提交

授课视频1/2笔记与讨论

也许你还感兴趣的课程:

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