您的位置:首页 > 其它

现代程序设计 作业 3

2014-04-15 15:53 288 查看
这个作业是采取结对编程的方式完成。
在上一个作业中,  我们尝试了各种命令行的处理,以及各种数组的处理。  现在, 我们要把 现代程序设计 作业 2 的各个结果转换成图形界面显示。这个问题看起来很难, 实际上大部分难的工作都在上一个作业完成了 (数组计算部分),  现在我们要通过模块化和重构等一些手段,  把我们在前一个作业的工作搬到新的环境中来。
 
1) 在图形界面  (GUI)上显示最大子数组在哪里。 建议像博客那样用高亮显示即可。 在界面上合适的位置 (例如窗口的状态栏上)显示最大子数组的和, 并且能标明哪些数组元素贡献了最大子数组的和。
    请参见下面的作业提示,  我们希望和数组相关的代码能独立出来, 成为一个独立的模块 (class library, dll, 或其它),  这样的话,  命令行和 GUI 的程序都能使用同一份代码。
2) 图形界面能同时显示多个数组的运算结果, 用不同的 tab 把不同数组分开。请看下面例子:
运行
maxsum.exe  file1
出现下面的UI, (当然, 同学们的UI 可以做得更好看一些)



然后, 再运行
maxsum.exe  file2
会在上一个 maxsum.exe 的UI 上出现一个新的 Tab (File2), 显示新的结果.  (现在, 整个电脑中仍然只有一个 maxsum.exe 在运行 )



当然, 这里面的各个 Tab 会像 IE/Chrome 等浏览器的Tab 那样可以关闭。
3) 对于首尾相连的环状和轮胎的形状, 用户当然想看到这样的结果,这要求我们的程序能处理各种命令行参数,就像上一个作业那样。
4)既然有了 GUI,  用户就能和程序即时交互,而不只是仅仅通过命令行来进行。 我们能让用户控制界面,通过简单的鼠标操作, 让数组的平面/环/轮胎形状移动或旋转么?   (选作题)
 
作业提示:
同学们在上个作业中写了不少为命令行程序服务的函数 (或者代码),  这些代码在 GUI 程序中还是一样有用处的,  那怎么能让同一份代码服务于两个不同输出的程序呢? 我们可以看看怎么样实现代码的重(chong)用。 既然代码会在不同的环境下重复使用, 那我们最好让这些代码只做意见事情, 把这件事情做得最好,把别的事情交给别的代码来做。
可以看看:
重构,代码大全,敏捷开发原则 等书中关于代码模块化,重构的描述。
Single Responsibility - a class should have only one reason to change
例如, 大家原来的代码可能做了好几件事情:
处理输入,提示用户出错的情况
计算一个数组的最大子数组的和,以及这些最大子数组的元素都是哪一些
处理输出。
现在, 我们这个可以重用的函数(或者类、模块)只应该把一件事情做好
计算一个数组的最大子数组的和,以及这些最大子数组的元素都是哪一些
别的事情交给别的函数去做, 而且随着情况的变化, 别的函数处理方法也不一样, 例如在命令行中处理输出, 和在GUI 中处理输出是很不一样的。 这些事情不应该让 “计算数组的最大子数组的和”这个模块来做。
如果你的编程环境是 Visual Studio, 那么你可以很容易地创建一个新的项目  (Project), 选择 Class Library:


 
同学们也可以看看这个课件, 用一个例子来弄清楚具体操作:
现代软件工程讲义 2 开发技术 - 单元测试 & 回归测试 
在 VS 2012 怎么做 Unit Test, 我们有这些有用的博客Code Coverage
 
作业要求:
这是一个结对编程的作业,  一个小组中的两个同学选取比较优秀的 作业2  (两个人的都独立完成了),  把它作为本次作业的基础,然后再修改。 在两人合作的过程中, 请看下面的内容:     a. 代码规范和代码复审
    b. 结对编程,
    c. 给人提意见的方式 - 送一个汉堡包
最后, 作业上交的是 GitHub 的代码 (两个同学的代码都要交)。
博客 (两个同学都要写)要写以下内容:
你现在使用的代码规范是什么,  和上课前有什么改进? 
你的同伴有哪些优点 (列出至少三点), 和那些需要改进的地方 (列出至少三点)
你的代码从 作业2 到 作业3 经历了哪些变化?  哪些代码需要重构 (看关于代码重构的资料), 哪些需要重写,  为什么?
你的设计是如何保证 不同的 maxsum.exe 命令行最后在一个GUI 的界面显示的?  (C++ 的设计模式中有 singleton 的概念, 说明一个类的实例如何在一个进程中保持单例, 我们这里谈的是软件如何在操作系统中保持 singleton)
当然,  请继续记录时间的估计和你实际的用时:
 
 Personal Software Process Stages 时间百分比(%) 实际花费的时间 (分钟) 原来估计的时间 (分钟)
Planning 计划    
·         Estimate ·         估计这个任务需要多少时间,把工作细化并大致排序    
Development 开发    
·         Analysis ·         需求分析 (包括学习新技术)    
·         Design Spec ·         生成设计文档    
·         Design Review ·         设计复审 (和同事审核设计文档)    
·         Coding Standard ·         代码规范 (制定合适的规范)    
·         Design ·         具体设计    
·         Coding ·         具体编码    
·         Code Review ·         代码复审    
·         Test ·         测试(自我测试,修改代码,提交修改)    
Reporting 总结报告    
·         Test Report ·         测试报告     
·         Size Measurement ·         计算工作量    
·         Postmortem & Improvement Plan ·         事后总结, 并提出改进    
Total总计100%总用时总估计的用时
 
这是这个课件的一部分:  现代程序设计 (课程设计中, 征求意见稿)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: