面向对象
1. 面向对象的简介
面向对象(Object Oriented,OO)是软件开发方法,也是一种编程思想,它将现实生活中的事物映射到程序世界中,同时还是一种对现实世界理解和抽象的方法。
1.1 面向对象技术
面向对象技术包括以下三部分:
(1)面向对象分析
面向对象分析(object-oriented analysis,OOA)是指软件需求分析的一种带有约束性的方法,用于软件开发过程中的问题定义阶段,对问题进行抽象建模。通过使用实例建模、类和对象建模、组件建模和分布建模,产生一种描述系统功能和问题论域基本特征的综合文档。
(2)面向对象设计
面向对象设计(object-oriented design,OOD)是指将面向对象分析所创建的分析模型转变为软件构造蓝图的设计模型。面向对象设计的独特性,在于其具有基于抽象、信息隐藏、功能独立性和模块性建造系统等4个重要软件设计概念的能力。
(3)面向对象程序设计
面向对象程序设计(object-oriented programming,OOP)是指使用类和对象以及面向对象特有的概念进行编程,是以对象为中心,按对象及其联系来构造实现软件单位的程序设计。面向对象程序设计将在面向对象的问题求解所形成的对象模型的基础之上,选择一种面向对象的高级编程语言来具体实现这种模型。面向对象的程序设计的优点:封装性、自治性、安全性、扩展性。
2. 类和对象
对象是理解面向对象技术的关键。对象在不同的上下文中可能具有不同的含义。广义地说,“万事万物皆对象。” 也就是说,我们所接触到的现实世界中的一切事物都可称之为对象。而在现实世界中,许多对象具有相同的类型,常言道:“物以类聚。”因此有产生了类的概念。
2.1 对象
在面向对象的程序设计方法中,对象是一些相关的变量和方法的软件集,是可保存状态(信息)和一组操作(行为)的整体。现实世界中的对象具有两个共同特征,即状态和行为。
在面向对象设计的过程中,既可利用对象来代表现实世界中实物对象,有可使用软件对象来模拟抽象的概念。
因此,对象代表现实世界中可以明确标识的一个实体。
2.2 类
在软件设计中,虽然是“面向对象”,即关注的焦点是对象,但对象时依靠类来描述的。类实际上是对某种具有共同特征类型的一类对象的定义,即定义了一类对象的类型,属于该类型的所有对象都具有相同的变量和方法。
类和对象的区别是:类是同一种对象的集合的抽象,即同一类对象的变量和方法的原型。
因此,类是对象的软件模型,是一个抽象定义、一个模板,是具有相同属性和行为的一组对象的抽象。也有人将类称之为抽象数据类型。
2.3 消息
消息是对象间进行联系或者交互的手段,是一个对象向其他对象发请求执行某个操作的信号或命令。
2.4 类的成员
在定义一个类的时候,用变量来表示类的属性,这个属性是类的一份子,也是所谓的成员变量,而表现一个类的行为的过程或函数,则成为成员方法。类的成员变量和成员方法构成类的成员。
在定义一个类的时候,实际存在两种类型,即实例成员和类成员。
因此,一个类就有实例成员和类成员之分,实例变量个实例方法是一个对象中的成员,类变量和类方法时类中所有对象所共享的成员。可以直接通过类名使用类变量和类方法,也可以在对象中使用类变量和类方法,然后实例方法和实例变量必须在特定的实例中使用。
3. 抽象与封装
抽象与封装时面向对象程序设计的两个重要特点。
3.1 抽象
抽象是分析和设计中经常使用的一种重要的方法。软件开发中的抽象有两类,即过程抽象和数据抽象。
(1)过程抽象
过程抽象就是将整个系统的功能划分为若干部分,强调系统功能完成的过程和步骤。
(2)数据抽象
数据抽象就是把系统中需要处理的数据和在这些数据上的操作结合在一起,根据功能、性质和用途等因素抽象成不同的抽象数据类型,每个抽象数据类型既包含了数据,又包含了针对的这些数据的授权操作。
因此,数据抽象是比过程抽象更为严格、更为合理的抽象方法。
3.2 封装
3.2.1 封装的定义
封装就是指利用抽象数据类型将数据和基于数据的操作结合在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据之外被授权的操作,才能与这个抽象数据类型进行交互。
3.2.2 封装的意义
封装的意义有:
(1)确保数据的安全和系统的严密。
(2)重用性。即可以使用类或模块的可重用性。
4. 继承与多态
4.1 继承
4.1.1 继承的定义
继承就是面向对象的程序中两个类之间的一种关系,是一个类可以从另一个类继承状态和行为。被继承的类称为超类或父类,继承父类的类称之为子类。
一个父类可以同时拥有多个子类,这时这个父类实际上就是所有子类的公共变量和方法的集合,每一个子类产品能够父类继承了这些变量和方法。
4.1.2 继承的意义
通过继承,可以在不同的子类中多次重新使用父类中的代码,使程序结构更清晰,而子类有可以实现一些自己独特的行为。
因此,使用继承可提高程序抽象程度;可提高代码的重用性,从而提高程序开发的效率,降低维护成本。
4.2 多态
4.2.1 多态的定义
多态是指同名的多个方法共存于同一个程序中的情况,在软件设计过程中,有时需要利用这种“重名”现象来提高程序的抽象性和简洁性。
多态的含义是一个消息可以与不同的对象结合,产生不同的行为,而且这些对象属于不同类。同意消息可以用不同方法解释,方法的解释依赖于接收消息的类,而不依赖发送消息的实例。多态通常是一个消息在不同的类中,用不同的方法实现的。
4.2.2 多态意义
多态的意义是,可大大提高程序的抽象程度和简洁性;可极大的降低类和程序模块的耦合性;提高类和模块的封闭性,使得在类和模块之外不需要了解被调用方法的实施细节就可很好的协调工作。
所谓类就是把具有共同特性的事物抽象到一起的总称。俗话说物以类聚,这个类就是同一类型