面向对象技术
面向对象基础
面向对象基本概念
面向对象分析
面向对线设计
面向对象测试
UML
事务
关系
图
设计模式
创建型设计模式
结构型设计模式
行为型设计模式
面向对象基本概念
面向对象基本概念
达成目标具体需要做哪些事情。
- 对象 : 基本的运行实体,为类的实例,封装了数据和行为的整体,如学生、汽车等真实存在的实体。对象具有清晰的边界、良好定义的行为和可扩展性。
- 消息 : 对象之间进行通信的一种构造称为消息
- 类 : 是对象的抽象,定义了一组大体相似的对象结构,定义了数据和行为,包括实体类(用于对必须存储的信息和相关行为建模的类,是需要长久保存且一直存在的类)、边界类(系统内部与系统外部的业务主角之间进行交互建模的类)、控制类(用于对一个或几个用例所特有的控制行为进行建模,在用例执行过程中被动出现的特定行为的类)。在领域类模型中会涉及描述类自身情况的属性与操作,还会有描述类与类之间的关联,但不会有对象层次的内容。
- 继承 父类和子类之间共享数据和方法的机制。是类之间的一种关系。
- 多态 不同的对象收到同一个消息时产生完全不同的反应。包括参数多态(不同类型参数多种结构类型)、包含多态(父子类型关系)、过载多态(类似于重载,一型个名字不同含义)、强制多态(强制类型转换)四种类型。多态由继承机制支持。
- 多态 不同的对象收到同一个消息时产生完全不同的反应。包括参数多态(不同类型参数多种结构类型)、包含多态(父子类型关系)、过载多态(类似于重载,一型个名字不同含义)、强制多态(强制类型转换)四种类型。多态由继承机制支持。
面向对象基本概念
为完成目标,设置 3-5 条坚持做和禁止做的事情。
覆盖:
子类在原有父类接口的基础上,用适合于自己要求的实现去置换父类中的相应实现。即在子类中重定义一个与父类同名同参的方法。ss
函数重载:
与覆盖要区分开,函数重载与子类父类无关,且函数是同名不同参数。
封装:
一种信息隐蔽技术,其目的是使对象的使用者和生产者分离,也就是使其他开发人员无需了解所要使用的软件组件内部的工作机制,只需知道如何使用组件。
静态类型 动态类型
- 静态类型是指一个对象的类型在编译时就确定;
- 动态类型指对象类型在运行时才能确定。
静态绑定 动态绑定
- 静态绑定(静态分配)是基于静态类型的,在程序执行前方法已经被绑定;
- 动态绑定是基于动态类型的,运行时根据变量实际引用的对象类型决定调用哪个方法,动态绑定支持多态。
面向对象分析设计
面向对象分析:
是为了确定问题域,理解问题。
包含五个活动:
- 认定对象(按自然存在的实体确定对象)、
- 组织对象(分析对象关系,抽象成类)、
- 对象间的相互作用(描述各对象在应用系统中的关系)、
- 确定对象的操作(操作,如创建增加删除等)、
- 定义对象的内部信息(属性)。
...
面向对象设计:
是设计分析模型和实现相应源代码,在目标代码环境中这种源代码可被执行。设计问题域的解决方案。
面向对象程序设计:
用面向对象程序设计语言实现设计方案。详见下午软件设计。
面向对象测试:
与普通测试步骤并无不同。
可分为四个层次:
- 算法层(测试类中定义的每个方法,类似单元测试)、
- 类层(测试同一个类中所有方法与属性的相互作用,特有的模块测试)、
- 模板层(测试一组协同工作的类之间的相互作用,类似集成测试)、
- 系统层(类似系统测试)。
...
例(2012年下半年):38-39.在面向对象技术中,说明一个对象具有多种形态,_39_定义超类与子类之间的关系。
(38)A. 继承
B. 组合
c. 封装
D. 多态
(39)A.继承
B. 组合
c. 封装
D. 多态
答案:D A
解析:一个对象基有多种形查,丛字面理解应该是多态,多态是不同对象在接收到同一个消息会产生不同的
反应:超类与子类毫无疑问是继承。
例(2015年上半年) : 38.面向对象()选择合适的面向对象程序设计语言,将程序组织为相互协作的对象集合,每个对象表示某个类的实例,类通过继承等关系进行组织。
A.分析 B.设计
C.程序设计 D.测试
答案:C
蟹哲:涉及到程序设计语言的,是面向对象程序设计,面向对象设计不涉及具体语言,只从系统逻辑结构层
例(2015年下半年):
了一组大体相似的对象,这些对象共享(38)。
在面向对象的系统中,对象是运行时实体,其组成部分不包括(37);一个类定义
(37)A.消息
B. 行为(操作)
c. 对象名
D. 状态
(38)A.属性和状态
B. 对象名和状态
c. 行为和多重度
D.属性和行为
答案:A
解析,其睾契潺晨晕霜个独立的概念,对象是类的实体,因此包括行为、属性,对象运行时必然有状态:类
UML
UML是统一建模语言,和程序设计语言并无关系。
UML三个要素:
- UML的基本构造块、
- 支配这些构造块如何放置在一起的规则
- 和运用与整个语言的一些公共机制。
UML的基本构造块包括:
- 事物(对模型中最具有代表性的成分的抽象)、
- 关系(把事务结合在一起)、
- 图(聚集了相关的事物)。
UML中有四种事物:
- 结构事物、
- 行为事物、
- 分组事物、
- 注释事物。
结构事物:
模型的静态部分,如类、接口、用例、构件等;
如右图示例:
事物
行为事物:
模型的动态部分,如交互、活动、状态机;
分组事物:
模型的组织部分,如包;
注释事物:
模型的解释部分,依附于一个元素或一组元素之上对其进行约束或解释的简单符号。
关系
依赖:
一个事物的语义依赖于另一个事物的语义的变化而变化
关联:
是一种结构关系,描述了一组链,链是对象之间的连接。分为组合和聚合(聚集),都是部分和整体的关系,其中组合事物之间关系更强。两个类之间的关联,实际上是两个类所扮演角色的关联,因此,两个类之间可以有多个由不同角色标识的关联。
泛化:
一般/特殊的关系,子类和父类之间的关系
实现:
一个类元指定了另一个类元保证执行的契约。
类图
类图:
静态图,为系统的静态设计视图,展现一组对象、接口、协作和它们之间的关系。UML类图如下:
- 多重度;
- 属性;
- 操作;
- 关系。
对象图
对象图:
静态图,展现某一时刻一组对象及它们之间的关系,为类图的某一快照。在没有类图的前提下,对象图就是静态设计视图。如下:
用例图⭐️⭐️⭐️
用例图:
静态图,展现了一组用例、参与者以及它们之间的关系。
用例图中的参与者是人、硬件或其他系统可以扮演的角色;用例是参与者完成的一系列操作。
用例之间的关系:
包含:必须 ,一定要做
扩展:可做可不做
泛化:一般和特殊之间的关系
序列图
序列图:即顺序图,动态图。是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
三种。
- 有同步消息(进行阻塞调用,调用者中止执行,等待控制权返回,需要等待返回消息,用实心三角箭头表示),
- 异步消息(发出消息后继续执行,不引起调用者阻塞,也不等待返回消息,由空心箭头表示)、
- 返回消息(由从右到左的虚线箭头表示)
如下:
通信图
通信图:
动态图,即协作图,是顺序图的另一种表示方法,也是由对象和消息组成的图,只不过不强调时间顺序,只强调事件之间的通信,而且也没有固定的画法规则,和顺序图统称为交互图。。如下:
状态图
状态图:
动态图,展现了一个状态机,描述单个对象在多个用例中的行为,包括简单状态和组合状态。
转换可以通过事件触发器触发,事件触发后相应的监护条件会进行检查。状态图中转换和状态是两个独立的概念,如下:图中方框代表状态,箭头上的代表触发事件,实心圆点为起点和终点。
活动图
活动图:
动态图,是一种特殊的状态图,展现了在系统内从一个活动到另一个活动的流程。
活动的分岔和汇合线是一条水平粗线。
并发分岔、并发汇合、监护表达式、分支、流等名词及含义。
每个分岔的分支数代表了可同时运行的线程数。活动图中能够并行执行的是在一个分岔粗线下的分支上的活动。
构件图
构件图(组件图):静态图,为系统静态实现视图,展现了一组构件之间的组织和依赖。如下:
部署图
部署图:静态图,为系统静态部署视图,部署图物理模块的节点分布。它与构件图相关,通常一个结点包含一个或多个构件。其依赖关系类似于包依赖,因此部署组件之间的依赖是单向的类似于包含关系。如下:
例题
例(2012年下半年):42.UML中接口可用于
A. 提供构造型(stereotype)名称为《interface》的具体类
B. Java和C++程序设计中,而C#程序设计中不支持
c. 定义可以在多个类中重用的可执行逻辑
D.声明对象类所需要的服务
答案:D
解析:UML是统一建模语言,和程序设计语言并无关系,在采用UML进行面向对象
系统建模时,会用UML中构造型(stereotype)名称为interface来表示接口这一概念
(并非具体类),声明对象类所需要的服务,而服务具体如何执行,有实现它的具体类完成。
设计模式
每一个设计模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。设计模式的核心在于提供了相关问题的解决方案,使得人们可以更加简单方便的复用成功的设计和体系结构。
设计模式的四个基本要素:
- 模式名称、
- 问题(应该在何时使用模式)、
- 解决方案(设计的内容)、
- 效果(模式应用的效果)。
分为三类,
- 创建型模式主要是处理创建对象,
- 结构型模式主要是处理类和对象的组合,
- 行为型模式主要是描述类或者对象的交互行为,
具体如下(红色粗体记忆关键字表示常考必须记住的):
设计模式
创建型设计模式 (5)
创建型设计模式 | 定义 | 记忆关键字 |
Abstract Factory 抽象工厂模式。 | 提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类 | 抽象接口 |
Builder 构建器模式 | 将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。 | 类和构造分离 |
Factory Method 工厂方法模式。 | 定义一个创建对象的接口,但由子类决定需要实例化哪一个类。使得子类实例化过程推迟。 | 子类决定实例化。 |
Prototype 原型模式 | 用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象。 | 原型实例,拷贝 |
Singleton 单例模式。 | 保证一个类只有一个实例,并提供一个访问它的全局访问点。 | 唯一实例 |
结构型设计模式(7)
结构型设计模式 | 定义 | 记忆关键字 |
Adapter 适配器模式 | 将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作 | 转换,兼容接口 |
Bridge 桥接模式。 | 将类的抽象部分和它的实现部分分离开来,使它们可以独立的变化 | 抽象和实现 分离 |
Composite. 组合模式 | 将对象组合成树型结构以表示“整体-部分” 的层次结构,使得用户对单个对象和组合对象 的使用具有一致性 | 整体-部分, 树形结构 |
Decorator 装饰模式 | 动态的给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵活的替代,比派 生一个子类更加灵活。 | 附加职责 |
Façade 外观模式。 | 定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用. | 对外统一接口 |
Flyweight 享元模式 | 提供支持大量细粒度对象共享的有效方法。 | 细粒度,共享 |
Proxve 代理模式。 | 为其他对象提供一种代理以控制这个对象的访问. | 代理控制 |
行为型设计模式(10)
行为型设计模式 | 定义 | 记忆关键字 |
Chain of Responsibility 职责链模式 | 通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求。 | 传递请求、职 责、链接. |
Command 命令模式。 | 将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。 | 参数化、日志 记录。 |
Interpreter 解释器模式 | 给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子。 | 文法、解释 |
Iterator 迭代器模式 | 提供一种方法来顺序访问一个聚合对象中的各个元素而不需要暴露该对象的内部表示. | 顺序访问。 |
Mediator 中介者模式 | 用一个中介对象来封装一系列的对象交互。它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立的改变对象间的交互. | 不直接引用 |
Memento 保存,恢复。 | 备忘录模式。 | 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态 |
Observer 观察者模式 | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 | 通知、自动更新 |
State 状态模式 | 允许一个对象在其内部状态改变时改变它的 行为. | 状态变成类 |
Strategy 策略模式 | 定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化。 | 算法替换。 |
Template Method 模板方法模式。 | 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤 | |
Visitore 访问者模式 | 表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作。 | 新操作 |