面向对象已经在VB和软工学习中都已经涉及过了,在学习UML中又遇到了,除了加深印象,更多的是让我们去深入了解并体会面向对象带给我们的便利之处。下面就对面向对象再展开归纳介绍。
面向对象技术 (Object-Oriented Technology)
面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。简言之:面向对象=对象+类+继承+通信
先对现实世界与面向对象技术进行一个比较
现实世界组成 | 面向对象技术 |
是由事物组成 | 用对象来描述事物 |
事物之间有共性,可以归纳 | 用类来抽象具有相同共性的对象 |
事物之间存在关系,需要交流 | 通过消息和方法完成 |
事物是个独立的实体 | 具有封装性 |
客观世界中的事物具有继承关系,用来简化对事物的描述和认识 | 具有继承性 |
复杂事物可以由多个简单事物组成 | 聚合关系 |
不同的事物收到同样的消息时所产生的行为不同 | 具有多态性 |
再通过导图引出一些概念吧。
1.对象
对象是系统中描述客观事物的一个实体,是构成系统的基本单位。对象可以是一个物理实体,比如一辆汽车 也可以是一个概念实体,比如一张图片 还可以是一个软件实体,比如一个软件的具体设计流程
2.类
类是现实世界中实体的形式化描述,类将该实体的数据和函数封装在一起。类的数据也叫属性、状态或特征,它表现类静态的一面。类的函数也叫功能、操作或服务,它表现类动态的一面。
类和对象的关系
对象是类的实际例子。如果将对象比作大象,狮子等,那么类可以抽象成一个动物
3.封装
封装是将相关的概念组成一个单元,然后通过一个名称来引用它‘。面向对象封装是将数据和基于数据的操作封装成一个整体对象,对数据的访问或修改只能通过对象对外提供的接口进行。 比如:电视机通过遥控进行各个台之间的转换,我们用户只需要会使用遥控即可,而不用知道电视内功能是怎样具体实现的。
4.继承
继承表示类之间的层次关系,这种关系使得某类对象可以继承另外一类对象的特征(attributes)和能力(operations),继承又可分为单继承和多继承,单继承是子类只从一个父类继承,而多继承中的子类可以从多于一个的父类继承,Java是单继承的语言,而C++允许多继承。
5.多态
多态性是一种方法,这种方法使得在多个类中可以定义同一个操作或属性名,并在每个类中可以有不同的实现。多态性使得一个属性或变量在不同的时期可以表示不同类的对象。
例子是VB中的水果多态。或者例如,在一般类“几何图形”中定义了一个行为“绘图”,但并不确定执行时到底画一个什么图形。特殊类“椭圆”和“多边形”都继承了几何图形类的绘图行为,但其功能却不同,一个是要画出一个椭圆,另一个是要画出一个多边形。这样一个绘图的消息发出后。椭圆、多边形等类的对象接收到这个消息后各自执行不同的绘图函数
6.抽象
抽象是通过特定的实例抽取共同特征以后形成概念的过程。它强调主要特征,忽略次要特征。一个对象是现实世界中一个实体的抽象,一个类足一组对象的抽象,抽象是一种单一化的描述,它强调给出与应用相关的特性,抛弃不相关的特性。
7.接口
所谓接口就是对操作规范的说明。接口只是说明操作应该做什么( What),但没有定义操作如何做( How)。接口可以理解成为类的一个特例,它只规定实现此接口的类的操作方法,而把真正的实现细节交由实现该接口的类去完成。
接口在面向对象分析和设计过程中起到了至关重要的桥梁作用,系统分析员通常先把有待实现的功能封装并定义成接口,而后期程序员依据此接口进行编码实现。
8.消息
对象向对象发出的服务请求,是对象之间的交互手段。
9.组件
组件是软件系统可替换的、物理的组成部分,它封装了实现体(实现某个职能).并提供了一组接口的实现方法。可以认为组件是一个封装的代码模块或大粒度的运行对的模块,也可将组件理解为具有一定功能、能够独立工作或同其他组件组合起来协词工作的对象。
对于组件,应当按可复用的要求进行设计、实现、打包、编写文档。组件应当是内聚的,并具有相当稳定的公开的接口。
为了使组件更切合实际、更有效地被复用,组件应当其各“可变性”(variability),以提高其通用性。组件应向复用者提供一些公共“特性”,另一方面还要提供可变的“特性”。针对不同的应用系统,只需对其可变部分进行适当的调节,复用者要根据复用的具体需要,改造组件的可变“特性”,即“客户化”。
10.关于面向对象设计方法OO
OO(object-oriented):基于对象概念,以对象为中心,以类和继承为构造机制,来认识,理解,刻画客观世界和设计,构建相应的软件系统的一门方法;本意----模拟人类的思维方式,使开发,维护,修改更加容易
OOA(object-oriented analysis):强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析-------其实就是进一步对oo进行细化,初步得出该oo的属性与方法(或者简单的理解:在得出的文档中对接口的粗略定义)
OOD(object-oriented design):OO方法中一个中间过渡环节,其主要作用是对ooa分析的结果作进一步的规范化整理,以便能够被OOP直接接受------整理和定义oo的属性和方法
OOP(object-oriented programming):把组件的实现和接口分开,并且让组件具有多态性
现在也只是初步的了解,相信随着以后的学习,会对面向对象设计理解的更深刻。