zoukankan      html  css  js  c++  java
  • 现代程序设计——homework-06

    题目:

    http://www.cnblogs.com/xinz/p/3382048.html

    这是一道要多坑有多坑的题目,题目有很多步。综合起来就是这个意思:

      在很久以前,有一个大牛,当然那个时候他还很年轻,心血来潮写了一个一千多行的小游戏,可能大牛当时真得很潮,千把百行代码完全就是小儿科的概念,根本就没仔细设计,噼里啪啦一顿敲,一顿饭的工夫就搞定了。很多年之后,大牛更牛了手上都是千万级代码量的项目,手下都是年轻的大牛,不幸的是,他要教一群菜鸟程序设计,电光火石之间,他想到了自己很久以前花一段饭工夫写的那个小游戏,于是删掉了一个不疼不痒的功能,和谐掉注释,让学生去回复一下。当然,大牛删的很彻底,跟这个功能相关的操作都删掉了,剩下一群无辜的“未使用变量”还有几对儿“名字不同、内容不同、效果相同”的函数,满篇都是“ZZZ”,搞得我看着看着就困了。

    苦逼之旅:

    1) 把程序编译通过, 跑起来。

        读懂程序,在你觉得比较难懂的地方加上一些注释,这样大家就能比较容易地了解这些程序在干什么。

         把正确的 playPrev(GoMove) 的方法给实现了。 如果大家不会下围棋,那就需要大家实地或者上网练习一下围棋的死活,提子是怎么回事。这个应该一个小时就能搞定。

      反正我眼看着柴哥看了一晚上没有搞定,然后毅然刷夜革命去了,主要是纠结于和Mark、Label相关的一坨。于是我毅然决定参考一下别人的成果

    Point p = gm.Point;
                m_colorToPlay = gm.Color;    // Get current set point and the color of pieces
    
                clearLabelsAndMarksOnBoard();
                m_gmLastMove = gameTree.peekPrev();
    
                bDrawMark = true;
                Grid[p.X, p.Y].die();
                if (gm.DeadGroup != null)
                {
                    foreach (Point pt in gm.DeadGroup)
                    {
                        Grid[pt.X, pt.Y].setStone(gm.DeadGroupColor);
                    }
                }
                optRepaint();
                
                //show the movement information
                textBox1.Clear();
                textBox1.AppendText(gm.Comment);
                return; 
    View Code

    2)根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足,例如:

         编码风格,

         程序架构,有哪些不符合良好的设计,这个程序的设计模式 (MVC等) 是高端大气国际化的么? 等等。 

         程序的错误处理,文件处理,UI 等等

         大家可能会想到,这个程序虽然说编译都过了,但说不定有很多基本的小问题没解决,VS 的强大的编译器和代码分析工具能把它们都找出来? 当然可以:

      编码风格:

        我只能说有些标识符的命名名是老师故意改成这样的吧,标识符命名的风格不统一,名字的涵义不清晰。

      程序架构:

        这个程序用面向对象的形式实现了典型的流水式处理,我们强硬地分一下M、V、C,结果发现MVC全在Form这个类里面,这个工程如果把Form中跟画界面有关的一切都拿出来实现成一个Module类,抽象出一个状态类,用状态类的实体接受各种消息,来控制Module的行为,感觉就会是一个很清晰的架构了。

      代码分析工具:

        请给我个理由,告诉我这些warning为什么要改,比如说标识符中间不能有下划线这个我懂,驼峰命名法为什么也warning?我没听说过,真心不懂微软是怎么想的?统一所有程序员的行为?

      其他:

        一句话,即使再大的大牛,也免不了曾经的年少轻狂。

    3) 程序的注释

        所有人都觉得注释很重要,写程序不写注释的同学真是RP 比较低。。。

        那么,就请把这个程序中被标成 “zzzz” 的注释都恢复过来。 当然,你可以用中文写注释。

      我恢复的注释就有这么可怜的一丢丢,我看这个代码的时间不长,看了几次,第一次用的代码分析工具,看了看,改了改,再看就是从入口跳了跳,跑了一圈函数的调用,最后尝试恢复了一下上面那个playPrev

  • 相关阅读:
    洛谷 1339 最短路
    洛谷 1330 封锁阳光大学 图论 二分图染色
    洛谷 1262 间谍网络 Tarjan 图论
    洛谷 1373 dp 小a和uim之大逃离 良心题解
    洛谷 1972 莫队
    洛谷 2158 数论 打表 欧拉函数
    洛谷 1414 数论 分解因数 水题
    蒟蒻的省选复习(不如说是noip普及组复习)————连载中
    关于筛法
    关于整数划分的几类问题
  • 原文地址:https://www.cnblogs.com/hennande/p/3441259.html
Copyright © 2011-2022 走看看