现代程序设计——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 属性与方法 预定义的特殊方法 __...__ 一般的方法名起始和结尾不应该使用俩个下划线,除非是预定义 ...
随机推荐
- javascript精确计算
一篇文章: 4 个用于执行高级数学计算的 JavaScript 库 numbers.js Numeric Javascript accounting.js Tangle 有时只需要加减乘法能精确,没 ...
- c# webbrowser 随机点击链接
HtmlElementCollection hec = webBrowser1.Document.All; ; i < hec.Count; i++) { if (hec[i].GetAttri ...
- autofac meta
http://kevincuzner.com/2014/05/19/extreme-attributed-metadata-autofac/ http://stackoverflow.com/ques ...
- sql2005主从数据库同步配置
网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库.主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的 ...
- Android异常之 unable to write jarlist cache file
异常: android开发调试时候不能运行,出现 unable to write jarlist cache file 错误. 解决方法: 1.找到appcompt文件夹如下的位置.
- git pull冲突解决
场景:用户UserA修改了文件File1,用户UserB也修改了文件File1并成功merge到了服务器上,而UserA和UserB改动了同一个代码块,当UserA拉取代码时git无法merge此改动 ...
- information_schema中的三个关于锁的表
在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎):innodb_trx ## 当前运行的所有事务innodb_locks ## ...
- 【转】堆栈跟踪中收到一个UnhandledExceptionFilter调用时,如何查找问题异常堆栈
定义没有异常处理程序来处理引发的异常时调用UnhandledExceptionFilter函数.函数通常将异常传递到捕获并处理它所尝试的 Ntdll.dll 文件. 在某些情况下,在其中存在的进程内存 ...
- [转] C# 泛型类型参数的约束
啊.紫原文C# 泛型类型参数的约束 在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制 ...
- Android Scrollview 内部组件android:layout_height="fill_parent"无效的解决办法
Found the solution myself in the end. The problem was not with the LinearLayout, but with the Scrol ...