现代程序设计——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;
2)根据你选择的教材 (三本之一或更多),点评一下这个程序设计方面的不足,例如:
编码风格,
程序架构,有哪些不符合良好的设计,这个程序的设计模式 (MVC等) 是高端大气国际化的么? 等等。
程序的错误处理,文件处理,UI 等等
大家可能会想到,这个程序虽然说编译都过了,但说不定有很多基本的小问题没解决,VS 的强大的编译器和代码分析工具能把它们都找出来? 当然可以:
编码风格:
我只能说有些标识符的命名名是老师故意改成这样的吧,标识符命名的风格不统一,名字的涵义不清晰。
程序架构:
这个程序用面向对象的形式实现了典型的流水式处理,我们强硬地分一下M、V、C,结果发现MVC全在Form这个类里面,这个工程如果把Form中跟画界面有关的一切都拿出来实现成一个Module类,抽象出一个状态类,用状态类的实体接受各种消息,来控制Module的行为,感觉就会是一个很清晰的架构了。
代码分析工具:
请给我个理由,告诉我这些warning为什么要改,比如说标识符中间不能有下划线这个我懂,驼峰命名法为什么也warning?我没听说过,真心不懂微软是怎么想的?统一所有程序员的行为?
其他:
一句话,即使再大的大牛,也免不了曾经的年少轻狂。
3) 程序的注释
所有人都觉得注释很重要,写程序不写注释的同学真是RP 比较低。。。
那么,就请把这个程序中被标成 “zzzz” 的注释都恢复过来。 当然,你可以用中文写注释。
我恢复的注释就有这么可怜的一丢丢,我看这个代码的时间不长,看了几次,第一次用的代码分析工具,看了看,改了改,再看就是从入口跳了跳,跑了一圈函数的调用,最后尝试恢复了一下上面那个playPrev
现代程序设计——homework-06的更多相关文章
- 标准C程序设计七---06
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 现代程序设计homework——04
题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...
- homework -06 围棋
playPrev功能的实现 public void playPrev(ref GoMove gm) { Point p = gm.Point; m_colorToPlay = gm.Color; cl ...
- nVIDIA SDK White Paper ----Vertex Texture Fetch Water
http://blog.csdn.net/soilwork/article/details/713842 nVIDIA SDK White Paper ----Vertex Texture Fetch ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- 20145219 《Java程序设计》第06周学习总结
20145219 <Java程序设计>第06周学习总结 教材学习内容总结 InputStream与OutputStream 串流设计 1.串流:Java将输入/输出抽象化为串流,数据有来源 ...
- 读书笔记(06) - 语法基础 - JavaScript高级程序设计
写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...
- 2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】
吧啦啦啦啦啦啦啦啦啦啦啦能量,ACM,跨!变身!变成一个智障! 04正在酝酿中!!!马上更新!!!!! 01题意:有一个n个点的图,对于任意两个不同的点,他的权值是两个点下标的最小公倍数,求最小生出 ...
- # 20145210 《Java程序设计》第06周学习总结
教材学习内容总结 第十章 输入\输出 10.1 InputStream与OutputStream •串流设计的概念 •java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 •从应 ...
- Python Revisited Day 06 (面向对象程序设计)
目录 6.1 面向对象方法 duck typing 访问限制 __ 6.2 自定义类 6.2.1 属性与方法 预定义的特殊方法 __...__ 一般的方法名起始和结尾不应该使用俩个下划线,除非是预定义 ...
随机推荐
- Eclipse中查看JDK源码设置
设置方法如下: 1.路径 window-> Preferences -> Java -> Installed JRES 2.此时"Installed JRES"右 ...
- View的个得区域函数getHitRect,getDrawingRect,getLocalVisibleRect,getGlobalVisibleRect(*)
注意: OnCreate()函数中 调用下面函数,结果全为0,要等UI控件都加载完了才能得到绘制时的值. getHitRect 以父控件的左上为原点,计算当前view在父控件的区域,不管父控件在屏幕的 ...
- UVA 11916 Emoogle Grid(同余模)
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- C++ string类的学习
string类对于处理字符串的一些应用非常的方便,我个人感觉,string和字符数组const char *很像,而且又比字符数组用起来方便的多. 注意其删除,取子串,插入等函数里面都有一个重载版本是 ...
- 面试题_93_to_102_编程和代码相关的面试题
93)怎么检查一个字符串只包含数字?(解决方案) 94)Java 中如何利用泛型写一个 LRU 缓存?(答案<) 95)写一段 Java 程序将 byte 转换为 long?(答案) 95)在不 ...
- Oracle数据泵导入导出数据,建立表空
Oracle11g 数据导入到oracle10g 中:1.在oracle11g 服务器命令行中用expdp 导出数据expdp ts/ts@orcl directory=expdp_dir dumpf ...
- QWidget、QDialog、QMainWindow的异同点
简述 在分享所有基础知识之前,很有必要在这里介绍下常用的窗口 - QWidget.QDialog.QMainWindow. QWidget继承于QObject和QPaintDevice,QDialog ...
- CodeForces Round #296 Div.2
A. Playing with Paper 如果a是b的整数倍,那么将得到a/b个正方形,否则的话还会另外得到一个(b, a%b)的长方形. 时间复杂度和欧几里得算法一样. #include < ...
- UVa 10253 (组合数 递推) Series-Parallel Networks
<训练之南>上的例题难度真心不小,勉强能看懂解析,其思路实在是意想不到. 题目虽然说得千奇百怪,但最终还是要转化成我们熟悉的东西. 经过书上的神分析,最终将所求变为: 共n个叶子,每个非叶 ...
- I.MX6 开机 闪红屏
/************************************************************************** * I.MX6 开机 闪红屏 * 说明: * 本 ...