作业要求地址 https://www.cnblogs.com/harry240/p/11524113.html
GitHub项目地址 https://github.com/Untrara/WordCount
合作同学地址 https://www.cnblogs.com/cyh0813/p/11645041.html
合作同学学号 201731031124

 

 

 

一、PSP表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30

 40

· Estimate

· 估计这个任务需要多少时间

 30

 40

Development

开发

1300

 1250

· Analysis

· 需求分析 (包括学习新技术)

 90

 80

· Design Spec

· 生成设计文档

 60

 50

· Design Review

· 设计复审 (和同事审核设计文档)

 60

 70

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 20

 20

· Design

· 具体设计

 300

 280

· Coding

· 具体编码

 350

 300

· Code Review

· 代码复审

 120

 130

· Test

· 测试(自我测试,修改代码,提交修改)

 300

 320

Reporting

报告

120

 125

· Test Report

· 测试报告

 40

 45

· Size Measurement

· 计算工作量

 20

 20

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 60

 60

 

合计

 1450

 1415

二、计算模块的设计与实现过程

  1.分析题目要求后,有三个难点需要解决

  1)命令行读入参数

  2)提取符合规则的单词

  3)统计单词出现次数,并需要按照字典序进行排列

  分别采用args[n],正则,以及Dictionary对象解决上述难点,将其余功能分类进行编写

结对编程(第四次作业)

   如上图所示,共设计了7个类,具体功能及对应类如下图所示:

结对编程(第四次作业)

  2.关键函数

   GetTen.cs:统计各个单词出现的次数,并按照数量的高低以及字典序进行排列,返回一个Dictionary的对象。

 结对编程(第四次作业)

  WordString.cs:利用正则表达式,帅选出符合规则的,正确的单词

结对编程(第四次作业)

  3.如何体现“Design by Contract”、“Information Hiding”、 “Interface Design”、 “Loose Coupling”等原则?

Design By Contract(契约式设计):
  按照某种规定对一些数据等作出约定,如果超出约定,程序将不再运行。一个契约设计,就是约束了某个方法调用的要求、以及返回的承诺。那么,设计在正确的输入下,能够得到正确的输出,否则程序将报错。

Information Hiding(信息隐藏)
  在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。

Interface Design(接口设计):
  对接口的名字,功能,接口与接口间的继承关系进行设计;好的接口设计可以增强代码可读性,易用性,可更改性。

  用规范的命名来设计接口的名字,对接口与接口之间的关系进行具体的设计,避免了接口的混乱。

Loose Coupling (松耦合)
  软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

  通过增加接口,根据方法功能增加分类的方式实现松耦合

三、部分代码实现

  1.统计字符串中所有字符总数

 1 public class CountWord
 2     {
 3         /// <summary>
 4         /// 统计字符串中所有字符总数
 5         /// </summary>
 6         /// <param name="text">要统计字符数的字符串</param>
 7         /// <returns>字符总个数</returns>
 8         public int charactersNum(string text)
 9         {
10             int ch = 0;
11             //\S——匹配任何非空白字符(除了空格、换行、制表符等的任何字符)
12             //|——匹配二选一
13             ch = Regex.Matches(text, @"[\S| ]").Count;
14             return ch;
15         }
16     }
View Code

相关文章: