面向对象程序设计.ppt_第1页
面向对象程序设计.ppt_第2页
面向对象程序设计.ppt_第3页
面向对象程序设计.ppt_第4页
面向对象程序设计.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 面向对象程序设计,基本要求 1.了解面向对象程序设计的思想及内涵; 2.了解面向对象的基本概念和面向对象系统的特点; 3.了解面向对象的开发方法。,第一章 面向对象程序设计,主要内容 1.1 面向对象程序设计概述 1.2 面向对象的基本概念 1.3 面向对象系统的特点 1.4 面向对象的开发方法,1.1 面向对象程序设计概述,1.1.1 面向对象思想及内涵 在程序开发和应用领域,特别是大型系统的开发和使用,软件开发人员一直受到两大问题的困扰:一是如何克服系统复杂性的障碍;二是如何在计算机系统中自然的表示客观世界,即对象模型。系统的复杂性主要体现在以下3个方面:,1.1 面向对象程序设计概述,由于系统分析人员、系统设计人员和程序实施人员之间所采用的语言符号、表述方式等的不同,使他们之间不能很好地直接沟通,系统分析人员和程序设计人员的计划和说明不能被实施人员正确理解,实施人员对系统分析的意见不能及时反馈到系统分析人员和程序设计人员那里,这就为系统的顺利实施带来了很大的障碍。,1.1 面向对象程序设计概述,在程序的实施过程中,由于大型系统必须由多人合作完成,各人或各小组完成程序中的一个或几个模块,如何划分任务、估计和分配资源、掌握每个程序员的进度等就构成了进行大型系统设计时管理的复杂性,另外,即使每个人或小组所设计的模块都无可挑剔,但将这些模块整合在一起时未必不会出现问题,因此如何权衡模块内聚度和模块间的耦合度,也是编程人员必须面对的问题之一。,1.1 面向对象程序设计概述,大型程序具有大量的系统状态,系统的运行就是各种系统状态之间的转换,而两个系统状态之间还存在许多的中间状态。如何正确的处理这些系统状态以及中间状态、组织高效的系统程序逻辑和验证系统的正确性都是非常困难的。,1.1 面向对象程序设计概述,面向对象的思想就是:如何在计算机系统中对现实世界进行直接模拟,将日常事务中的处理方法和流程直接移植到计算机系统中去。 面向对象是软件程序设计中的一种新思想,由于这种新思想的引入,使我们的程序设计能更贴近现实,使系统设计、分析和实施等过程有一种统一的符号和语言,从而使系统分析人员、系统设计人员、实施人员之间能够更顺利地沟通。另一方面,面向对象思想能够提供高效的代码共享机制,从而使软件重用获得生机。基于上述原因,面向对象思想已为人们所接受,并成为程序设计思想的主流。,1.1 面向对象程序设计概述,简单的说,通过使用面向对象的方法可以把一组看似相互之间毫无联系的对象有效地集成在一起,这些对象都包含代表各自特征的数据以及对数据的操作即对象的行为。通过面向对象方法,可以把与该对象相关的数据和操作封装在一个相对独立的实体中,该实体有自己的功能和特征,它也可以采用某种机制与外界交互。 面向对象技术追求的是软件系统对现实世界近似的或直接的模拟,它尽可能实现将现实世界中的事物直接映射到软件系统的解空间。它希望用最小的力气,最大限度地利用软件系统来解决现实世界中的问题。,1.1 面向对象程序设计概述,1.1.2 面向对象程序设计 面向对象程序设计(OOP)是通过为数据和代码建立分块内存区域的方法来对程序进行模块化设计的一种程序设计方法,这些模块可以被作为样板,在需要时建立其副本。 面向对象程序设计方法利用面向对象思想进行软件系统的设计和实现。这种新的方法是在利用面向对象思想的基础上,通过增加软件的可扩充性和可重用性,来改善并提高程序员的生产能力,并能控制软件的复杂性和软件维护的开销。在使用面向对象程序设计方法时,软件开发的分析和设计阶段能更加紧密地与实施阶段相联系。,1.1 面向对象程序设计概述,面向对象设计方法追求的是现实问题空间与软件系统解空间的近似和直接模拟。它希望用户用最小的力气,最大限度地利用软件系统进行求解。 在具体学习OOP之前,请先注意一下两点: OOP是一种软件设计和实现的思想。 尽管支持OOP的语言将使实现面向对象程序设计变得容易,但是OOP和程序设计语言无关。,1.1 面向对象程序设计概述,面向对象的设计方法基于信息隐藏和抽象数据类型的概念。它把系统中的所有资源,如数据、模块以及系统都看成对象,每个对象把一个数据类型和一组过程封装在一起,使得这组过程负责这种数据类型的处理,并在定义对象时可以规定外界在其上运行的权限。可以简单地这样认为: 面向对象数据抽象信息隐藏继承性多态性,1.1 面向对象程序设计概述,面向对象程序设计方法之所以被广泛采用,是因为它具有许多优良的特性。 模块性。对象是一个功能和数据独立的单元,相互之间只能通过对象认可的途径进行通信,相互没有预料不到的影响,也可以较为自由地为各个不同的软件系统所用。 封装功能。为信息隐藏提供了具体的实现手段,用户不必清楚对象的内部细节,只要了解其功能描述即可使用。,1.1 面向对象程序设计概述,代码共享。继承提供了一种代码共享的手段,可以避免重复的代码设计,使得面向对象的方法确实有效。 灵活性。对象的功能执行是在消息传递时确定的,支持对象的主体特征,使得对象可以根据自身的特点进行功能实现,提高了程序设计的灵活性。 易维护性。对象实现了抽象和封装,使其中可能出现的错误限制在自身,不会向外传播,易于检测和修改。 增量型设计。面向对象系统可以通过继承机制不断扩充功能,而不影响原有软件的运行。,1.1 面向对象程序设计概述,1.1.3 面向对象程序设计语言 面向对象程序设计语言的主要优点在于它提供了一种面向对象程序运行所需要的环境。这种环境最主要的特征就是以对象作为程序的主要单位,它将数据及对这些数据的操作功能以及与其他对象的通信的能力都封装在了一起。 目前使用的最多面向对象程序设计语言主要有Java、C+、C#等。本教材主要通过C#来介绍面向对象程序设计的相关方法和技术。,1.2 面向对象的基本概念,1.2.1对象 对象是面向对象思想的核心概念,它是构成面向对象系统的基础。要掌握面向对象思想,首先必须能够正确地认识和理解对象的概念。 从广义上讲,对象就是人们所关心的事物,它是系统所针对的问题域中的人、地点、事物等概念的抽象。对象存在于现实世界里,是人们对现实世界的理解和抽象,它可能是任何类型系统的一部分。 比如,对于一个学校的学籍管理系统,教师、学生、课程等都可以纳入对象的范畴。在比如,组成一台电脑的所有配件都是对象。,1.2 面向对象的基本概念,1.2.1对象 在面向对象理论体系中,面向对象方法学将对象定义为:对象是一个逻辑实体,它是一组信息以及作用于这些信息的操作的描述。也就是说,对象是将其自身所固有的状态特征或属性与可以对这些状态施加的操作结合在一起所构成的独立实体。 面向对象系统中的对象通常与现实世界中的实体相对应,它具有如下特性: 有一个名字作为对象在系统中的标识,不同对象有不同的名字,对对象的引用也是通过其名字进行的。,1.2 面向对象的基本概念,1.2.1对象 有一组描述它的特征的状态,这些状态可以由一个或多个属性构成,同类型的对象具有同类型的状态,它们主要是通过这些状态的不同来区别的。 有一组操作,每个操作决定对象的一种功能或行为,它体现了对象存在的意义,也是对象之间交互的手段。对象的操作可以分为两类:一类是自身所承受的操作,这类操作只能供对象内部使用;另一类是施加于其他对象的操作,通过这类操作,对象就可以与其他对象进行交互了。,1.2 面向对象的基本概念,1.2.1对象 在用面向对象的方法进行软件开发时,根据开发过程的不同,可将对象分为三种不同的类型的对象:现实对象,即现实生活中存在的实体,是我们所模拟系统的原始构成;问题对象是对象在问题中的抽象,它是现实对象在计算机解空间中的直接映射;计算机对象是问题对象在计算机中的表示,即问题对象的计算机实现。现实对象通过抽象变成问题对象,最后用计算机将它们表示出来。这三种对象的关系如图1.1所示。,1.2 面向对象的基本概念,1.2.1对象 图1.1 三种对象之间的关系,1.2 面向对象的基本概念,1.2.1对象 一个对象之所以区别于其他对象,就是因为它与别的对象相比有不同的状态,另外,系统的功能是通过服务和信息的传递来改变某些对象的状态实现的。因此,对象本身应该具有一定的状态、并具有保持和记忆这些状态的功能。 对象的状态是由其属性决定的,因此,对象的属性的选取应该遵循的最基本的原则是:要能反映对象的基本特征,它是对象真正需要记忆的特征或数据,这些特征或数据能反映对象的基本性质。通过这些特征能够将该对象区别于其他对象。比如对“人”这个对象,可以选择如下一些属性:姓名、身高、性别、体重等。,1.2 面向对象的基本概念,1.2.1对象 从对象属性的来源可以把属性划分为四类: 描述性属性:用于描述对象特征的属性,属性值随对象的产生而产生,并随着对象的改变而改变。 定义性属性:是将一个对象区别于同类型其他对象的属性,不同的定义性属性值可能产生不同的对象。 综合可得属性:为了某种目的将其他属性通过某种关系整合在一起而形成的属性。这类属性并不能单独存在,它的属性值是由其他属性值决定的。,1.2 面向对象的基本概念,1.2.1对象 偶尔可得属性:在一定的条件下,这类属性可以由其他属性决定,此时属性值可以由其他数据获得。与综合可得属性相比,这类属性具有一定的独立性。 现实世界的各种事物都是相互联系的,只有这样才能构成一个有机的整体。与此相对应,在面向对象系统中,为了达到某种目的或实现某些功能,通常由多个对象共同协作完成,因此要求对象之间也必须能够交互,这种交互通常是通过消息进行的。对象与外部对象的每一个交互都称为对象的一个行为。对象的行为包括对象向别的对象发送消息以及该对象接收别的对象发送的消息。,1.2 面向对象的基本概念,1.2.1对象 消息是对象之间相互请求或相互协作的途径,是要求某个对象执行其中某个功能操作的规格的说明。 对象的一个重要特征表现在它的私有存储单元只能由它自己的操作进行处理,消息是外界能够引用对象操作及获得对象状态的惟一方式。这个特征确保了对象的实现只依赖于它本身的状态和所能接受的消息,而不依赖于其他对象的内部细节。 对象的行为可以分为内部行为和外部行为,相应地消息也可以分为私有消息和公有消息。私有消息只能在对象内部传递,这类消息不对外发送,它主要用于对象内部的数据处理。公有消息是向别的对象发送的消息,它是对象与外界交互的主要途径。任何对象都必须有公有消息,否则该对象就无法与外界联系,因此就没有存在的价值。,1.2 面向对象的基本概念,1.2.2 类 类是具有共同特点的一组对象的抽象,它提取该组对象的共同属性和操作,从抽象层次描述这组对象。类是构成某些对象系统的最基本的单位,是面向对象系统中最基本的概念之一。 类是创建对象的模板,以操作、表示和算法的形式完整地定义了一组对象的行为,因此,类可以被认为是一种用户定义的数据类型,它完整地描述了规范说明和实现。类的内涵由类模板给出,而外延是该类的有关对象。通过类可以产生同类型的其他对象,对象可以看成是类的具体实例。类是抽象的概念,而对象是类的一个具体实例。通过类可以显示出每个对象所具有的相同结构和行为。同一个类的对象之间有两类不同:一是每个对象具有不同的句柄;二是任何特定时刻,每个对象可能有不同的状态。,1.2 面向对象的基本概念,1.2.2 类 可以作为面向对象系统的具有特定功能的一个模块,可以作为模块划分的一种手段和依据。类还是代码共享的手段。在类中提供了一种代码共享机制,即继承,通过继承,派生类可以直接共享基类的属性和操作。,1.3 面向对象系统的特点,1.3.1 封装性 封装是一个通用的术语,主要指那些现实数据抽象的技术。因此,封装的概念隐含着提供支持模块化和信息隐藏的机制。这样,在支持封装的技术和数据抽象原理之间存在着一一对应的关系。 在程序设计中,封装是指将一组数据和与这些数据有关的操作放在一起,形成一个能动的实体,即对象。用户不必知道对象行为的实现细节,只需根据对象提供的外部接口访问对象。因此从用户的角度来看,这些对象的行为就像包含在一个“黑匣子”里,是隐藏的、看不见的。,1.3 面向对象系统的特点,1.3.1 封装性 封装将系统中的一个可识别的实体中的各种特性聚集在一个逻辑单元即对象中,而且,对象的访问被限制在一个严格定义的接口上。封装是一种通过定义严格的外部接口在单独编写的模块之间减少相互依赖的技术。一个模块的外部接口在模块和它的用户之间起着契约的作用。一个模块可以被重新实现,只要新的实现支持相同的外部接口,这种改变就不会影响它的用户,因此就可以控制这种改变产生的后果。,1.3 面向对象系统的特点,1.3.1 封装性 一个对象要具有封装性,应该具有如下几个条件: 具有一个清楚的边界,对象的所有私有数据、内部程序的细节都被固定在这个边界内。 具有一个接口,这个接口描述了对象之间的请求和响应等相互操作,它是公有消息的集合。 对象内部的实现和实现代码受到封装壳的保护,其他对象不能直接修改本对象所拥有的数据和代码。,1.3 面向对象系统的特点,1.3.1 封装性 面向对象系统的封装性是一种信息隐藏技术,它使系统设计员能够清楚地表明他们所提供的服务界面,用户只能看到对象所提供的服务,而看不到其中的数据和代码细节。因此,从用户的角度来看,对象提供了一组服务,而服务的具体实现却被隐藏了。 面向对象系统中的封装单位为对象,该对象的特性是由它所属类的说明来描述的。除了对象的封装之外,类概念本身也具有一种封装的意义,它将数据和与数据有关的操作集合封装在了一起,建立了良好的接口,且反映了抽象数据类型的思想。,1.3 面向对象系统的特点,1.3.2 继承性 继承是一个对象可以获得另一个对象的特性的机制,它支持层次分类的概念。 继承在自然界中广泛存在,比如子女继承了父母的某些特性。在面向对象系统中,把被继承的类称为父类或基类,把通过继承得到的类称为子类或派生类。子类也可以被别的类所继承。 继承可以分为单继承和多继承。若一个类只有一个父类,则称为单继承。当一个类有多个父类时,则称为多继承。,1.3 面向对象系统的特点,1.3.2 继承性 子类继承父类有两个方面的内容:其一是结构方面的继承;其二是操作方面的继承。 继承是面向对象程序设计语言的主要特点之一,采用继承的语言可以带来如下好处: 通过类的继承关系,使公共的特征能够共享,提高了软件的重用性。,1.3 面向对象系统的特点,1.3.2 继承性 首先进行共同特征的设计和验证,然后自顶向下来开发子类,逐步加入新的内容,这符合逐步求精的软件工程原则。 便于实现多态性。 便于系统的扩展。 类层次是分类和信息组织的有效方法,它反映了现实世界中普遍存在的一般和特殊的关系,也反映了人类认识世界的演绎方法。,1.3 面向对象系统的特点,1.3.3 多态性 多态性是人们日常生活中经常遇到的概念,例如:开小汽车、开卡车、开拖拉机、开火车都是开,但作用的对象不同,其具体的动作也不同。但都表达了同样的含义。 通常,多态性的概念经常被表述为“一个接口,多种方法”。这意味着可以将一组相关的动作设计成为一个单独的接口。通过允许相同的接口来实现通用行为的类,多态性有助于减少复杂性。当行为应用于各种情形时,选择特定的行为(方法)是编译器的工作。程序员不需要手工做出这种选择,而只须记住和利用通用接口即可。,1.3 面向对象系统的特点,1.3.3 多态性 面向对象系统中多态性主要通过以下两种方式来实现。 重载:使用这种技术,相同的名字可以在不同的语境中被重载为不同的特性署名。语境信息用于解决署名的模糊性。 参数化多态性:这种多态性在面向对象的模型中常以类属的形式出现。简单地说,类属是使用一个类型参数化一段软件的能力。参数化的类型可以被用来作为构造软件的要素。类属提供了表示共享一个通用描述的几个不同的分类的速写形式,结果,类属节省了程序员为书写一个通用算法在各种使用情况下需要对相同部分进行描述的时间;而包含多态性则提供了一种更一般的机制来表达分类之间的关系。,1.3 面向对象系统的特点,1.3.3 多态性 正是由于多态性,才使人们在处理问题时不需要涉及具体的数据结构和类型,只着重于揭示系统的逻辑合理性,从而使设计可在更高层次上进行,简化了处理问题的复杂性。同时使设计的问题更具有良好的可扩充性。,1.4 面向对象的开发方法,1.4.1 面向对象的分析 面向对象的分析(Object-Oriented Analysis,OOA)就是运用面向对象的方法对目标系统进行分析和理解,找出描述问题域和系统责任所需要的对象,定义对象的基本框架(包括对象的属性、操作及它们之间的关系),最后得到能够满足用户需求的系统分析模型。OOA主要有以下5项任务。 (1)识别问题域中的对象和类。通过对问题域和系统责任的深入分析,尽可能地找出与应用有关的对象和类,并从中筛选出真正有用的对象和类。,1.4 面向对象的开发方法,1.4.1 面向对象的分析 (2)确定结构。找出对象和类中存在的各种整体部分结构和一般特殊结构,并进一步确定这些结构组合而成的多重结构。 (3)确定主题。如果系统包含大量的对象和类,那么可以划分出不同的应用主题域

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论