锦州网站建设动态,头条新闻 免费下载,营销策略国内外文献综述,大学网页制作搜题软件这是这个课件的一部分: 现代程序设计 #xff08;课程设计中, 征求意见稿#xff09;
好多同学们都说题目难#xff0c;这回我们来一个简单而很有意义的。 :#xff09;
写代码爽还是读代码爽? 往一堆乱麻中再加上一些线索#xff0c;似乎比较容易#xff1b;然而从…这是这个课件的一部分: 现代程序设计 课程设计中, 征求意见稿
好多同学们都说题目难这回我们来一个简单而很有意义的。 :
写代码爽还是读代码爽? 往一堆乱麻中再加上一些线索似乎比较容易然而从这一团乱麻中理出头绪还是比较难的。下图来自 知乎的一个讨论。 我们练习了这么多作业所有作业都是从头写程序但是我们到了真正的项目组或公司里通常我们会改进一个已经存在项目 这个项目说不定已经存在好多年了这个项目的文档也不多编码规范也不是太完美。 这时候我们怎么办 我们当然可以通过下面的办法:
理解程序 在不损害程序现有功能的情况下修复bug 或增加新功能 同时有计划地通过重构或重写改进这个程序让它更好地被程序员理解更好地能适应可能产生的变化。
这个作业就是这样一个例子。
假设有一组水平不高的程序员或者一个水平不高的程序员比如我在很久以前为了学习Java, 就写了一个 Java 的围棋下棋程序 (不是人工智能只是在屏幕上展现下棋的过程), 后来C# 出现之后他又随意地把程序改写为C#, 经过简单测试之后他就把程序放在一边了。 现在我们拿到了这个代码程序还可以编译成功但是不巧的是一个关键函数只有函数体没有具体的实现了。例如: int GetLiberty(int x, int y, StoneColor c ) //判断当前的位置上的棋子和相连的一组棋子一共有多少气 这个程序原来总共有30行算上空行和单字符行但是由于种种原因, 这个函数只剩下了一句话 return 1; 现在请用递归和非递归两种方式把它实现出来。 关于个棋子或一组相连的棋子有多少气有没有气, 十分简单。
详细的规则请看网上的许多教程。 举两个非常简单的例子: 如果此时该黑棋下黑棋下在 (A1) 的位置, 那么黑棋就把白棋 A2 的棋子吃掉了。如果此时该白旗下白棋下在 C1 的位置那么白棋就把两颗黑棋吃掉了。 此时黑白双方谁能占据 O4 的位置, 就能够决定两个黑棋有没有气。 上面的题目已经在课堂上搞定了我们再扩展一下
目前给同学们的程序能在下面两种情况下浏览棋局:
a) 直接在棋盘上面点击程序就会按照黑白相间的次序走棋。
b) 用户可以用程序打开一个棋谱文件 *.sgf), 然后按 “” 按钮程序就会按次序下棋。
大家注意到用户界面上还有一个 “” 按钮, 这是让用户把下棋的步骤倒回去 如果上一步一方吃掉了许多棋子, 那么我们还要把这些吃掉的棋子恢复好 函数说明在这里: 这个函数的大部分都没有实现现在我们要实现它。 要求: 所有的修改都只在这一个函数体里面 我们的同学们学了《现代程序设计》搞定下面的挑战应该不成问题:
1) 把程序编译通过 跑起来。 读懂程序在你觉得比较难懂的地方加上一些注释这样大家就能比较容易地了解这些程序在干什么。 把正确的 playPrev(GoMove) 的方法给实现了。 如果大家不会下围棋那就需要大家实地或者上网练习一下围棋的死活提子是怎么回事。这个应该一个小时就能搞定。
2根据你选择的教材 (三本之一或更多)点评一下这个程序设计方面的不足例如: 编码风格 程序架构有哪些不符合良好的设计这个程序的设计模式 (MVC等) 是高端大气国际化的么? 等等。 程序的错误处理文件处理UI 等等 大家可能会想到这个程序虽然说编译都过了但说不定有很多基本的小问题没解决VS 的强大的编译器和代码分析工具能把它们都找出来? 当然可以: 大家可以运行 VS 的代码分析工具找到这个程序的这些问题并改进。下面是报告的一部分: 这些改进可以是很小的例如把所有函数的命名都规范化这算一个改进。同学们至少要把Code Analysis 报告的所有问题给解决了。
关于Code Analysis 的更多信息: http://msdn.microsoft.com/en-us/library/ee1hzekz.aspx http://msdn.microsoft.com/zh-cn/library/vstudio/ms182278.aspx 3) 程序的注释 所有人都觉得注释很重要写程序不写注释的同学真是RP 比较低。。。 那么就请把这个程序中被标成 “zzzz” 的注释都恢复过来。 当然你可以用中文写注释。 4 选择题 提示: 这个题目另外算分满分10分需要挣分的同学就可以考虑这个选择题
对于功能上的小问题, 那么你怎么改进呢? 请选出 1-2个你想做的改进然后运用你的各种编程技术和能力把这些改进给实现了必须明确指出改进/增加了哪一个功能。 把所有的改进都实现之后把代码签入 GitHub, 经历了这一番改动你的程序和别的同学的程序就很不一样了。 如果大家有时间并有兴趣可以做一些大的改进 a 如果我要把这个程序变成一个可以人机对战的小游戏 (假设你的AI 模块已经写好这里我们就可以让一个函数返回一个合法的位置就可以) 那这个程序的架构应该怎么变化 请把这个功能写出来。 b) 如果我想让这个程序变成两个用户可以通过网络对战这个程序的架构要怎么变化? 另 大家在读程序的时候可以测试一下自己的会发什么样的脑电波。 :) 看看下面的论文:
http://wwwiti.cs.uni-magdeburg.de/~feigensp/experiments/fMRI/fse_fMRI-Poster.pdf