week02- 总结
编程语言的本质
编程的目的:用计算机来解决现实世界的问题。
编程方法的演进
汇编语言->高级语言->结构化程序->问题领域
什么是对象
Booch对于对象的描述:对象具有状态、行为和标识。
状态:表明每个对象可以有自己的数据;
行为:表明每个对象可以产生行为;
标识:表明每个对象都区别于其他的对象。
面向对象编程的三要素:
封装性:隐藏实现细节、定义接口
继承性:IS-A关系,HAS-A关系(组合)
多态性:后期绑定(虚函数)、向上转形(Up Casting)
设计模式
创建模式
行为模式
结构模式
面向对象设计的基本原则
软件设计的最终目的,是使软件达到“强内聚、低耦合”,从而使软件:
易扩展 - 易于增加新的功能
更强壮 - 不容易被粗心的程序员破坏
可移植 - 能够在多样的环境中运行
更简单 - 容易理解、容易维护
软件设计的臭味
僵硬 - 不易改变
脆弱 - 只想改A,结果B被意外破坏
不可移植 - 不能适应环境的变化
导致错误的陷阱 - 做错误的事情比做正确的事情更容易,引诱程序员破坏原有的设计
晦涩 - 代码难以理解
过度设计 - copy-paste代码
僵化性:很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的改动。(如果单一的改动会导致依赖关系的模块中的连锁改动,那么设计就是僵化的,必须要改动的模块越多,设计就越僵化)
脆弱性:对系统的改动会导致系统中和改动的地方无关的许多地方出现问题。(出现问题的地方与改动的地方没有概念上的关联。要修正这些问题又会引起更多的问题,从而使开发团队就像一只不停追逐自己尾巴的狗一样)
牢固性:很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。(设计中包含了对其他系统有用的部分,而把这些部分从系统中分离出来所需的努力和风险是巨大的)
粘滞性:做正确的事情比做错误的事情要困难。(面临一个改动的时候,开发人员常常会发现会有多种改动的方法。有的方法会保持系统原来的设计,而另外一些会破坏设计,当那些可以保持系统设计的方法比那些破坏系统设计的方法更难应用时,就表明设计具有高的粘滞性,做错误的事情就更容易)
不必要的复杂性:设计中包含有不具任何直接好处的基础结构(如果设计中包含有当前没有用的组成部分,他就含有不必要的复杂性。当开发人员预测需求的变化,并在软件中放置了处理那些潜在变化的代码时,常常会出现这种情况)
不必要的重复:设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。(当copy、cut、paste编程的时候,这种情况就会发生)
晦涩性:很难阅读、理解。没有很好的表现出意图。(代码可以用清晰、富有表现力的方式编写,也可以用晦涩、费解的方式编写。一般来说,随着时间的推移,代码会变得越来越晦涩)
OOD设计原则
开闭原则: 对于扩展是开放的,对于更改是封闭的。
依赖倒置原则:高层模块不依赖底层模块,而是大家都依赖于抽象;抽象不能依赖实现、而是实现依赖抽象。
里氏替换原则
单一职责原则(内聚性原则)
接口分离原则:不能强迫客户程序依赖他们不需要的方法
版权声明: 本文为 InfoQ 作者【seki】的原创文章。
原文链接:【http://xie.infoq.cn/article/388663ae50584f8af6161ebc3】。文章转载请联系作者。
评论