题目:

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;

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

编码风格,

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

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

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

  编码风格:

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

  程序架构:

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

  代码分析工具:

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

  其他:

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

3) 程序的注释

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

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

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

现代程序设计——homework-06的更多相关文章

  1. 标准C程序设计七---06

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  2. 现代程序设计homework——04

    题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...

  3. homework -06 围棋

    playPrev功能的实现 public void playPrev(ref GoMove gm) { Point p = gm.Point; m_colorToPlay = gm.Color; cl ...

  4. nVIDIA SDK White Paper ----Vertex Texture Fetch Water

    http://blog.csdn.net/soilwork/article/details/713842 nVIDIA SDK White Paper ----Vertex Texture Fetch ...

  5. 软工+C(9): 助教指南,持续更新...

    上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...

  6. 20145219 《Java程序设计》第06周学习总结

    20145219 <Java程序设计>第06周学习总结 教材学习内容总结 InputStream与OutputStream 串流设计 1.串流:Java将输入/输出抽象化为串流,数据有来源 ...

  7. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

  8. 2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】

    吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! 04正在酝酿中!!!马上更新!!!!!  01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出 ...

  9. # 20145210 《Java程序设计》第06周学习总结

    教材学习内容总结 第十章 输入\输出 10.1 InputStream与OutputStream •串流设计的概念 •java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 •从应 ...

  10. Python Revisited Day 06 (面向对象程序设计)

    目录 6.1 面向对象方法 duck typing 访问限制 __ 6.2 自定义类 6.2.1 属性与方法 预定义的特殊方法 __...__ 一般的方法名起始和结尾不应该使用俩个下划线,除非是预定义 ...

随机推荐

  1. hadoop-0.23.9安装以及第一个mapreduce测试程序

    hadoop是一个能够对大量数据进行分布式处理的软件框架.它实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有着高容错性的特点,并且设计 ...

  2. 车牌识别LPR(一)-- 研究背景

    在年尾用了几天的时间将2014年的所有工作都总结了一遍,将之前的文档综合了下. 以下是LPR系统,车牌识别的一些总结资料. 第一篇:LPR研究背景 汽车的出现改变了以往出行徒步和以马代步的时代,极大地 ...

  3. java--面向接口编程

    之前看的一本书的笔记,上周再看设计模式的时候,想到了这篇之前在看某本书时候的笔记. 面向接口编程很重要的一点就是接口回调,用接口声明的变量称作接口变量,属于引用型变量,可以存放实现该接口的类的实例的引 ...

  4. 加密解密(10)常见HASH算法:MD5(128bit),SHA1(160bit)

  5. Android开发之网络请求HttpURLConnection

    转:http://blog.csdn.net/guolin_blog/article/details/12452307 Android中主要提供了两种方式来进行HTTP操作,HttpURLConnec ...

  6. java开发之多线程需要学习和理解的东西

    40个Java多线程问题总结 http://www.codeceo.com/article/40-java-thread-problems.html

  7. [POJ1330]Nearest Common Ancestors(LCA, 离线tarjan)

    题目链接:http://poj.org/problem?id=1330 题意就是求一组最近公共祖先,昨晚学了离线tarjan,今天来实现一下. 个人感觉tarjan算法是利用了dfs序和节点深度的关系 ...

  8. word引用错误

    错误 4317 无法嵌入互操作类型“Microsoft.Office.Interop.Word.ApplicationClass”.请改用适用的接口. 类型“Microsoft.Office.Inte ...

  9. uva 1642 Magical GCD

    很经典的题目,愣是没做出来.. 题意:给出一个序列,求一子序列,满足其GCD(子序列)* length(子序列)最大. 题解: 类似单调队列的思想,每次将前面所得的最大公约数与当前数进行GCD,若GC ...

  10. bzoj3798: 特殊的质数

    分块打表.块内的暴力块外的打表.开始没有j>0所以WA了. #include<cstdio> #include<cmath> #include<cstring> ...