软件工程附加篇章:进阶四则运算和Core对接

0x01 计算模块(Core)和前端对接

首先特别结对编程刘乾组(SivilTaram)提供的计算模块(Core),http://www.cnblogs.com/SivilTaram/p/4859934.html

在Core模块的说明文档中,我们可以清晰发现在计算模块Core主要实现了表达式计算、四则运算表达式生成、题目文件和答案文件的审核的功能;

但在设计思路上:

         在整体的设计思路上,SivilTaram组的Core模块同样将写入和读取文件的逻辑封装在计算模块中;但在自己的前后端的设计中,完全将计算模块设计为单纯的计算功能

         在参数设置的方式上,SivilTaram组的Core将全部的setting更改为XML文件的读写,在自己在Core上将setting全部嵌入到计算模块中,但是由于XML文件的读写和setting的实现方法并没有引起较大的冲突,仅在“设置”部分调用了此函数,因此,我们这里完全能够通过XML的读写函数来封装setting函数;

         在文件的读写中,SivilTaram组的Core直接将试题的生成和答案的生成直接写入文件,而自己在设计中将文件的读写全部置于前端,计算模块仅生成能够读写入文件的内容(string或string[]类型等),这里我们不妨在此将CoreInterface接口的内容再次列在下面

interface CoreInterface

{

void setting(int MinRange, int MaxRange,

int minOp, int maxOp, long number,

bool isFactor, bool isDecimal, bool isMin,

bool isBracket, bool isMul);

bool setJudge();

string CreateSingleExpression();

string[] CreateExpression();

string[] CorrectionJudge(string exercise, string answer);

string Calc(string formula);

}

因此,考虑到整体的设计思路我们不妨可以通过读写临时文件ConfigurationTextForWinform[1-3].txt的方式,将SivilTaram组的Core中写入文件的部分重新读写,并通过中间层实现SivilTaram组的Core模块由中间层ConfigureCore : CoreInterface解析为基本的自己的Core的方法,从而使得前端几乎不需要任何修改,即可实现前后端的耦合,总体用于中间层的代码量不超过100行,因此得益于前端较高的独立性,和SivilTaram组功能封装明确的Core模块,最终整体的耦合并未花费较长时间,但在耦合的过程中也存在了一些问题,不妨将它简单罗列与0x02中,将此分享

0x02 计算模块(Core)和前端对接中的问题

0x0204 :前端模块和计算模块

首先开启对自己计算模块和前端模块的吐槽部分,在耦合的过程中,在基本功能的实现中,即表达式计算、四则运算表达式的生成、题目和答案文件的检测,由于在封装的过程中完全调用了Core实现的接口,此过程并没有出现其他问题,整体耦合相对较优;但在额外添加功能的过程中,由于涉及已知答案和目标答案的比较,这里由于用户的输入可能存在浮点数、真假分数、带分数等多种不同形式的表达,因此这里采用设置精度e的方式,通过全部解析为decimal类型的数据,进行“约等于”的比较;这里由于扩展功能时为想清楚这其中必要的联系,不得以采用基础类Factor和ParseNumber方法类保证此部分功能的实现,导致前端中不仅存在了Core的计算模块,还包含Factor的基础模块,使得前后端的耦合过程中,若不取消试题挑战功能,必须保留Factor基础类。但最终,通过Core.Calc的方法直接获取结果的字符串形式,最终在前端封装private decimal(string result)函数和private bool near(string resultA, resultB, precision)函数来实现这一过程,避免对底层类的调用。

0x0208 .NET框架的安装说明

事实证明在处理意外问题上总是拖延了过长的时间,由于SivilTaram所提供的dll文件是基于4.5.2 .NET Framework框架生成,因此在耦合过程中会存在警告信息,“ 未能解析主引用“Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL”,因为它是针对“.NETFramework,Version=v4.5.2”框架生成的。该框架版本高于当前目标框架“.NETFramework,Version=v4.5“”,因此,我们这里需要在VS 2013中配置.NET Framework 4.5.2框架,这里中间经历了一定的时间,具体的方法说明于如下链接:

http://stackoverflow.com/questions/31189154/how-do-i-get-visual-studio-2013-to-allow-me-to-target-net-framework-4-5-2

