7.1 面向对象基础
7.1.1 面向对象的基本概念
面向对象=对象+分类+继承+通过消息的通信
对象:基本的运行实体,包括属性和行为,由对象名、属性和方法组成
消息:对象之间进行通信的一种构造
类:定义一组大体显示的对象,其所包含的方法和数据描述一组对象的共同行为和属性,类是对象之上的抽象,对象是类的具体化,是类的实例,分为实体类、接口类和控制类
继承:是父类和之类之间共享数据和方法的机制
多态:不同的对象接收到同一消息可以产生完全不同的结果,参数多态和包含多态称为通用的,过载多态和强制多态称为特定的
动态绑定:在运行时,一个把过程调用和响应调用所需要执行的代码加以结合的过程,与类的继承以及多态相联系的,在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现,在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接
7.1.2 面向对象分析
面向对象分析的活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息
7.1.3 面向对象设计
面向对象设计是将面向对象分析所创建的分析模型转化为设计模型,其目标是定义系统构造蓝图,同样遵循抽象、信息隐蔽、功能独立和模块化等设计准则
面向对象设计的活动:识别类及对象;定义属性;定义服务;识别关系;识别包
面向对象设计原则:单一责任原则;开放-封闭原则;理氏替换原则;依赖倒置原则;接口分离原则;重用发布等价原则;共同封闭原则;共同重用原则;无依赖原则;稳定依赖原则;稳定抽象原则
7.1.4 面向对象程序设计
类:类具有实例化功能;同一个类的不同实例具有相同的数据结构,承受的是同一方法集合所定义的操作,具有相同规律的行为;同一类的不同实例可以持有不同的值,具有不同的状态;实例的初始状态可以在实例化时确定
继承和类层次结构:继承通过定义类之间的关系来体现,子类和父类之间的继承关系构成了整个系统的类层次结构,可以用树或格这样的图来描述;继承体现了一条重要的设计原则,即开发人员在构造程序时不必从零开始,而只需对差别进行程序设计
对象、消息传递和方法:对象是类的实例,对象之间通过诺消息传递进行通信;
对象自身引用:通过this或self等,自身引用的值和类型扮演了两种意义的角色,对象自身引用的值使得方法体中引用的成员名与特定的对象相关,对象自身引用的类型则决定了方法体被实际共享的范围
重置:指在子类中重新定义父类已经定义的方法,通过一种动态绑定机制的支持,使得子类在集成 父类接口定义的前提下用适合自己要求的实现去置换父类中的相应实现
类属类:可以看成类的模板,是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与具体类型无关的那些部分,而与具体类型相关相关的那些部分则用变元来表示。
无实例的类:抽象类,C++通过定义抽象方法来定义抽象类;JAVA通过申明来定义抽象类
7.1.5 面向对象测试
面向对象的测试:与其他方法开发的系统测试无异,分为算法层(测试类中定义的方法)、类层(测试封装在同一类中的所有方法和属性之间的相关作用)、模板层(测试一组协同工作的类之间的相互作用)和系统层(组装子系统过程中的测试)。
7.2 UML
UML组成要素:UML的基本构造块、支配这些构造块如何设置在一起的规则和运用与整个语言的一些公共机制
UML包含3种构造块:事物--对模型中最具代表性的成分的抽象;关系--把事物连接在一起;图--聚集了相关的事物
7.2.1 事物
UML中的4中事物:结构事物、行为事物、分组事物和注释事物
结构事物:模型的静态部分,描述概念或物理元素,包括类、接口、协作、用例、主动类、构件、制品和结点
行为事物:模型的动态部分,描述跨越时间和空间的行为,包括交互、状态机和活动
分组事物:UML模型的组织部分,主要指包
注释事物:UML模型的解释部分,用来描述、说明和标注模型的任何元素
7.2.2 关系
UML中4中关系:依赖、关联、泛化和实现
7.2.3 UML中的图
图:一组元素的图形表示,一般画为顶点(事物)和弧(关系)的连通图,包括类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、组合结构图、部署图、包图、交互概览图和计时图
类图:展现一组对象、接口、协作和他们之间的关系,包含类、接口、协作和依赖、泛化和关联关系
对象图:展现了某时刻一组对象以及他们之间的关系
用例图:展现一组用例、参与者以及他们之间的关系,包括用例、参与者和用例间的扩展、包含关系,参与者与用例之间的关联关系,用例与用例及参与者与参与者之间的泛化关系
交互图:用于对系统动态方面进行建模,一张交互图表示一个交互,由一组对象和他们之间的关系组成,包含其传递消息;一般包含对象、链和消息
状态图:展现一个状态机,由状态、转换、事件和活动组成
活动图:一种特殊的状态图,展示了系统内从一个活动到另一个活动的流程,包括活动状态和动作状态,转换和对象
构建图:展示一组构建之间的组织和依赖
组合结构图:描述一个分类器的内部结构,分类器与系统中其它组成部分之间的交互端口、展示一组相互协作的实例如何完成特定的任务,描述设计、结构模式或策略
部署图:用来对面向对象系统的物理方面建模的方法,展现了运行时处理节点以及其中构件的配置
包图:用于把模型本身组织成层次结构的通用机制,不能执行,展现由模型本身分解而成的组织单元以及其间的依赖关系
7.3 设计模式
7.3.1 设计模式的要素
设计模式的核心在于提供了相关问题的解决方案,使得人们可以更简单的复用成功的设计和体系结构
设计模式的要素:模式名称、问题、解决方案、效果
设计模式的分类:创建型模式与对象的创建有关;结构型模式处理类与对象的组合;行为型模式对类或对象怎么交互和怎么分配职责进行描述
7.3.2 创建型设计模式
创建型模式抽象了实例化过程,帮助系统独立于如何创建、组合和表示它的那些对象
抽象工厂(Abstract Factory):意图提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类
生成器(Builder):意图将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
工厂方法(Factory Method):意图定义一个用于创建对象的接口,让子类决定实例化哪一个类
原型(Prototype):意图用原型实例制定创建对象的种类,并且通过复制这些原型创建新的对象
单例(Singleton):意图保证一个类仅有一个实例,并提供一个访问它的全局访问点
7.3.3 结构型设计模式
结构型设计模式涉及如何组合类和对象以获得更大的结构,采用继承机制来实现组合接口或实现
适配器(Adapter):意图将一个类的接口转换成客户希望的另一个接口
桥接(Bridge):意图将抽象部分与其实现部分分离,使他们都可以独立的变化
组合(Composite):意图将对象组合成树形结构仪表室部分-整体的层次结构
装饰(Decorator):意图动态的给一个对象添加一些额外的职责
外观(Facade):意图为子系统中的一组接口提供一个一致的界面
享元(Flyweight):意图运用共享技术有效的支持大量的细粒度对象
代理(Proxy):意图为其他对象提供一种代理以控制对这个对象的访问