面向对象基础知识
1、面向对象的软件开发方法分
- 业务越来越复杂,映射必须越来越直接 | 软件复杂性的增长使软件开发越来越困难。
- OOSD是一种把面向对象的思想应用于软件开发过程,指导开发活动的系统方法。
- 面向对象 -> 九十年代以来计算机领域的主流技术,是一种当今成熟的、普遍流行的软件开发方法。
- 面向对象方法的解决思路是从现实世界中的客观对象入手,尽量运用人类的自然思维方式来构造软件系统。是一种运用
对象
、类
、继承
、封装
、聚合
、消息传送
、多态性
等概念来构造系统的软件开发方法。
- 面向对象方法中,把一切都看成是对象。对象是功能抽象和数据抽象的统一,较过程稳定。
1. 1、面向对象软件开发的主要思想
- 按照人类的自然思维方式,对客观世界建立软件模型。
- 客观实体和实体之间的联系构成了现实世界的所有问题。
- 面向对象技术将现实世界中的实体及相互关系映射为对象及对象间的关系,实体间的相互作用被映射为对象间的消息发送等。
面向过程的软件开发方法 | 面向对象程序设计思想 |
---|---|
现实世界被映射为功能/函数的集合。 | *** |
程序=算法+数据结构 | 程序=对象+消息 |
需求难变动、维护困难、数据不安全 | 封装性1 |
1. 2、面向对象方法的优点
(1) 把易变的数据结构和部分功能封装在对象内并加以隐藏(可靠易维护,适应性强)
(2) 封装性和继承性有利于复用(高内聚,低耦合)
1. 3、面向对象开发方法的组成
- OOA(Object-Oriented Analysis)
- OOD(Object-Oriented Design)
- OOP(Object-Oriented Program)
2、面向对象的核心元素
根据Coad和Yourdon的定义,按照以下4个概念设计和实现的系统,称为面向对象的。
面
向
对
象
=
对
象
+
类
+
继
承
+
通
信
面向对象=对象+类+继承+通信
面向对象=对象+类+继承+通信
2. 1、问题域,对象
2. 1. 1、问题域
- 开发一个软件所解决问题涉及的业务范围成为该软件的问题域
- 不同问题域对统一实体描述可能不同
- 问题域范围对软件开发复杂度有一定影响
2. 1. 2、对象 (面向对象的核心元素)
- 客观世界里任何实体都可被称为对象
- 软件中的对象是与问题域有一定关联的某个事物的抽象描述(参考系不同描述或许不同)
- 对象是一个封装数据属性和操作行为的实体
- 对象可以是有形的、具体的,也可以是无形的、概念的事物。(物理、概念、软件)
- 对象需要有标识、状态、行为
- UML中表示对象2:对象名下有下划线
2. 2、类
- 类是对一类具有相同特征的对象的描述(封装了类的属性和行为)
- 属性和操作取决于视点(问题域)
2. 3、抽象,封装,继承
2. 3. 1、抽象
- 抽象是抽取对问题域有帮助的对象属性的行为。
- 抽象是从众多事物中抽取出共同的、本质的特征。
- 问题域不同,抽象程度不同,抽象结果也不同。
2. 3. 2、封装
- 封装的含义:数据抽象、信息隐藏
- 封装的目的:
1、将对象的使用者和对象的设计者分开,使用者不必知道行为实现的细节,只需用设计者提供的消息来访问该对象。
2、把定义和实现分开,可大大提高软件的可维护性、可修改性。
2. 3. 3、继承
-
继承指子类自动获得父类中定义的数据、方法和关系,并可以添加新的成员的机制。
-
起始类称为基类、超类、父类或泛化类,而继承类称为派生类、子类或特化类。
-
继承可以提高软件可复用性,借助熟知事物理解新事物。
-
子类只关注自己特有的属性。
-
继承具有传递性,表示类之间的层次关系。
1、类间具有共享特性
2、类间具有差别或新增关系
3、类间具有层次关系 -
继承的好处:
1、实现代码复用和扩展
2、保证类之间的一致性
3、实现不同的抽象层次,实现多态处理
2. 4、接口,多态性
2. 4. 1、接口
- 接口是一组没有相应方法实现的操作,非常类似于仅包含抽象方法的抽象类。
- 接口是对象行为的描述,但并不给出对象的实现和状态。
- 接口一般只包含操作,不包含属性。
- 一个类可以实现多个接口,一个接口可以被多个类所实现。
- 使用接口比使用抽象类要安全,因为它可以避免许多与多重继承相关的问题。
- 如果需要几个类公共基类中没有的一些特性,且希望确保每个类自己实现这些特性,就应使用接口。
2. 4. 2、多态性
- 多态性定义:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
- 多态性是“一个接口,多种实现方法”。
- 使用接口可以实现多态。(接口-即插即用)
- 多态性的实现方式:
1、通过接口实现
2、通过继承实现
3、通过抽象类实现 - 多态性的优势:
1、增加了面向对象软件系统的灵活性
2、进一步减少了信息冗余
3、提高了软件的可重用性和可扩展性
面向对象技术正是利用多态提供的动态行为特性,为封装变化,适应变更,以达到系统的稳定。
2. 5、消息,结构与连接
2. 5. 1、消息
- 孤立的对象是无用的。
- 对象一旦建立了联系,就可以协作完成复杂的任务。
- 对象之间是通过相互发送消息进行协作的。
- 消息是向对象发出的服务请求。
- 消息传递机制:一个对象发送一个操作消息给另一个对象,接收消息的对象就执行此操作。
- 消息的属性:消息名、接受对象标志、服务标志、输入信息、回答信息。
- 一个对象能够接收多个形式、内容不同的消息。
- 相同形式的消息可以发送给不同的对象。
- 不同的对象对形式相同的消息可以有不同的解释,做出不同的反应。
- 消息包括同步消息和异步消息。
2. 5. 2、结构与消息
- 问题域中对象关系之间的描述:对象的分类关系、对象之间的组成关系、对象属性之间的静态关系、对象行为之间的动态关系。
- 面向对象方法用于以下四种方法描述对象之间的关系:
1、一般/特殊结构-分类
2、整体/部分结构-组成关系
3、实例连接-静态关系
4、消息连接-动态行为
- (1) 一般/特殊结构又称做分类结构,UML中泛化关系,包括单继承树形结构和多继承网络结构。
- (2) 整体/部分结构,又称为组成、组合结构,描述对象之间的组成关系。
- (3) 实例连接反映对象和对象间的静态关系。
- (4) 消息连接描述对象之间动态交互的联系,消息连接是有向的。
3、面向对象的分析原则
为了尽可能完成高质量、高效率的分析,分析过程应遵循如下原则:
(1) 抽象原则
- 系统中的对象是对显示世界事物的抽象。
- 类是对象的抽象
- 一般类是特殊类的抽象
- 属性是事物静态特征的抽象
- 操作是事物动态特种的抽象
(2) 分类原则
- 分类是把具有相同属性和行为的对象划分为一类,用类作为这些对象的抽象描述
- 通过不同程度的抽象可以形成一般/特殊结构
(3) 聚合原则
- 在面向对象分析中运用聚合原则将一个复杂的事物划分为几个组成部分,形成整体/部分结构。
(4) 关联原则
- 通过一个事物可以联想到另外一个事物。
- 在面向对象分析中运用关联原则可以在系统模型中明确表示对象之间的静态联系。(实例连接)
(5) 消息通信原则
- 对象之间只能通过消息进行通信。
- 由于封装性。
- 用消息连接表示对象之间的动态联系。
高层模块设计的准则:
- 高内聚
- 弱耦合(减少通信开销,减少依赖)
- 良好的可扩展性和灵活性