2020软件工程-结对项目作业
1. 项目简介
github链接
- https://github.com/CapFreddy/SoftwareEngineering_HW1
- 教学班级:周五班 006
项目 | 内容 |
---|---|
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ |
这个作业的要求在哪里 | https://edu.cnblogs.com/campus/buaa/BUAA_SE_2020_LJ/homework/10466) |
我在这个课程的目标是 | 提升软件开发能力 |
这个作业在哪个具体方面帮助我实现目标 | 提升了个人编程能力, 测试和提升代码性能的能力 |
2. PSP时间花费
PSP2.1 | Personal SoftWare Process Stages | 预计耗时 | 实际耗时 |
---|---|---|---|
Planning | 计划 | 120 | 60 |
Estimte | 估计这个任务需要多少时间 | 1800 | 1700 |
Development | 开发 | 1100 | 1000 |
Analysis | 需求分析 | 0 | 0 |
Desing Spaec | 生成设计文档 | 100 | 40 |
Design Review | 设计复审 | 100 | 10 |
Coding Standard | 代码规范 | 0 | 0 |
Design | 具体设计 | 60 | 40 |
Coding | 具体编码 | 1100 | 180 |
Code Review | 代码复审 | 60 | 60 |
Test | 测试 | 180 | 180 |
Reporting | 报告 | 100 | 120 |
Test Report | 测试报告 | 0 | 0 |
Size Measurement | 计算工作量 | 5 | 0 |
Postmortem & Process Improvement | 事后总结 | 60 | 50 |
- | 合计 | 1800 | 1700 |
3. 接口设计
经过查阅资料和学习, 我了解到在接口设计中有常用的一些原则, 本次作业的设计中, 我们用到了这些原则。
-
单一职责原则
Single Responsibility Principle: There shuld never be more than one reason for class to change
单一职责原则要求一个接口, 一个功能, 如果在private 方法和public接口中, 改动过多, 那么容易引起错误。 在结对编程的设计中, 计算模块里我们尽量保证一个函数只做一个事情, 比如Line Circle Point分出三个类, 每个求交点的函数只处理一种类型等。
-
里氏替换原则
Liskov Substitution Principle: Functions that use pointers or references to base classed must be able to use objecsts of derived classes without knowing it
这一法则是多态的体现, 所有父指针的使用点都可以用子指针, 这要求了子类只扩展父类, 但是不可以用在覆写父类函数的时候让函数的应用范围减少。 在最初的版本中, 我们采用了Line Circle继承父类的方式实现, 后来发现这种继承影响性能, 就放弃了继承。
-
依赖倒置原则
依赖倒转原则是TDD测试驱动开发的体现, 要求高层模块不依赖特定的底层模块, 而是依赖其抽象, 这要求编程者提前想好接口。
-
接口隔离原则
clients should not be forced to depend upon interfacess that they don't use
保证接口单一, 不要过于臃肿, 在计算模块和UI模块的对接时, 我们尽量细化接口, 让模块的每个按钮对应了刚好一个接口, 同时接口之间的功能达到了隔离。
-
迪米特法则
law of Demeter: least knowledge
loose coupling: Loose coupling means they mostly independent
这一原则要求两个类之间要低耦合, 达到loose coupling, 一个类不需要知道另一个类是怎么实现的, 更不需要因为一个类内部代码的修改二更改自己的方法。 在我们的结对编程中, 为了实现接口的高效对接, 对于接口进行和抽象和封装