1.1面向对象的概念
“面向对象”是 围绕现实世界中的概念来组织系统模型的一种崭新的思维方式,其基本构造是对象,这些对象把特定的数据以及与该数据相关的行为(或叫操作、方法)紧密的结合在一起组成单一实体,而“面向对象”把这些相互独立的对象有效的紧密结合在一起组织系统。1.2面向对象的实质
“面向对象技术”的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能地接近人类认识世界和解决问题的方法与过程,也就是使描述问题的问题空间(也称问题域)与实现解法的解空间(也称求解域)在结构上尽可能一致。“面向对象方法”所提供的“对象”概念,是让软件开发者自己定义或选取解空间对象,然后把软件系统作为一系列离散的解空间对象的集合。应该使这些解空间的对象与问题空间的对象尽可能的一致。这些解空间对象彼此之间通过发送消息而相互作用,从而得出问题的解。也就是说,“面向对象方法”是一种崭新的思维方法,它不是把程序看作是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合。每个对象都是一个有生命的个体,它有自己的数据、操作、功能和目的。这样做就向着减少语义断层的方向迈出了一大步,在许多系统中解空间对象都可以直接模拟问题空间的对象,解空间与问题空间结构十分地一致,因此,这样的程序易于理解和维护。
OO方法强调从客观世界的固有事物出发来构造系统,用人类习惯的思维方法来认识世界、理解和描述客观事物,强调最终建立的软件系统能够映射问题域,对象及对象之间的关系能够如实反映问题域中的事物及其关系。
1.3面向对象的要点
概括地说,面向对象技术具有以下四个要点:1.认为现实世界是由各种对象组成,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成。按此种观点,可以认为整个世界就是一个最复杂的对象。面向对象的软件系统是由对象组成,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。
2.把所有对象都划分成各种对象类(简称为类),每个对象类定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。每当建立这个对象类的一个新实例时,就按照类中对数据的定义,为这个新对象生成一组专用的数据,以便描述该对象独特的属性值。
3.按照子类(也成派生类)与父类的关系,把若干个对象类组成一个层次结构的系统。在这种层次结构中,通常下层的派生类具有和上层的父类相同的特性(包括数据结构和方法),这种现象称为继承。但是如果在子类中对某些特性又做了重新描述,则在子类中的这些特性将以新的描述为准(Overloading),即地层的特性将屏蔽高层的同名特性。
4.对象之间仅能通过传递消息相联系。对象与传统的数据有本质的区别,它不是被动地等待外界对它施加操作,相反,它是进行处理的主体,必须发出消息请求它执行他的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。即,一切局部于该对象的私有信息,都被封装在该对象类的定义中,好像装在一个不透明的“黑匣子”里一样,外界看不见,更不能直接使用,这就是“封装性”。
综上所述,面向对象可以用下列方程来表达:
OO = Objects + Classes + Inheritance + Communication with message
也就是说,面向对象就是既使用对象又使用类和继承机制,而且对象之间仅能够通过传递消息实现彼此通信。
如果仅使用对象和消息,则这种方法可以称为基于对象的(Object-based)方法,而不能称为面向对象的方法;如果进一步要求把所有对象都划分为类,则这种方法可称为基于类的(Class-based)方法,但仍不是面向对象方法。只有同时使用对象、类、继承和消息的方法,才是真正的面向对象方法。
1.4面向对象的特性
面向对象技术具有三个基本的特性:封装、继承与多态。1.封装
在程序设计中,封装是指将一个数据和与这个数据有关的操作集合在一起,形成一个能动的实体——对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部接口访问对象即可。因此,从用户的观点来看,这些对象的行为就像包含在一个“黑匣子”里,是隐蔽的、看不见的。
封装有两个基本前提:一是对象必须是完备的,即必须能够表示整个概念,描述整个问题的各个方面;二是私有性。大多数对象都需要对其内部的数据和过程限制处理权限。私有性不但可以保证对对象的正确操作,而且有利于查错,使一些对象的成员函数私有化,减少它们被处理的机会,于是在追踪时许多地方都可以不必去查。
封装不是面向对象语言所独有的特性,但这种在单一实体中把数据结构和行为捆绑在一起的能力,使封装比传统的把数据结构和行为分离的语言更加清晰、更强有力。
2.继承
继承表明类之间的关系。类不仅仅说明一组对象上的约束,还说明与其他类之间的关系。两个类型可以有共同的特性和行为,但是,一个类型可能包括比另一个类型更多的特性,也可以处理更多的消息。继承表示了基类和派生类之间的相似性。一个基类具有所有由它派生出来的类所共有的特性和行为,而派生类则通过继承重用了基类的特性和行为。
抽象基类提供了公共接口,当希望通过公共接口操作一组(派生)类时就创建抽象基类。
3.多态
多态的含义是相同的行为(在基类中定义)在不同的类中有着不同的实现(在子类中实现),或者更彻底的说,多态性就是以相同的指令唤起不同的函数。
当处理类型层次结构时,程序员常常希望不把对象看作是某一特殊类型的成员,而把它看作基本类型的成员,这样就可以编写不依耐于特殊类型的代码,在添加新的子类后也不影响原来的代码,这是扩展面向对象程序以处理新情况的最普通的方法——通过派生新的子类来扩展程序功能,这个能力极大地减少了软件维护的花费(所谓“软件危机”正是由软件的实际花费远远超出人们的想象而产生的)。
1.5面向对象的优点
面向对象方法的主要优点是:1.与人类习惯的思维方法一致;
2.稳定性好;
3.可重用性好;
4.可维护性好;
•面向对象的软件稳定性比较好;
•面向对象的软件容易修改;
•面向对象的软件容易修改;
•易于测试和调试。
一个设计良好的面向对象系统是易于扩展和修改的,因此能够适应不断增加的新需求,并从长远的软件质量指标来考虑。
1.6面向对象开发
面向对象开发涉及到软件生命周期的前期部分:分析、设计和实现,由此产生了面向对象领域的三大技术:面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。对象模型技术(OMT)是我们在进行面向对象分析与设计(OOA&D)时常用的建模方法,它涉及到对象发现、对象分析、对象设计以及对象实现。OMT用三种模型来刻画一个系统:对象模型,它描述系统中的对象和它们之间的联系;动态模型,它描述系统中对象间的相互作用;功能模型,它描述系统中数据的变化。
面向对象开发主要有以下几个步骤:(需求)分析、系统分析(设计)、对象分析(设计)、实现。