这里额外说明,一定要下载Developer Pack Of the .NET Framework,否则在配置过程中VS2013的目标框架中将始终不存在这一选项

0x0208 .NET框架的安装说明

这里展示部分的代码框架来说明中间层的设计思路

public class ConfigureCore : CoreInterface

{

private Core.Configure con;

private static long tick = DateTime.Now.Ticks;

public static Random rand = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));

public ConfigureCore(Random rand)

{

ConfigureCore.InitialXmlFile();

rand = ConfigureCore.rand;

}

public void setting(int MinRange, int MaxRange,

int minOp, int maxOp, long number,

bool isFactor, bool isDecimal, bool isMin,

bool isBracket, bool isMul){}

public bool setJudge(){}

public string CreateSingleExpression(){}

public string[] CreateExpression(){}

public string[] CorrectionJudge(string exercise, string answer){}

public string Calc(string formula){}

//XML Part For Inital Of UI

public static void InitialXmlFile(){}

private static void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value){}

public static string ChangeXml(string name, string NewValue){}

public static string ReadXml(string name){}

}

0x03 计算模块(Core)和前端对接中的反思

最终,在几乎未改动前端模块的前提下,通过中间层的搭建完成了SivilTaram组的Core计算模块和自己UI前端的耦合,总体而言,此次中间层的代码量并非很大,但在此附加题的过程中也主要存在着一些感想:

         接口设计思路:在从需求分析到设计部分,在起初自己忽略了前后端的功能划分,但在第二天的接口设计的过程想到此问题才开始重构;因此,此次接口设计思路是耦合过程中的显著问题,信息封装过程是否封装了大量必要信息导致前后端代码量出现不匹配的状况,依赖倒置原则中是否在前端中使用了过多的底层类,导致对底层类的依赖性更强,而违背这一原则等等

         功能实现的区别:因此四则运算的生成和计算能够生成很多功能:从最简单的单词挑战、评分等功能的实现,因此个人认为从功能的角度,最好能将Core接口封装为单纯的计算模块,由中间层或前端完成文件本身的读写操作;因此,此次由于计算模块的接口未规定,也导致不同层次的功能封装在不同模块,耦合的时候会需要大量的中间层代码去兼容,而不是通过接口去完成耦合

         结对编程的团队拼接:事实证明,愈加提前的沟通效率越是能降低后期修改、耦合的时间,如果能在结对编程中提前设计一套统一的接口,那么在前后端的直接耦合上,可能会仅需简单的参数设置完成之间的修改吧

0x04 :尾序:写于团队编程的前夕

并非所有的记忆都被冠以再也不见的标语,

就仿佛青春算得好相聚算得好嬉戏却依旧算不好分别

既然说了再见,也一定会再次相见

散落天涯,不过是为了更好的相见

再见啦,这个骄阳似我回忆似沙春风十里不抵嫣然笑靥的夏天

一切安好~

——《夏洛特烦恼》第二章

时间: 2024-11-07 09:35:29

软件工程附加篇章:进阶四则运算和Core对接的相关文章

【现代软件工程】结对编程 —— 四则运算UI

结对作业 -- 用户界面设计 徐楠青 PB16120408 王馨儿 PB16060765 项目简介: 本次结对编程的任务是写一个能自动生成小学四则运算题目并给出答案的软件,分为core组和ui组.我们抽到的是ui组,负责用户界面设计. 目录 1.1 需求分析 1.2 功能设计 1.3 界面设计 1.4 代码架构 1.5 测试运行 1.6 PSP 1.7 总结 1.1 需求分析 在core组的基础上完成Windows和Linux电脑图形界面的程序,使其有一定的界面和辅助功能,最终交付给用户使用.

软件工程驻足篇章:第十七周和BugPhobia团队漫长的道别

0x01 :序言 I am a slow walker, but I never walk backwards. 成长于被爱,学着爱人 成长的故事 也是年少的星期六结束的故事 就仿佛我和BugPhobia团队共同的成长 从模仿到拒绝模仿 任由挑灯.辗转.迷茫.前进的无数日夜 令那些岁月的烦恼和喜悦控制住自己 在耳边轻唱 祝你万事胜意 一切终比想象的,好一点点 ——致以BugPhobia团队的Beta阶段软件开发的终结篇章 0x02 :软件工程项目经理的理解 To the world,you ma

