现代程序设计——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 属性与方法 预定义的特殊方法 __...__ 一般的方法名起始和结尾不应该使用俩个下划线,除非是预定义 ...
随机推荐
- Sublime Text汉化方法和注册码
汉化方法 安装 SublimeText3 汉化包运行SublimeText3 点击 Preferneces -> Browse Packages 会打开 X:\..\Sublime Text 3 ...
- hadoop2的automatic HA+Federation+Yarn配置的教程
前言 hadoop是分布式系统,运行在linux之上,配置起来相对复杂.对于hadoop1,很多同学就因为不能搭建正确的运行环境,导致学习兴趣锐减.不过,我有免费的学习视频下载,请点击这里. hado ...
- JS创建类以及类的方法(StringBuffeer类)
创建StringBuffer类以及toString,append()方法 //创建一个StringBuffer类 ,此类有两个方法:一个是append方法一个是toString方法 function ...
- Asp.Net多线程用法1
Asp.Net多线程简单用法 一个web页面 default.aspx 里面有两个控件GridView1,GridView2,通过两个线程分别加载绑定数据. protected void Page_L ...
- 如何用css3实现风车效果
前面讲过css3可以替代很多js实现的效果,其实很多时候纯css3甚至可以替代图片,直接用css3就可以画出一些简单的图片.虽然css3画出来的图片效果可能不如直接用图片的好,实现起来也比较复杂,最麻 ...
- angularjs指令中的compile与link函数详解(转)
http://www.jb51.net/article/58229.htm 通常大家在使用ng中的指令的时候,用的链接函数最多的是link属性,下面这篇文章将告诉大家complie,pre-link, ...
- javascript 命名空间的实例应用
/** * 创建全局对象MYAPP * @module MYAPP * @title MYAPP Global */ var MYAPP = MYAPP || {}; /** * 返回指定的命名空间, ...
- 【多媒体封装格式详解】---MP4【4】
前面介绍过的几种格式flv.mkv.asf等.他们音视频的数据包一般都是按照文件的顺序交叉安放.你解析完头部信息后.剩下的一般就按照文件顺序一个数据包一个数据包的解析就行了.但是MP4完全不是这种概念 ...
- 多个SSH key对应多个Host: Github, Bitbucket
https://confluence.atlassian.com/bitbucket/configure-multiple-ssh-identities-for-gitbash-mac-osx-lin ...
- JavaScript备忘录-闭包
var arr = new Array(); function Person() { for (var i = 0; i < 10; i++) { //要记住,这个属性函数申明,只有立即执行才会 ...