https://github.com/shewhowasborngood/wordChaingit
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
· Estimate | · 估计这个任务须要多少时间 | 40 | 35 |
Development | 开发 | ||
· Analysis | · 需求分析(包括学习新技术) | 280 | 450 |
· Design Spec | · 生成设计文档 | 35 | 0 |
· Design Review | · 设计复审(和同事审核设计文档) | 20 | 0 |
· Coding Standard | · 代码规范(为目前的开发制定合适的规范) | 10 | 30 |
· Design | · 具体设计 | 90 | 150 |
· Coding | · 具体编码 | 450 | 660 |
· Code Review | · 代码复审 | 160 | 90 |
· Test | · 测试(自我测试,修改代码。提交修改) | 300 | 500 |
Reporting | 报告 | ||
· Test Report | · 测试报告 | 60 | 70 |
· Size Measurement | · 计算工做量 | 20 | 30 |
· Postmortem & Process Improvement Plan | · 过后总结,并提出过程改进计划 | 15 | 0 |
合计 | 1480 | 2015 |
Information Hidinggithub
信息隐藏是用来保护程序,以减少设计决策的改变对程序带来的影响。保护涉及提供稳定的接口,使算法
用编程语言功能或显式导出策略来阻止客户端访问类或软件组件的某些方面。在编程过程当中,将多个编程
定义为public接口的函数进行封装,仅对使用者开放指定的函数调用接口,从而让使用者不能随意的数组
调用和修改核心部分程序,避免不当的使用给程序带来的麻烦。例如在咱们的程序中,设计一个类,编程语言
在里面定义可让用户调用的接口,将其余底层函数保护起来。在程序计算过程当中,若是不进行封函数
装,用户就能够随意修改变量致使程序以及计算结果的不稳定。性能
算法描述学习
采用面向对象的设计思想,运用动态规划的方法,不断的拆分数组,以寻找符合要求的,再将若干个目标合并。测试
类的介绍
计算模块的类包括Wordlist类、Word类和List的模板类
Wordlist类:处理读取的单词表,生成目标单词链
Word类:存储单词及单词的相关信息(首尾字母,单词长度)
List的模板类:提供链表的基本方法
关键算法
在Wordlist类里的getwordchain函数是实现最大子链功能的部分,排除找到目标尾部、子
链为空、子链中没有符合要求的单词这几个终止递归的状况外,单词表中剩下的单词要进入
递归进行进一步的查找:若是找到了可链接单词,在链表中删除该单词,而后在剩下单词组
成的新链表中递归查找最长单词串;接着找到子链表中的最大子链,并比较,选择更大的一
个;一直进行递归调用直到子链中没有符合要求的单词,则返回最大子链(当最大子链不存
在,返回空链表)。
能够经过改进部分算法减小递归次数:在递归开始前遍历全部单词,标记出尾字母没有任何
对应的单词的首字母的单词,能够下降一些复杂度
通常来讲,在面向对象技术中,咱们认为“接口”是惟一重要的东西,接口定义了组件,接口
肯定了系统,接口是面向对象中咱们惟一须要关心的东西,接口不只是必要的,并且是充分
的。然而,契约观念提醒咱们,仅仅有接口还不充分,仅仅经过接口还不足以传达足够的信
息, 为了正确使用接口,必须考虑契约。只有考虑契约,才可能实现面向对象的目标:可靠
性、可扩展性和可复用性。
在软件体系中,程序库和组件库被类比为server,而使用程序库、组件库的程序被视为
client。根据这种C/S关系,咱们每每对库程序和组件的质量提出很严苛的要求,强迫它们承
担本不该该由它们来承担的责任,而过度纵容client一方,甚至要求库程序去处理明显因为
client错误形成的困境。客观上致使程序库和组件库的设计和编写异常困难,并且质量隐患
反而更多;同时client一方代码大多松散随意,质量低劣。引入契约观念以后,这种C/S关系
被打破,你们都是平等的,你须要我正确提供服务,那么你必须知足我提出的条件,不然我
没有义务“排除万难”地保证完成任务。
在不容许出现环状况下出现了环,报错退出
命令行参数不符合规定的,不响应
在命令行输入-h -t时,若后面出现的不是单个字母,默认读首字母
文件没法打开时,报错退出
直接在main函数里实现,对每一个命令行参数进行判断,并对应不一样处理
经过传参的方式,在计算模块中把对应参数传递进去