




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计方法与艺术ICPC高级实训课程报告班 级:计算机科学与技术12-1指导老师:徐本柱学 生:2012211596 王海燕 一、 讲座内容1 面向对象原则报告内容(结合自己的理解、以及课外的阅读,给出报告的具体内容)面向对象设计原则:l 开放封闭原则OCP 具有可扩展性、灵活性、可插入性;同时具有选择封闭,使用抽象获得显示封闭,使用“数据驱动”的方法获取封闭性。从某种意义上来说,这个原则是面向对象设计的核心,遵循这个原则带来的好处就是面向对象技术所声称的优点:可重用性和可维护性,并不是说仅仅使用一种面向对象编程语言就是遵循这个原则,它依赖于设计者对程序中他认为可能发生变化的部分作出合理的设计抽象。l LisKov 替换原则LSP如果某个函数使用了指向基类的指针或引用,却未被LSP原则,那么这个函数必学了解该基类的所有派生类,显然违背开放封闭原则OCP。LSP原则清楚地指出,OOD中ISA关系是就行为功能而言,行为功能是外在、公开的,是客户程序所依赖的。按照LSP和OCP原则,所派生类的行为功能必须和客户程序对其积累所期望的保持一致。l 依赖倒置原则DIP依赖倒置原则DIP是指高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。一个设计良好的面向对象的程序的依赖结构相对于传统过程式方法设计的通常的结构而言就是被“倒置”了。依赖倒置原则是面向对象所声称的诸多优点的一个重要原则。这个原则的正确应用对于创建可重用框架是必须的。对于构建具有高弹性的代码同样是至关重要的,当抽象和具体细节被分离后,代码的维护工作就变得容易多了。l 接口隔离原则ISP一般来说,一个类对另外一个类的依赖性应当是建立在最小的接口上的;使用多个专门的接口比使用单一的总接口要好。l Single Responsibility Principle (SRP)这个原则的核心含义是指 一个类应该有且仅有一个职责;一个类的职责是指引起该类变化的原因;并非极端为一个类只设定一个方法,而是一组方法只能有一个变化轴线;最好有一个概念统购改组方法,2 代码重构技术报告内容(结合自己的理解、以及课外的阅读,给出报告的具体内容)代码重构是指l Refactoring is changing the structure of a program without changing its functionality. l Refactoring(名词): 在不改变可观察行为的前提下,对软件内部结构的改变,目的是使它更易于理解并且能够更廉价地进行改变。 l Refactor(动词): 通过应用一系列不改变软件可观察行为的refactoring来重构一个软件。 重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。在不改变可观察行为的前提下,对软件内部结构的改变,目的是使它更易于理解并且能够更廉价地进行改变l 为什么要重构?构的重要性要从软件的生命周期说起。软件不同与普通的产品,他是一种智力产品,没有具体的物理形态。一个软件不可能发生物理损耗,界面上的按钮永远不会因为按动次数太多而发生接触不良。那么为什么一个软件制造出来以后,却不能永远使用下去呢?对软件的生命造成威胁的因素只有一个:需求的变更。一个软件总是为解决某种特定的需求而产生,时代在发展,客户的业务也在发生变化。有的需求相对稳定一些,有的需求变化的比较剧烈,还有的需求已经消失了,或者转化成了别的需求。在这种情况下,软件必须相应的改变。考虑到成本和时间等因素,当然不是所有的需求变化都要在软件系统中实现。但是总的说来,软件要适应需求的变化,以保持自己的生命力。系统发展到一定阶段后,使用重构的方式,不改变系统的外部功能,只对内部的结构进行重新的整理。通过重构,不断的调整系统的结构,使系统对于需求的变更始终具有较强的适应能力。l 何时着手重构?我们知道重构的好处,我们知道重构可以给我们的工作带来垂手可得的改变。但是我们还没有获得足够的经验,我们还看不到它的局限性。这一小节比我希望的要短。暂且如此吧。随着更多人学会重构技巧,我们也将对?你应该尝试一下重构,获得它所提供的利益,但在此同时,你也应该时时监控其过程,注意寻找重构可能引入的问题。请让我们知道你所遭遇的问题。随着对重构的了解日益增多,我们将找出更多解决办法,并清楚知道哪些问题是真正难以解决的。3 测试驱动软件开发报告内容(结合自己的理解、以及课外的阅读,给出报告的具体内容)软件质量,是所有人都很关心的东西。我们在开发过程中为了保证质量,从中引进了软件测试。它在整个的过程中起到的作用不言而预,但是它也存在一些问题:l 在软件测试中要保证软件的高质量就必须增加项目的成本,从而需要增加测试人员,延长项目时间,购买或学习测试工具的成本。l 因为这种测试是依赖与开发完后才提交给测试人员的,所以如果测试中出现BUG,就会出现BUG打回,再次提交测试.,这中间还需要测试人员和开发人员的沟通,这也是一个成本的增加l 这种方式会使得开发人员对测试人员产生依赖,从而降低代码的质量,减少自己的测试.l 测试驱动开发是一种先开发测试的技术 l 是开发技术,而不是测试 l 是先文档再代码的过程 ,反映开发思路 l 每一行产品代码落笔之前,先写一个测试来给这行代码找一个存在的理由 l TDD=TFD+重构 l Clean Code That Works l Works : 让代码奏效,把事情做对 l Clean Code: 让代码洁净,把事情做好 另外,除非这能让失败的单元测试通过,否则不允许去编写任何的产品代码;只允许编写刚好能够导致失败的单元测试 (编译失败也属于一种失败);允许编写刚好能够导致一个失败的单元测试通过的产品代码 二、 感想及体会报告内容(结合自己的体会,包括课外阅读相关知识点的感想,写出具体内容)上完这一个星期的课,对于程序设计有了新的认识。首先,是在OO设计的方面 以往我在设计程序时,总希望一气呵成,只要是一些比较小型的程序,我总会只有一个main()函数,程序完成之后,总感觉非常的杂乱,过几天我连自己写的程序都不知道了,这就相当悲催。不过,在这次的听课中,我就发现是我没有合理的利用OO的原因,回去翻看了以前的程序,做了一些修改,增加了OO在里面,果然结构变得更加的清晰了,也赏心悦目了不少。其次,是在代码重构方面。我一直都知道这个名词,但不知道具体的意思,后来我在程序员修炼之道上看到了,就翻看了一下,可能当时还是大一对于这些东西并不是特别的理解,就觉得没有什么。这一次听了老师的课,才发现原来重构是如此的重要。以前我们写代码的时候喜欢设计,设计的我们认为很详细了,然后开始将所有的功能模块都写完,接着再调试,在调试的过程中我们可能花费比写代码长的多的时间。是的,因为你在运行一个复杂的东西,当然不容易搞定了。Martin Flower认为我们调试的时间可以不用那么长,原因是我们不能在写完了一个复杂系统的时候再调试,我们可以先建立一个好的测试用例,在写这个测试用例的过程中我们更能对整个系统了解,也能够帮助我们写代码;然后我们一点点的写,写一部分测试一下,保证每次新写的代码都能正确运行,从而当代码写完了,系统调试也完毕了。这样的情况下可以认为我们没有在调试上花时间,我们把时间花在测试和编写代码上了。重构与性能不是是对立的。重构让代码容易理解,而性能让代码变的难以理解,不过我们在开始的时候应该考虑怎么样让代码容易理解和维护,这样我们可以在后面适当的时候对代码的某部分进行轻松的性能改进工作。本人做性能改进工作有段时间了,想从庞大的杂乱无章的、不熟悉的代码中找出性能的bottleneck的确不是一件容易的事情,我需要的是理解代码,理解流程,那么如果一个结构很好的代码对于我来说就好对付多了。因此他们不是对立的,性能以重构为基础的。其实通过重构,最主要的目的是让我们的代码更清晰,更轻巧,更容易被维护,那么也就是我们有良好的代码,于是我们还惧怕什么,什么都可以轻松搞定。同样重构认为代码随时都是清晰的、轻巧的,一般你的代码不再具有以上特点,那么我
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车产业园人才引进与培养方案
- 微流控合成技术对活性酯分子异构体纯度提升的瓶颈突破路径
- 微型化刹车线管在新能源汽车集成中的结构应力优化难题
- 建筑工地场景下多频段光信号穿透混凝土的衰减模型构建
- 废料化学再生技术对分体式浸塑机环保合规性的重构路径
- 英语课后练习Unit 2 lesson 2
- 工业级交联PVP回收再利用中的热降解副产物定向捕获技术
- 渔光一体项目管理人员能力提升方案
- 麋鹿阅读答案试卷及答案
- 8.3 2x2列联表说课稿-2025-2026学年沪教版2020选择性必修第二册-沪教版2020
- 现代诗二首-花牛歌 公开课一等奖创新教学设计
- 2024年安徽省地勘行业职业技能大赛(地质调查员)考试题库(含答案)
- 2024年第九届中小学“学宪法、讲宪法”活动知识素养竞赛题库
- 《工程招投标与合同管理》全套教学课件
- DL∕T 5342-2018 110kV~750kV架空输电线路铁塔组立施工工艺导则
- 海南公司防止电力事故二十五项反事故措施题库
- CJJ28-2014城镇供热管网工程施工及验收规范
- 专题十八 椭圆解答题-2022届天津市各区高三一模数学试题分类汇编
- 红酒市场调研报告
- 2023年4月自考02207电气传动与可编程控制器PLC试题及答案含解析
- DL-T 2563-2022 分布式能源自动发电控制与自动电压控制系统测试技术规范
评论
0/150
提交评论