1、 什么是面向对象?很多初学者都会问起这个问题,软件工程学家Coad和Yourdon曾给出一个简单定义:面向对象=对象+类+继承+通信。如果一个软件系统使用上述4个概念设计并加以实现,则认为这个软件系统是面向对象的。面向对象技术的基本观点可以概括如下。(1)客观世界由对象组成,任何客观实体都是对象,复杂对象可以由简单对象组成。(2)具有相同数据和操作的对象可归纳成类,对象是类的一个实例。(3)类可以派生出子类,子类除了继承父类的全部特征外还可以有自己的特性。(4)对象之间的联系通过消息传递来实现。由于类的封装性,它具有某些对外界不可见的数据,这些数据只能通过消息请求调用可见方法来访问。面向对象方
2、法的基本出发点就是尽可能地按照人类认识世界的方法和思维方法来分析和解决问题,使人们分析、设计一个系统的方法尽可能接近认识一个系统的方法。下面分别介绍面向对象的几个核心元素。1.1对象(object)面向对象方法就是以对象为中心、为出发点的方法,所以对象的概念相当重要。现代汉语词典(商务印书馆,1996)的解释是:对象是行动或思考时作为目标的人或事物。广义地讲,对象可以是任何人或事物。在00方法中,对象同样有上述的含义。不过,可以定义得更精确一些:对象是一些属性及专用服务的封装体,它是问题空间中些东西的抽象。在面向对象的系统中,对象是基本的运行时的实体,它既包括数据(属性),也包括作用于数据的操
3、作(行为)。所以一个对象把属性和行为封装为一个整体。一个对象通常可由对象名、属性和操作3部分组成。由以上定义可知,对象就是我们在问题空间中要考虑的那些人或事物,它具有一组属性和一组操作,这些属性的值刻画了一个对象的状态;这些操作是对象的行为,通过它们改变对象的状态(即属性值)。对象尽可能自然而又灵活地模拟现实世界,这使我们能更准确地描述世界。数据和操作封装于对象的统一体中,它们不是分开的。这样,对象就具有较强的独立性和自治性,具有很好的模块性,为软件重用奠定了坚实的基础。考虑一个简单的对象:counter(计数器)。它有一个属性value保存计数器计数值。有三个服务:init()置value为
4、“0”,dec()使value减“1”,inc()使value增“1”。它们之间的关系如图5-1所示。图5-1 counter 对象 countervalueinit()dec()inc()1.2 封装(encapsulation)封装即信息隐藏。是面向对象方法的一个重要原则。封装是指把属性和操作封进一个对象里,它的内部信息对外界隐藏,不允许外界直接存取对象的属性,只能通过对象提供的有限的接口对对象的属性数据进行操作。对于外界来说,只能得知对象的外部行为而无法了解对象行为的内部实现细节,这样可以保证对象内部属性数据的安全性。当开发一个总体程序结构时,程序的每个成分应该封装或隐蔽一个单一的模块,
5、定义每一模块时应尽可能少地显露其内部处理。对象是个很好的封装体。它向外提供的界面包括一组数据结构(属性)和一组操作(服务),而把内部的实现细节(如函数体)隐蔽起来。把最不稳定的部分封装起来,需求变化就不太可怕了。对象实现了数据抽象,把数据和服务封装于一个内在的整体。因为这二者本来就是一个内在的整体,分离开来是不明智的。与封装密切相关的一个术语是可见性。它是指对象的属性和服务允许对象外部存取和引用的程度。我们已经讨论了封装的好处,然而封装也有它的副作用。如果强调严格的封装,则对象的任何属性都不允许外部直接存取,因此就要增加许多没有其它意义,只负责读或写的服务。这为编程增加了负担,增加了运行开销,
6、并且使程序显得臃肿。为了避免这一点,语言往往采取一种比较现实的灵活态度-允许对象有不同程度的可见性。1.3 类(class)在OO方法中,类的定义是:类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。类是一组具有相同数据结构和相同操作的对象的集合。类是对象的抽象,它将一组数据属性和在数据上的一组合法操作抽象封装。类好比是一个对象模板,基于类就可以生成多个具有不同属性值的对象,在类的定义中,可以为某个属性指定一个值,作为它的默认值。类是面向对象的程序设计语言提供的可再用软件成分,在面向对象的编程语言中,类是一个独立的程序单位,它
7、应该有一个类名并包括属性说明和服务说明两个主要部分。类的作用是定义对象。比如,程度中给出一个类的说明,然后以静态声明或动态创建等方式定义它的对象实例。有些类之间存在一般和特殊关系,即一些类是某个类的特殊情况,某个类是一些类的一般情况。这是一种“is-a”关系,即特殊类是一种一般类。例如“汽车”类、“轮船”类、“飞机”类都是一种“交通工具”类。特殊类是一般类的子类,一般类是特殊类的父类。同样“汽车”类还可以有更特殊的类,如“轿车”类、“货车”类等。在这种关系下形成一种层次的关联。1.4 继承(inheritance)继承是指子类可以自动拥有父类的全部属性与操作。这种使用已存在的定义作为基础建立新
8、定义的技术使得父类和子类之间能够共享数据和方法。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新内容。图5-2表示了父类A和它的子类B之间的继承关系。继承部分增加部分 A B从A继承 图5-2 类的继承关系描述当用一个类创建一个对象时,对象就继承了该类的全部语义性质。在定义一个新类时,也可以一方面继承一个旧类的语义性质,一方面加上自己特有的属性和操作。一个类继承另一个类,其关系有如父子,因此把继承者称为子类。继承一个单一的父类时叫单重继承,如果有两个及两个以上的父类则是多重继承。继承具有传递性,一个
9、子类除了具有自己的全部特性以外还具有该类上层全部基类的一切特性。继承简化了对现实世界的描述,定义子类时不必重复定义那些在父类中已经定义过的属性和操作,而只需专注于自己特有的属性与操作。继承对于软件复用是很有益的。在开发一个系统时,使特殊类继承一般类,这本身就是软件复用,然而其复用意义不仅如此。如果把用OO方法开发的类作为可复用构件提交到构件库,那么在开发新系统时不仅可以直接地复用这个类,还可以把它作为一般类,通过继承而实现复用,从而大大扩展了复用范围。1.5 消息(message)为了更好地模块化,对象不允许其他对象或函数访问它的私有数据,而只能向它发送消息。对象接收消息,根据消息及消息参数调
10、用自己的服务来改变自己的状态或返回结果。一条消息告诉一个对象做什么,它指出发送者、接收者、需要执行的服务、需要的参数。在面向对象方法中,完成一件事情的方法就是向有关对象发送消息,而不是以前熟悉的函数调用。消息体现了对象的自治性和独立性,对象间可通过消息实现交互,模拟现实世界。消息机制也控制了复杂性。1.6 多态性(polymorphism)多态性是面向对象技术的一个重要概念。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通常通过派生类重载基类中的同名函数来实现。多态性分为如下两种。(1)编译时的多态性。编译时的多态性是通过重载来实现的。系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。(2)运行时的多态性。运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。多态性一般可通过接口、继承和抽象类来实现。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。