zoukankan      html  css  js  c++  java
  • 现代程序设计 作业 3

    这个作业是采取结对编程的方式完成。

    在上一个作业中,  我们尝试了各种命令行的处理,以及各种数组的处理。  现在, 我们要把 现代程序设计 作业 2 的各个结果转换成图形界面显示。这个问题看起来很难, 实际上大部分难的工作都在上一个作业完成了 (数组计算部分),  现在我们要通过模块化和重构等一些手段,  把我们在前一个作业的工作搬到新的环境中来。

     

    1) 在图形界面  (GUI)上显示最大子数组在哪里。 建议像博客那样用高亮显示即可。 在界面上合适的位置 (例如窗口的状态栏上)显示最大子数组的和, 并且能标明哪些数组元素贡献了最大子数组的和。

        请参见下面的作业提示,  我们希望和数组相关的代码能独立出来, 成为一个独立的模块 (class library, dll, 或其它),  这样的话,  命令行和 GUI 的程序都能使用同一份代码。

    2) 图形界面能同时显示多个数组的运算结果, 用不同的 tab 把不同数组分开。请看下面例子:

    运行

    maxsum.exe  file1

    出现下面的UI, (当然, 同学们的UI 可以做得更好看一些)

    image

    然后, 再运行

    maxsum.exe  file2

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

    image

    当然, 这里面的各个 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:

    image 

    同学们也可以看看这个课件, 用一个例子来弄清楚具体操作:

    现代软件工程讲义 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% 总用时 总估计的用时

     

    这是这个课件的一部分:  现代程序设计 (课程设计中, 征求意见稿)

  • 相关阅读:
    华为网络层协议介绍
    华为交换机基本原理
    对网络布线与数制转换粗浅认识
    对 计算机网络参考模型新认识
    我对5G的初步认识
    三层交换机单臂路由
    同网段中不同vlan间,客户机从服务器中下载数据
    Telnet远程配置
    华为模拟器里使用RIP协议跨越主类网络边界的实验现象
    7.10 IP地址的格式 以及 网段地址等
  • 原文地址:https://www.cnblogs.com/xinz/p/3336188.html
Copyright © 2011-2022 走看看