软件工程启程篇章:C#和四则运算生成与运算

0x01 :序言 I leave uncultivated today, was precisely yestoday perishes tomorrow which the person of the body implored “看不清楚的时光印痕,像是泛黄的底片,明明还记得那个故事,却忘了故事里的风月”,不知如今因为生成规则.词法排序或效率而争执地面红耳赤的少年们,多少岁月走过重新翻阅看着七零八落的注释和代码段,是否只得慨叹岁月这把最锋利的杀猪刀,然而,即便最终能停留在代码段的注释行不过寥

结对作业---四则运算(Core 第四组)

----by core 第四组 ( 邹卫其 范力 ) 一.项目介绍 1. 能自动生成小学四则运算题目并给出答案,生成题目时可以选择下列参数: 1)生成题目数量 2)每道题目中运算数数量 3)运算数数值范围 4)运算符种类(  +  -  *  /  ^  ) 5)运算数类型(整数,小数,分数) 6)运算数精度(保留到小数点后几位) 2. 将四则运算的计算功能包装在一个模块中( Class或DLL) 3. 将Core模块通过一定的API 接口( Application Programming In

软件工程附加题

1.你认为本门课程需要在哪里进行改进,具体措施有哪些,包括:时间进度安排,项目难度等均可:  答: 首先我觉得这门课程前面的项目有很大的帮助,但是最后的试卷考试降低了这门课的实用性,考试我认为可以取消,真的没有什么大的帮助,只能说应付而已,完全将软件工程课程改成项目编程,多增加几个也是可以的. 时间安排也可以,一周两节课.项目难度适中,适合于大多数人,但是附加项目较少,对于编程能力好的同学,没有太大的发展空间. 2.你认为助教/老师哪里做的不足,哪里限制太多等:  答: 张老师的教学方式很好,这

软件工程关于自动生成四则运算题目程序的见解

1.需求分析 一个程序员在编写程序前第一件事就是要知道我要编写的程序是要干什么的,它要那些功能. 题目中要求一个能自动生成小学四则运算题目的程序,分析起来很简单,做起来也很简单. 2.实施 由于是小学四则运算题目 我们设定数字的大小不超过100,运算符号为+ - * /,而这一切要随机生成,不难想到要用到随机函数.首先使用SRAND函数设定随机数种子srand((unsigned)time(NULL)) ,再使用RAND函数控制随机生成我们想要的0-100的数字,至于如何生成加减乘除符号,我们可

软件工程---附加作业

1.你认为本门课程需要在哪里进行改进,具体措施有哪些,包括:时间进度安排,项目难度等均可: 我认为要改进的地方有两处,首先是作业的完成上,应该让老师或助教参与到作业的完成过程中,让作业透明化,可以让老师知道每个同学or每个小组的状态,并表扬做的好的.其次是成绩的评定,发表作业前将成绩评定的标准稍微介绍一下,避免有些同学因为不知道标准,努力完成作业的同时没有得到相应的成绩. 2.你认为助教/老师哪里做的不足,哪里限制太多等: 助教非常细心,在这里感谢助教的付出.我感觉老师上课时不要千篇一律的讲知识

软件工程—附加作业

1 你认为本门课程需要在那里改进,具体措施有哪些? 答:时间安排和进度方面,我个人觉得都挺合理的,本学期课程少,可以有充足的时间来做项目. 部分软件的使用是由同学上台讲的,这块没听懂,都是课后自己摸索的. 课堂纪律不太好,这样会拉低大家的学习热情. 2 你认为助教/老师哪里做得不足,哪里限制太多? 答:助教和老师都很负责,在这里表示感谢,限制并不多,如果限制少了,大家就会拖拖拉拉,学习效果不明显. 3 你认为每次项目的评分标准方面存在哪些问题,你认为的评分标准是怎样的? 答:由于大家水平不在同一

软件工程--课堂练习之四则运算之续编

一.设计思想 在之前的基础上添加了如下功能: 1.为使用户可定制数量以及打印方式,用户自己输入 2.参数设置: 提示用户参与运算的数值范围: 提示用户输入出多少道题目: 提示用户输入题目输出列数: 提示用户是否有乘除法运算: 提示用户结果是否有负数: 二.代码 1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "time.h" 4 int main(){ 5 srand(time(NULL