面向对象技术复习纲要
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象技术复习纲要
本纲要以设计模式与设计原则为主要内容,很多概念性内容请参考其他课本。
Part Ⅰ面向对象基础
1.基本思想:
要点1:任何事物都是对象,对象有属性和方法。复杂对象可以由相对简单的对象以某种方式构成。
要点2:通过类比发现对象间的相似性,即对象间的共同属性,是构成对象类的依据。
要点3:对象间的相互联系是通过传递“消息”来完成的。通过对象之间的消息通信驱动对象执行一系列的操作从而完成某一任务。
2.基本概念
a)对象类动态绑定消息传递
b)特性:封装性继承性多态性
3.优点:模块化,信息隐藏与抽象;自然性;并发性;重用性
4.面向对象的设计支柱:封装、继承、多态
5.静态类型语言与动态类型语言(变量类型声明)
6.静态类与动态类
反多态:父类转换为子类
7.多继承与名称二义性
解决方案:重定义
8.重载与重写
9.重写与遮蔽比较:改写、遮蔽、重定义
10.纯多态
11.模板方法与模板类
12.框架
Part Ⅱ设计模式与设计原则
一、设计原则
a)抽取变化:找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变
化的代码混在一起。
b)针对接口:针对接口编程,而不是针对实现编程。
c)多组合少教程:多用组合,少用继承。
d)松耦合:为了交互对象之间的松耦合设计而努力。
e)开闭原则:类应该对扩展开放,对修改关闭。
f)依赖倒置原则:要依赖抽象,不要依赖具体类。
g)最少知识原则:只和你的密友谈话。
h)好莱坞原则:别调用(打电话给)我们,我们会调用(打电话给)你。
i)单一责任:一个类应该只有一个引起变化的原因。
二、设计模式概览
a)策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算
法的变化独立于使用算法的客户。
b)观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,
它的所有依赖者都会收到通知并自动更新。
c)装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更
有弹性的替代方案。
d)工厂模式:
i.简单工厂模式
ii.工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
iii.抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
e)单件模式:确保一个类只有一个实例,并提供一个全局访问点。
f)命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化
其他对象。命令模式也指出可撤销的操作。
g)适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口
不兼容的类可以合作无间。
h)外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一
个高层接口,让子系统更容易使用。
i)模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以在不改变算法接口的情况下,重新定义算法中的某些步骤。
j)迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
k)组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
l)状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
m)代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。
n)复合模式:结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。
三、设计模式详解
a)策略模式:
i.要点:
1.知道OO基础,并不足以让你设计出良好的OO系统。
2.良好的OO设计必须具备可复用、可扩充、可维护三个特性。
3.模式可以让我们建造出具有良好OO设计质量的系统。
4.模式被认为是历经验证的OO设计经验。
5.模式不是代码,而是针对设计问题的通用解决方案。你可以把它们用到
特定的应用中。
6.模式不是被发明,而是被发现。
7.大多数的模式和原则,都着眼于软件变化的主题。
8.大多数的模式都允许系统局部改变独立于其他部分。
9.我们常把系统中会变化的部分抽出来封装。
10.模式让开发人员之间有共享的语言,能够最大化沟通的价值。
ii.类图:
b)观察者模式:
i.要点:
1.观察者模式定义了对象之间一对多的关系。
2.主题(也就是可观察者)用一个共同的接口来更新观察者。
3.观察者和可观察者之间用松耦合方式结合(loose coupling),可观察者不
知道观察者的细节,只知道观察者实现了观察者接口。
4.使用此模式时,你可从被观察者处推(push)或拉(pull)数据(然而,
推的方式被认为更“正确”)。
5.有多个观察者时,不可以依赖特定的通知次序。
6.Java有多种观察者模式的实现,包括了通用的java.util.Observable.
7.要注意java.util.Observable实现上所带来的一些问题。
8.如果有必要的话,可以实现自己的Observable,这并不难,不要害怕。
9.Swing大量使用观察者模式,许多GUI框架也是如此。
10.此模式也被应用在许多地方,例如:JavaBeans、RMI。
ii.类图: