作业信息
教学班级:周五班
项目地址:https://github.com/buaddd/buaa_SE_2022_Pair_Program
PSP表格
Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
计划 | 60 | 120 |
估计这个任务需要多少时间 | 30 | 30 |
开发 | 1200 | 1500 |
需求分析 (包括学习新技术) | 180 | 120 |
生成设计文档 | 180 | 120 |
设计复审 (和同事审核设计文档) | 30 | 60 |
代码规范 (为目前的开发制定合适的规范) | 30 | 60 |
具体设计 | 180 | 180 |
具体编码 | 600 | 600 |
代码复审 | 180 | 120 |
测试(自我测试,修改代码,提交修改) | 300 | 300 |
报告 | 180 | 180 |
测试报告 | 120 | 120 |
计算工作量 | 30 | 60 |
事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 56 * 60 | 60.5 * 60 |
项目设计与实现
项目结构与UML图
输入输出,建图,异常检查
本项目采用面对对象的思路进行设计,将不同的部分封装成不同类,结构如下所示
- MyIO: 负责文件的读取与计算结果的输出,保存读入的所有字符串
- Node, Word_vertex: 分别针对不允许环路与允许环路的情况,保存单词相关的信息,例如首尾的字母,后继节点等内容
- Generator:根据字符串与参数情况生成Node与Word_vertex对象,建图
- Checker: 进行环路检测,对于非-r的情况,如果检测到了环路,需要退出程序并报错
Core相关计算类
- Core: 封装本次作业的计算接口
- Node_chain_builder与Word_chain_builder: 负责构建单词链,使用graph中的信息,构建单词链
- Node_graph与Word_graph:保存所有节点,存储相关的信息,供生成者调用,辅助生成单词链
- Node_chain与Word_chain:存储计算得到的单词链结果
- Word_tarjan_vertex:代表计算过程中某一类Word_vertex的特殊情况
UML图
接口设计与实现
Information Hiding,Interface Design,Loose Coupling
- Information Hiding:类只开放对应的功能接口,但隐藏其数据和实现细节。
- Interface Design:一个好的接口设计可以使项目的结构更加条理有序。
- Loose Coupling:处理好类与类之间的通信,避免出现一个类直接出现在另一个类中来及进行数据的交换
计算模块接口的设计与实现过程
本次作业要实现的计算模块接口如下:
int gen_chain_word(char