一、面向对象基础
1.1面向对象基本概念
面向对象(Object- Oriented,OO)方法是一种非常实用的系统化软件开发方法,他以客观世界中的对象为中心,其分析设计思想符合人们的思维方式,分析和设计的结果与客观世界的实际比较接近。
面向对象=对象(Object)+分类(Classification)+继承(Inheritance)+通过消息的通信(Communication with Messages)
对象:一个对象把属性和行为封装为一个整体
消息:对象之间进行通信的一种构造叫做消息
类:一个类定义了一组大体上相似的对象
继承:继承是父类和子类之间共享数据和方法的机制
多态:在收到消息时,对象要予以响应。不同的对象收到同一消息可以产生不同结果,这一现象称为多态
动态绑定:绑定是一个把过程调用和相应调用需要执行的代码加以结合的过程。动态绑定是和类的继承以及多态相联系的,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定
1.2面向对象程序设计
面向对象程序设计(Object- Oriented Programming,OOP)的实质是选用一种面向对象程序设计语言,采用对象、类及相关概念进行的程序设计
类:类具有实例化的功能,包括生成实例和消除实例。同一个类的不同实例具有相同的数据结构,承受的是同一方法集合所定义的操作;同一个类的不同实例可以持有不同值,因而具有不同状态;实例的初始状态可以在实例化时确定
二、UML
2.1事物
UML有四种事物:结构事物、行为事物、分组事物和注释事物
结构事物:结构事物是UML模型中的名词。通常是模型的静态部分,描述概念或物理元素
行为事物:行为事物是UML的动态部分。是模型中的动词,描述了跨越时间和空间的行为
分组事物:分组事物是UML的组织部分
注释事物:注释事物是UML的解释部分
2.2关系
UML中有四种关系:依赖、关联、泛化和实现
依赖:依赖是两个事物间的语义关系,其中一个事物发生变化会影响另一个事物。在图形上,把一个依赖化成一条可能有方向的虚线
关联:关联是一种结构关系,它描述了一组链,链是对象之间的连接,聚集是一种特殊类型的关联,描述了整体和部分间的结构关系
泛化:泛化是一种特殊/一般关系,特殊元素的对象 可替代一般元素的对象
实现:两种情况下会使用实现关系:在接口实现它们的类或构件关系;在用例和实现他们的协作之间
泛化:类与类之间的继承关系(一般从子类指向父类)
关联:两个类或类于接口的依赖关系
聚合:关联的特例,整体与部分,拥有的关系,可分离,有各自的生命周期
组合:强于聚合,不可分离,是一个整体
2.3类图
类图展现了一组对象、接口、协作和他们之间的关系,通常包括:类、接口
协作,依赖、泛化和关联关系
对象图:展现了某一时刻一组对象以及他们之间的关系,描述了在类图中所建立的事物的实例的静态快照
用例图:展现了一组用例、参与者以及他们之间的关系。用例间的扩展关系(extend)和包含关系(include)
交互图:一张交互图表现的是一个交互,由一组对象和它们之间的关系组成,包含他们之间可能传递的消息。交互图表现为序列图、通信图、交互概念图和计时图。序列图强调消息的时间顺序,通信是强调接收和发送消息的对象的结构组织,交互概览图强调控制流
状态图:展现了一个状态机,由状态、转换、事件和活动组成。强调对象行为的时间顺序
活动图:活动图是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程
插件图:展现了一组构件之间的组织和依赖
三、设计模式
3.1设计模式
3.2创建型设计模式
抽象工厂(Abstract Factory):定义一个接口用于创建相关或有依赖关系的对象族,无需明确具体类。适用于一个系统要独立于它的产品的创建、组合和表示
生成器(Builder):封装一个复杂对象的构造过程,并允许按步骤构造。适用于创建复杂对象的算法应该独立于该对象组成部分以及他们的装配方式时
工厂方法(Factory Method):定义一个创建对象的抽象方法,由子类决定要实例化的对象。适用于当一个类不知道他所必需创建的对象的类时
原型(Prototype):无需知道相应类的信息。适用于当一个系统应该独立于它的产品创建时
单例(Singleton):确保一个类最多只有一个实例,并提供一个全局访问点
3.3结构型设计模式
适配器(Adapter):类接口转换成期望的另一个接口。适用于想使用一个已经存在的类,但接口不符合要求
桥接(Bridge):将抽象部分与他的实现部分分离,可独自变化
组合(Composite):将对象组合成树状的层次结构模式,使用户对单个对象有一致访问性
装饰(Decorator):动态的将新功能附加到对象上
外观(Facade):隐藏了系统复杂性,向客户端提供一个接口
享元(Flyweight):通过共享高效的支持大量细粒度的对象。适用于一个程序使用; 大量对象
代理(Proxy):由代理对象控制原对象的引用。适用于需要复杂对象代替简单指针的时候
3.4关系型设计模式
父与子类:策略(Strategy)、模版方法(Template Method)
两个类之间:观察者(Observe)、迭代器(Iterator)、责任链(Chain of Responsibility)、命令(Command)
类的状态:备忘录(Memento)、状态(State)
通过中间类:访问者(Visitor)、中介者(Mediator)、解释器(Interpreter)
3.5设计模式应用实例
外观:提供一个统一的界面,适用于子系统复杂的情况
享元:适于应对大量对象
装饰器:动态的给对象添加一些额外职责
工厂方法:使一个类的实例化延迟到其子类
观察者:一对多,一个改变,其他自动更新
中介者:使耦合松散,独立改变之间的交互(对通信复杂)
状态:允许一个对象在其内部状态改变时改变他的行为
策略:定义了一系列算法,将每个算法封装起来,还可以相互替换,让算法独立变化
生成器:将复杂算法的构建与表示分离