3.面向对象程序分析和设计的基本方法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向过程的结构化程序设计
• (5)编写代码并调试
– 根据上述分析,创建工程、创建C文件和头文 件(程序模块)、编写和调试代码
• 演示:
– 实现“班级学生成绩管理”中的“班级学生录 入”和“学生成绩录入” – 实现“班级学生成绩统计分析”中的“统计平 均成绩”。
面向对象的软件分析
• 1. 用例分析
岗位职责三工作总结项目运维项目实施银青高速视频监控东毛隧道停车场项目全面实施ip设置贵州独平高速项目全面实施监控室机柜布线四心得体会在这段时间的学习过程中我对部门很多产品从零学起刚到公司的时候感觉压力很大经过这些时间的认真学习和实际操作调整心态现已完全能融入公司的各项岗位职责和管理制度中
C++面向对象程序设计
• 为什么要介绍
– 很多同学写软件时感到无从着手,就是缺乏一套基本的步骤。所以我们 要介绍最基本的分析和设计步骤。 – 提醒:仍然需要多实践,才能掌握。
• 介绍什么
– 很小型的软件开发时的一般步骤 – 分为两个大类介绍。前者是为了与后者进行对比。
• 面向过程的结构化程序设计 • 面向对象的分析和设计
面向过程的结构化程序设计
• (1)功能分析(需求分析):
– 使用框图。
学生成绩管理
学生成绩统计分析
班 级 学 生 录 入
学 生 成 绩 录 入
学 生 成 绩 查 询
保 存 学 生 成 绩
加 载 学 生 成 绩
学 生 成 绩 统 计 分 析
统 计 平 均 成 绩
统 计 及 格 率
统 计 优 良 率
学 生 成 绩 排 名
– C2:学生成绩录入
选择科目,输入学生学号和科目成绩。
– C3:学生成绩查询
输入学生学号,查询并显示该学生的学号、姓名、各科成绩。
– C4:保存学生成绩
将班级学生成绩保存在数据库或数据文件中
– C5:加载学生成绩
从数据库或数据文件中加载班级学生成绩
面向对象的软件分析
• (1)用例分析(续2)
– C6:学生成绩统计分析
• 这些功能作为控制类的成员函数。 • 控制类可以没有数据成员。
作业
• 使用面向对象的方法编写成绩管理。
– 设计文档:Word文档,包含前面讲的各步骤的 内容。 – 基本功能必须实现:录入学生、录入成绩、统 计平均成绩、菜单功能。其它选做。
班级学生成绩统计分析模块 ScoreAnalyze.c, ScoreAnalyze.h GetAverageScore() GetPassRatio() GetGoodRatio() SortByScore() ForEachStudent()
菜单模块 Menu.c, Menu.h MenuChoice
使用printf,scanf等实现。
面向过程的结构化程序设计
• (4)程序模块划分
– 一般按照功能分类,将相似的功能划分在一个程序模块(c文件和 头文件)中实现。 – 注意:程序模块中的功能实现为函数。 – 这个过程还可能发现一些共用的功能。例如图中红色的函数。
主模块 Main.c
班级学生成绩管理模块 ScoreManage.c, ScoreManage.h AddStudent() InputScore() GetScore() Save() Load() GetStudent()
– 5.4 学生成绩排名
• 功能描述:输入科目,按科目成绩排序,显示排名、姓名、学 号和科目成绩。
面向过程的结构化程序设计
• (2)数据分析
– 每个学生的相关信息使用结构体表示。 – 班级学生使用数组或链表表示。
面向过程的结构化程序设计
• (3)用户界面设计
– 文本界面,使用菜单选择需要的功能,并根据 选择分别调用不同的函数。 – 数据在界面的输入、输出:
• 成员:CStudent *Students;
– 组合关系:CClass中保存CStudent对象。
• 成员:CStudent Students[];
面向对象软件设计
• (3)用户界面设计
– 图形界面:使用图形窗口、菜单、控件等 – 文本界面:使用菜单选择所需功能。
• “菜单”可以作为一个对象:包括菜单选项,提供选择功能。
2.面向对象程序分析和设计的基本方法
Agenda
• 1. 回忆“成绩管理”的设计过程 • 2. 介绍OOP的分析思路
– 类组合的概念(类图) – UML的更多表示方法(协作图)
• 3. 实现OOP的成绩管理
– 多文档项目
小型程序的开发步骤
• 这是“软件工程”的内容
– 完整的软件开发过程分为很多步骤,如可行性分析、需求分析、概要设 计、详细设计,然后才是编程调试,最终是测试和部署。 – 需要有较多的实践经验后才能完全理解其中的理论和方法。
面向过程的结构化程序设计
• (1.1)各功能的描述
– 简单功能:文字描述即可。 – 复杂功能:画出流程图。 1. 班级学生录入 简单描述:输入学生姓名、学 号,保存。
开始
提示并输入姓名和学号
Y
该学号已存在?
Y N
保存学生信息
详细描述:见右图
是否继续录入?
N
结束
面向过程的结构化程序设计
• 2. 学生成绩录入
面向对象的软件分析
• (4)编写、调试代码
– 各类对应一个cpp和h文件,即一个模块。 – 需要一个提供main()函数的模块(cpp)。
后续分析
• 前面的设计方法还是带有面向过程的性质
– 在外部函数中实现的功能:
• • • • 录入学生信息 录入学生成绩 输入学生学号 等
– 可以将这些功能用一个“控制类”封装起来。
• 说明
– 我们介绍的不是非常正规的软件工程的步骤,仅为大家提供参考。
面向过程的结构化程序设计
• 可以分为五个步骤
– 功能分析:需要实现哪些功能。 – 数据分析:需要哪些数据类型,如何存储。 – 用户界面设计:使用什么样的界面。 – 程序模块划分:需要写哪些源代码文件,其中 具体包含哪些功能。 – 编写、调试代码。
• (2)对象模型分析
– 基本方法:
• 从用例描述中发现较为复杂的数据作为“候选对 象”。即考虑程序中可能使用哪些对象,以及它们 的数据组成。 • 将软件中的基本功能委托到各对象中。
– 根据上述分析,画出UML类图
面向对象的软件分析
• (2)对象模型分析(续)
– 需要哪些对象
• 候选对象(名词查找):班级,学生,姓名,学号,科目,成 绩。 • 姓名、学号、成绩等可以使用简单数据类型表示,不需要作为 对象。 • 剩余:班级、学生。
面向过程的结构化程序设计
• 5. 学生成绩统计分析
– 5.1 统计平均成绩
• 功能描述:输入科目,循环求和后平均,显示。
– 5.2 统计及格率
• 功能描述:输入科目,循环,累计及格人数,计算及格率,显 示。
– 5.3 统计优良率
• 功能描述:输入科目,循环,累计80分以上人数,计算优良率, 显示。
– 功能委托:
• 班级:添加学生、查询学生、保存和加载班级成绩、对班级成 绩进行统计分析。 • 学生:在前面的需求分析中,没有需要委托给学生的功能。
– 但如果增加:查询单个学生的平均成绩、不及格科目数(黄牌判 断)等,这些功能就应该委托给学生。 – 一般没有功能的不作为“对象”。这里“学生”可以用以前的 “结构体”表示。但考虑到系统功能扩展的可能性,还是将学生 作为对象。
功能描述: (1)选择科目 (2)输入学生学号和科目成绩
• 3. 学生成绩查询
功能描述: (1)输入学生学号 (2)根据学号在班级中查找学生 (3)显示该学生的学号、姓名、各科成绩
• 4. 保存Leabharlann 生成绩功能描述: 将班级学生成绩保存在数据库或数据文件中
• 5. 加载学生成绩
功能描述 从数据库或数据文件中加载班级学生成绩
面向对象的软件分析
• (2)对象模型分析(续2)
– 考虑到用户界面:需要菜单。
• 菜单需要保存选项,具有显示选项,接收用户选择的功能,因此应该 作为对象。
– 总结:系统中包括以下对象:
• 班级、学生、菜单
面向对象的软件分析
• (2)对象模型分析(续3)
– 上述类图没有正确表达对象之间的关系 – 聚合关系:CClass中保存CStudent对象的指针;
班级学生录入
<<include>>
统计平均成绩
学生成绩录入
<<include>> <<include>>
统计及格率
教师 学生成绩查询
学生成绩统计分析
<<include>>
统计优良率
学生
保存学生成绩
学生成绩排名
加载学生成绩
面向对象的软件分析
• (1)用例分析(续)
– C1:班级学生录入
输入并保存班级中各个学生的姓名、学号、性别等。
• C6.1统计平均成绩
输入科目,循环求和后平均,显示
• C6.2统计及格率
输入科目,循环,累计及格人数,计算及格率,显示。
• C6.1统计平均成绩
输入科目,循环,累计80分以上人数,计算优良率,显示。
• C6.1统计平均成绩
输入科目,按科目成绩排序,显示排名、姓名、学号和科目 成绩。
面向对象的软件分析
– 对应与面向过程的功能分析
• 2. 对象模型分析
– 包含面向过程的数据分析,自然形成程序模块 划分。
• 3. 用户界面设计
– 面向过程时:分析使用什么样的函数。 – 面向对象时:分析应该使用什么对象(类)。
• 4. 编写、调试代码。
面向对象的软件分析
• (1)用例分析(需求分析)
本质上还是软件功能分析。但使用“UML用例图”。 对每个用例进行文字描述。复杂的使用”UML活动图“描述。