良好的编程实践

良好的编程实践

ID:34961037

大小:1.75 MB

页数:27页

时间:2019-03-15

良好的编程实践_第1页
良好的编程实践_第2页
良好的编程实践_第3页
良好的编程实践_第4页
良好的编程实践_第5页
资源描述:

《良好的编程实践》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、良好的编程实践 清华大学软件学院 刘强、陈华榕•看:阅读优秀的代码,学习别人的代码•问:https://github.com/seajs/seajs/issues/545•练:亲自动手编写代码,实践、实践、再实践 软件开发的工程思维 高楼大厦可能是这样建成的 1.分析问题 2.初步设计 3.模型评估与测试 4.搭建框架 5.建造 6.测试与验收 软件开发的工程思维 方案1方案2方案4分析过程问题 方案3合成过程解决方案 子问题1子问题2子问题4子问题3软件开发的工程思维规范的高质量软件编码开发之

2、道高质量的设计有效的测试•模块化设计•面向抽象编程•错误与异常处理模块化设计 活字印刷术可以称得上是古代产品领域的模块化设计 •每个汉字代表一个文字“模块”,具有特定的功能和含义•语法是连接汉字模块的“接口”,通过它构成了最终的文章“产品”模块化设计 集装箱酒店迪拜集团在伦敦西部建立的第一家模块化酒店模块化程序设计 基本思想:将一个大的程序按功能分拆成一系列小模块•降低程序设计的复杂性•提高模块的可靠性和复用性•缩短产品的开发周期•易于维护和功能扩展模块化程序设计 基于水平划分基于垂直划分WEB

3、应用系统 应用服务层 用户权限……业务业务逻辑层 管理 管理 功能 数据存储层 将一个系统按照业务类型将一个系统按照系统层次进行水平划分成多个功能模块进行垂直划分成多个模块模块化程序设计 基于易变与稳定:认识和识别变与不变的部分,并将之科学地分离开。易变业务逻辑1业务逻辑M稳定通用功能1通用功能2……通用功能N模块化程序设计 基于单一职责:类或者函数应该只做一件事,并且做好这件事。•单一职责≠单一功能•单一职责:只有一个引起变化的原因 Python的模块化设计 函数 类模块 包 案例:生命游戏 

4、生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。活细胞 死细胞 当前细胞 案例:生命游戏动态图来自维基百科h#ps://zh.wikipedia.org/wiki/%E5%BA%B7%E5%A8%81%E7%94%9F%E5%91%BD%E6%B8%B8%E6%88%8F案例:生命游戏的模块划分 想一想,生命游戏有哪些要素?地图 计时 逻辑 案例:生命游戏的模块划分 逻辑 计时 地图 管理与地图相关一切数据控制完整游戏逻辑,负责时间相关的功能,的初始化、获取、更新等 根据地图数

5、据依照在适当的时机触发游戏逻辑进行相应更新 逻辑模块对地图的更新 模块化设计的好处:思路清晰,易于测试,适应未来可能的变化 案例:生命游戏的模块划分 实际上,模块化设计可以有多种不同的方案,应该选择利于理清思路、方便测试、容易调整的方案,同时避免“过度设计”。逻辑 计时 UI地图 例如:如果你愿意的话,加一个UI模块专门负责将游戏状态呈现给用户也是可以的。面向抽象编程 在模块化设计的基础上,我们可以先设计出各个模块的“骨架”,或者说对各个模块进行“抽象”,定义它们之间的“接口”。定义各个模块互相

6、关联的部分,这些部分在未来开发中不应该发生改变。注:这里所说“接口”与Java的interface类似,但不一定需要显式地定义出来,也可以是开发人员之间的约定。# game_map.pyclass GameMap(object): def__init__(self, rows, cols): """地图将在逻辑模块进行初始化""" 案例:生命游戏 pass defreset(self, life_ratio): """重置地图并按life_ratio随机地填充一些活细胞""" pass defg

7、et_neighbor_count(self, row, col): """地图上一个方格周围活细胞数是游戏逻辑里的重要数据""" pass 地图 defset(self, row, col, val): """当游戏进行中,需要常常更新地图上方格的状态""" pass defget(self, row, col): """当需要将游戏状态呈现给用户时,就需要获取地图上方格的状态""" pass # life_game.pyclass LifeGame(object): 案例:生命游戏 def_

8、_init__(self, map_rows, map_cols, life_init_ratio): """将在主程序中初始化实例""" pass 逻辑 defgame_cycle(self): """ 进行一次游戏循环,将在此完成地图的更新 将在计时器触发时被调用 """ pass defprint_map(self): """由于暂时没有UI模块,因此先在逻辑模块进行地图的呈现""" pass # game_timer.py案例:生命游戏 class GameTimer(object): 

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。