当前课程知识点:软件工程 >  第9章 面向对象分析与设计 >  9.2 CRC卡片分拣法 >  讲课视频-1

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

讲课视频-1在线视频

下一节:讲课视频-2

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

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

CRC卡片分拣法

是从文档中提取类定义的

最常用方法之一

通过CRC卡片分拣的过程

我们可以了解

类的识别和类的定义的内容

最主要的方面

我们寻找类

可以采用CRC卡片分拣法

可以在用例描述中

找出相应的名词候选类

也可以根据后边

我们在设计过程中

边界类 控制类 实体类型的划分

来发现系统中的类

设计和分析模式

也可以帮我们去补全

我们所遗漏掉的类

许许多多的方法但是最主要的是

我们要对待解决的问题

有一个充分的分析之后

把其中关键的信息实体寻找出来

我们就从一个例子说起

假定我们要编写一个

21点游戏的程序

这个时候客户来到你面前

交给你一份详细的问题描述

也就是一份21点

游戏的规则说明

那么在我们开始设计

这个系统之前

我们先要看看

在这个游戏的过程中

有哪些关键的类

这些类的职责是什么

类与类之间的交互行为是什么

21点游戏的目标

是玩家要获得点数

最接近或者等于21的手牌

他要赢过庄家手牌的点数

并且不能超过21点

无论桌上有几名玩家

玩家都只是和庄家之间论输赢的

在21点游戏中

2-10的数字牌

其点数就等于牌面数值

A的点数根据玩家的需要

可以选取1或者11

JQK的点数都是10

游戏的开始玩家首先下注

下注的额度

一般是有一个上限的

如果你是桌上唯一的玩家

在下注之后

庄家就会给你发两张牌

牌面向上

双方均能看到

庄家给自己发两张牌

一张牌面向下

一张牌面向上

向下的称为底牌 向上的是明牌

当有多个玩家的时候

庄家给每位玩家

都是先发一张明牌

给自己发一张底牌

再给每个玩家和庄家

各发一张明牌

发完前两张牌之后

每位玩家自己决定

是否还需要更多的牌

当对手上的牌数满意之后

就停手等待

停手之后庄家可以继续加牌

但是不能超过21点

当你的手牌点数

超过庄家时 你赢

当你的手牌点数不及庄家时

庄家赢

玩家赢的情况

包括你的手牌点数超过庄家

且不超过21点

庄家冒过21点

庄家和玩家点数持平的时候

不输不赢

庄家退还玩家的赌注

玩家输的情况就是

玩家抓冒了21点

CRC卡片分拣法

中间包括三个要素

第一个C代表的是类 Class

第二个R

代表的是Responsibilities

表示类的职责的定义

第三个字母C

代表的是Collaborations

表示的是

类与类之间的交互关系

CRC卡片

就是如图中这样的一个表格卡片

它把三个部分分别列出来

首先我们要提取的是类的定义

然后 再给当前定义的这个类

寻找它应该完成的职责

以及和它有交互关系的

其它的类

CRC卡片相当于是

把我们在问题描述中

得到的相关的类都能够找出来

并且定义它的职责

和类与类之间的交互关系

我们下面就来看一看

CRC卡片分拣法的过程

由于类对象

通常定义的是一个命名的实体

是用名词表达

因此 我们在分析文档的时候

就先从名词开始

在这个过程中

我们要注意的是

不要想一下子把所有的类

都找对

而是把所有可能的候选的类

都先提取出来

再逐一筛选

那么都有哪些东西

可以定义为对象

对象几乎是无处不在的

它可以是外部实体

和建模中的系统存在交互

无论他是人 设备

还是其它的系统

都可以定义为对象

它也可以是建模的应用领域中

存在的某种实体事物

比如报表 信号 文字输出等等

它还可以是一个动态的

发生的动作 事件

系统上下文中发生的资源的传递

控制命令的发出等等

只要是我们关注的那些活动

也可以作为对象来定义

在应用领域的组织上下文中

出现的由系统交互的

人扮演的那些角色

以及系统所管理的

相关的组织单元的分支机构

群组 团队

以及我们所关注的

要记录其属性的相关位置

地点等信息

以及在系统中我们要关注的

组合体

比如传感器 车辆 计算机等等

这些都可以用对象来封装

关注它的属性和行为

因此

把它定义为应用领域中的对象

那么不能定义为对象的事物

主要是两个方面

那就是在对象内部封装的

单一的属性或者是要把它归结为

某个对象的操作的那些过程

比如打印 转换等等

不把这些两者定义为对象

是因为它是对象的组成部分

下面我们就回到

刚刚给大家介绍的

21点游戏的问题描述中

过滤出我们认为关键的

那些主要的名词或者名词短语

比如对这段描述

我们过滤出的名词包括

手牌 庄家 玩家 数字牌 点数

A J Q K等

从这一页的描述中

我们过滤出来的是

赌注 上限 底牌 明牌

在这一页中

我们没有发现新的名词

因此 我们就继续后边的过程

用刚刚介绍的

扫描名词的方法

我们得到了这些对象类

游戏 21点 庄家 玩家 牌

牌堆 手牌 点数 花色 赢家

A 数字牌 J Q K 赌注等等

下面我们就要采用一定的方法

从这些候选位中

找出我们真正想要定义的

那些实体类

那么类筛选的原则是什么

首先 我们要在候选类中

排出以下的这些类

首先就是

超出问题关注的范围的那些类

指代整个系统的类

功能上有所重复的或者过于含混

过于具体的类

在刚刚的我们的列表中

很明显21点和游戏

都是指代整个系统的类过于庞大

没有实际的应用

因此 我们可以把它筛掉

J Q K A这些都是非常具体的类

因此 我们也可以把它筛掉

在筛掉的初步的一些无关类之后

我们可以去进一步的去问自己

这些问题

首先 关于剩下的这个类

我们的系统需要保存

它的相关信息

它是不是对外提供某些服务

它的是不是有多个属性

类的属性是不是

由它所有的实力对象所共享

操作 是不是也是

被它所有的实力对象共享

它是一个外部实体吗

我们要不要用到它的信息

通过这样的一些问答的思维方式

我们就可以得到

我们真正想要的那些系统类

好 经过刚刚的这样的

一个筛选过程

我们就得到了最后想要的这些类

我们筛选掉的包括

代表整个系统的游戏和21点

两个候选类

以及过于具体的

A K Q J 数字牌等等

这些过于具体的类

还有只有单个属性的这样的类

点数 花色 赢家等

其中花色

因为在21点游戏中

我们并不十分关注

因此

我们既可以把它建模为一个属性

也可以忽略掉

由此我们得到了剩下的六个

真正想要的候选实体类

软件工程课程列表:

第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章 期末考试与总结

-第一部分:基础知识

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

--编程与测试(选做)

讲课视频-1笔记与讨论

也许你还感兴趣的课程:

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