在类图辅助下的一次完善编码
Part 1 背景
OOA(Object Oriented Analysis,面向对象分析):
从客观存在的事务和事务之间的关系,归纳出有关对象(包括对象的属性和行为)以及对象之间的联系,并将具有相同属性和行为的对象用一个类(class)来表示。建立一个能够反映真实情况的需求模型。
OOD(Object Oriented Design,面向对象设计):
将面向对象分析阶段形成的需求模型进一步具体设计。如类的设计(继承、派生、类与类之间的消息协作)、算法的设计等。采取通用的工具,如流程图、类图等来描述。
Part 2 过程
本次的任务在于作出你所想要设计的计算器程序的类图,使用类来对原先的代码实现优化。借此契机,我以边做类图边修改代码的方式,来理清思路并补全我过去代码中不完善的地方。对于原先一直困扰我的“一遇除法就出错”的问题我在这次的作业里也进行了完善(主要思路:当结果除不尽时丢弃计算式进行重新生成)。所以这次完成的计算器程序算是我相对之前完善了许多的版本。附上我的github地址:小豪的GitHub
以下图一为我对程序总结的类图,设计出的类只有两个,分别是:生成计算式的 Expression 和语言选择工具 Choice 。其他无实值的调用函数归类为接口。(因为在语言选择工具的处理上还有一些不足,所以先以内部调用函数替代,在之后我测试好以后会补上支持语言选择工具的代码)
图二为流程图,左半边为用户角度的计算器外部运行流程,右半边为计算器自身的内部实现流程。
Part 3 问答交流
-
问题1:采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?
回答1:本次设计中我的类只有两个,分别是:生成计算式的 Expression(负责随机生成数字与符号,并将其与随机括号串成字符串的形式,并且判断是否接口为整数,如若不是,则返回去重新参与生成)和 语言选择工具 Choice(负责得到用户需要的语言选项,并在过程中应用该语言去告知用户出题选择、判别结果、统计正确解题数等命令)。 -
问题2:类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?
回答2:在我的两项类之间联系不大,没有直接相关联的地方。 -
问题3:该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法
回答3: 如上流程图所示,具体展现运行的实现方式,算法则应用调度场算法,之前我有给出过相关的代码,详见Part two 调度场算法的学习
Part 4 编码中的心得体会
-
由Dev转向VS,由一个cpp文件到多文件的文件分离,这是我这次编码的主要工作之一。其中要提到的注意点是对于调用的问题,一种类型的调用,要做到在一个.h中声明,在其包含的.cpp中定义,这样在运行的过程中,程序才会正常运作。我原先忽略这一点,在不同的.h文件中直接定义,导致程序一直无法顺利运行下去,内部理不顺。
-
做好类图或者流程图,很大程度上对自己的编码具有指导意义,我在编码的过程中深有体会。如何设计合理的类,如何让主体程序做好各个之间的调用,怎样处理好传值等等的问题,在做图当中都能加深理解。
-
这次的代码就先如此,给自己梳理一下下次完善过程中的几个需解决问题
- 用户交互过程中,当输入不符合要求时所应作出的判断与处理
- 加入语言选择工具,去调用输出写好在txt文件中的文本
以上就是我本次实践中的所有成果与感悟,最后谢谢你的欣赏!