面向对象技术总论课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《面向对象技术总论课件.ppt》由会员分享,可在线阅读,更多相关《面向对象技术总论课件.ppt(176页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象技术总论第1页,此课件共176页哦 7.1 概述概述面向对象方法论面向对象方法论面向对象技术的内容包括面向对象系统分析技术、系统设计技术、程序设计技术、测试技术以及各种基于面向对象技术的体系结构、框架、组件、中间件等。面向对象技术的基础是面向对象程序设计,后者是程序结构化发展的必然产物。众所周知,高级程序设计语言经历了非结构化、结构化、面向对象三个发展阶段,这三个阶段的进化都是针对程序的结构和系统分析方法而做出的。程序的结构是指程序代码之间的关系。每到一个新的阶段,程序的结构就更加完善、更加复杂,代码也更容易重用,抽象程度也更高。第2页,此课件共176页哦软件系统分析方法研究将问题域(
2、现实世界)向求解域(程序域)转换和映射的方法,其目的是把问题域(现实世界)中的概念或者处理过程转换或映射成程序的元素和算法。问题域(现实世界)相对来说是不变的或者变化较缓慢的,但系统分析方法却根据程序设计方法的不同而改变,因此系统分析方法依赖于程序设计技术,依赖于程序设计元素,参见图7.1。结构化分析方法和面向对象分析方法则又分别依赖于结构化程序设计语言和面向对象程序设计语言。第3页,此课件共176页哦图7.1 系统分析方法对程序设计技术的依赖性 第4页,此课件共176页哦非结构化分析方法就是要把问题域或现实世界中的概念和处理,如员工工资、计算工资等转换成变量定义和对变量进行处理的语句,其基本
3、元素是变量和语句,即所谓的数据结构+算法。由于当时程序规模普遍比较小,运行和应用环境也比较单一,因此不太考虑程序结构或者软件结构问题。整体来说,非结构化技术是重视算法轻视结构的一种方法。第5页,此课件共176页哦结构化技术的基本元素是定义良好的程序结构元素,如子程序(函数)结构和单入口/单出口的控制结构。前者是程序的静态结构,后者则是程序的动态结构。子程序结构构成了整个程序的静态结构,是动态控制结构的基础(严格地说,每个语句都可以看成是对函数的调用)。结构化分析方法就是要把问题域(现实世界)中的问题(概念、处理)转换成程序中的数据结构和子程序(函数)。在这类方法中,可以认为:程序=数据结构+函
4、数结构+函数调用。相应的数据流分析方法则将现实世界或者问题域中的业务处理转换为程序的函数结构,这个过程称为分析过程,将系统的结构变成更适合于程序域的形式,比如说具有重用、高效、稳定等特征的结构,则是设计过程。第6页,此课件共176页哦到了面向对象技术阶段,程序的基本元素是数据结构和函数结构的统一体“类”。类是程序中的静态元素,而动态元素是对象和消息。面向对象方法认为:程序=类结构+对象+消息。面向对象分析的任务则是把现实世界中的概念或者处理都转换为程序域中的类和方法,将现实世界中的过程转换为对象之间的交互过程。面向对象设计使这种类和对象交互更加适合于计算机系统实现,更加合理和高效,更加容易重用
5、。例如将员工、工资都转换成求解域中的类,计算某位员工工资的过程称为向该员工对象发消息。第7页,此课件共176页哦如上所述,新一代的程序设计语言技术并不是简单地否定上一代语言,而是在上一代语言的基础上增加新的程序结构元素(函数、类),从而实现更复杂的程序结构。这种新的程序元素更直观、更真实、更自然、更完整地抽象了现实世界中的数据和处理(或者事物与概念),更好地抽象了程序中的变量和代码,也进一步增强了程序的易读性、安全性、稳定性和重用性,同时改变了系统的分析和设计方法。归根结底,程序设计语言的发展就是程序结构以及建立在其基础上的分析、设计方法的发展。第8页,此课件共176页哦上面的例子表明,实现同
6、样的功能可以采用不同的程序元素、程序结构或者程序设计技术。高级的程序设计方法更擅长解决复杂的问题,因为其程序元素和程序结构更为复杂。这实际上是自然界和社会系统的一个普遍规律,即内部结构决定外部功能。如果把系统解决的问题比做该系统实现的外部功能,而把实现这些功能的程序元素及其关系看做是内部结构,越复杂的内部结构就预示着系统的功能越复杂、越强大,比如说,人的大脑结构要比动物的大脑结构复杂得多,因此其功能也要强大得多。第9页,此课件共176页哦面向对象的程序结构要比面向过程的程序结构更复杂,因此可以实现的功能也就更加强大。程序设计语言技术的发展历史充分证明了客观和主观系统进化中,功能和结构之间关系的
7、一般规律。图7.2表现了系统外部功能和内部结构之间的关系,其内部结构也是分层次的,这也符合了人认识世界的一般规律:由外向内、由表及里。第10页,此课件共176页哦图7.2 软件系统外部功能和内部结构之间的关系 第11页,此课件共176页哦图7.3 软件系统外部功能和内部结构关系的例子 第12页,此课件共176页哦 7.2 面向对象技术的基本概念面向对象技术的基本概念7.2.1 类类对象是指现实世界或者概念世界中的任何事物,类是具有相同结构特征的对象的结构抽象。此结构特征包括对象的属性特征和操作接口特征。属性特征定义了所有对象都具有的属性名称及类型;操作接口特征则定义了所有对象都具有的操作和方法
8、。第13页,此课件共176页哦面向对象程序语言中的类是一个代码的预定义模块或者程序结构元素,类似于函数、结构体或者记录类型定义,其中包含了相关的变量和函数定义。类中的变量称为属性或者成员变量;类中的函数称为成员函数(操作和方法)。操作和方法的区别在于:操作强调其操作接口,方法则强调实现方式和算法。可以把现实世界中的对象映射为程序语言中的类,有时候这种映射比较困难且不明显,则可在其间增加一个概念世界或者概念模型。这种映射的过程即为面向对象的系统分析,如图7.4所示。第14页,此课件共176页哦图7.4 现实世界向计算机世界的转换 第15页,此课件共176页哦现实世界中的对象一定能够抽象成类,但程
9、序语言中的类则不一定有现实世界原型。这种不对称性反映了信息系统的特殊性,即程序模型并不一定是现实世界的原始或者简单的等价。因为现实世界中的任何事物都可以被抽象为类,因此可以把面向对象看成是一种世界观和方法论,在这种世界观和方法论基础上,现实世界被转换成程序世界就显得比较自然。例如:企业中的员工、仓库、库存帐目、商品及类别、物体、力等。第16页,此课件共176页哦在程序设计语言中,类是一个完整的、独立的、可重用的,具有低耦合、高内聚特性的程序模块。类相当于一种自定义数据类型,它类似于C语言中的结构体类型(C+本身就可以使用strut关键字来定义类),不仅包含数据结构也包含操作结构。数据类型作为程
10、序语言中进行变量内存分配、类型匹配、操作检查的基础,为程序的一致性和安全性提供了重要的保证。因此,类概念的引入从类型角度进一步提高了程序的安全性。第17页,此课件共176页哦7.2.2 对象及对象实例对象及对象实例现实世界中的具体事物就是对象或者对象实例,类则是对象实例的结构抽象。每个对象实例一般具有三方面的特性(亦称对象“三要素”):(1)确定的标识,能够被唯一地确认。(2)具有一定的属性,表示其性质或状态。(3)具有一定的行为能力或者操作能力,可给外界提供服务或者通过操作改变其状态。第18页,此课件共176页哦对象标识也是对象属性之一,是一类特殊的属性,类似于实体关系模型中的主码。应当注意
11、,对象标识和对象在程序中的标识是不一样的,前者是对象本身的固有属性,后者是在程序空间中给该对象起的名字,仅供程序中使用。现实世界中的任何事物都可以抽象成对象,例如具有具体物质形态的对象,如员工、计算机、汽车等;具有抽象物质形态的对象,如银行账户、力等。第19页,此课件共176页哦面向对象本身就是一种世界观以及由此派生的方法论,是一种观察世界和认识世界的方式。在面向对象的世界观中,世界是由对象及其关系组成的,对象是由属性和行为组成的,对象之间具有各种各样的联系。类是对象结构的抽象,关系是对象之间联系的抽象。对象世界的发展变化过程就是对象之间的交互过程(面向过程也是一种世界观,认为世界是由过程组成
12、的,每个过程都有自己的目标和处理的对象)。面向对象的世界观中的属性和操作刚好对应了程序世界中保存数据或者状态的变量和实现一定功能的函数。属性是事物的性质和状态描述;行为是对属性的操作,可以对外提供服务,属性则是行为的基础和操作的内容。第20页,此课件共176页哦根据属性和行为的侧重点不同,对象又可以分成实体对象和过程对象,前者强调对象的状态描述,例如“学生”对象;后者强调对象的过程特性,例如“流程”对象。现实世界中的事物都是有联系的,对象之间也有联系。例如对象间的组成关系:如汽车对象是由零件对象组成的;关联关系(信息联系):如老板有员工的联系方式。对象之间有些联系是暂时的:如某人向你问了一下路
13、(发送消息),你向其提供了服务;有些联系则是永恒的、持久的:如父母、子女之间的关系;有些则是介于两者之间的:如配偶关系等。第21页,此课件共176页哦从静态角度来看,对象实际上就是由类(包括数据结构和函数结构定义)模板派生的变量;从动态角度来看,对象之间的交互(包括自交互)完成或者实现了功能。在面向对象程序中,类是一种代码模板定义,它类似于函数结构和数据结构,必须要实例化才能使用。实例化就是使用类创建具体的对象变量(也叫对象实例),由类产生对象变量相当于在工厂中使用模具生产产品。在程序中只有创建了具体的对象变量,系统才会给其分配内存,程序才能访问其属性和操作。第22页,此课件共176页哦由于对
14、象变量占用的内存空间不固定,其内存分配方式多采用动态分配和回收机制。在面向对象程序设计语言中,除了对象变量本身,还有一种引用变量(reference variable),其本质上是指针或者地址,可以指向对象变量,其类型必须是一致的。通过引用变量访问对象变量简化了对动态分配的对象内存空间的访问。如Student是Java语言中定义的类,语句Student s=new Student();声明了一个引用变量s,创建了一个对象变量new Student(),并通过赋值语句将该对象变量所在的内存区域的首地址存放到s中,通过s可以对此内存区域进行操作。一般来说,引用变量和对象变量是在不同的内存空间中,前
15、者存放在堆栈空间中,后者是放在堆空间中,这两种内存空间所允许的操作是有所不同的(如图7.5所示)。第23页,此课件共176页哦图7.5 引用变量和对象变量之间的关系 第24页,此课件共176页哦7.2.3 消息机制消息机制纯面向对象程序设计语言如Java中,所有的函数或者操作都依附于一个对象主体,这种依附于某个对象的函数叫做成员函数或者对象操作(方法)。在纯面向对象程序中,对任何一个函数的调用都是对某个对象的方法调用,同时会把该对象的信息(一般是内存地址)传递给被调用函数,这就是函数的实例化过程。在面向对象程序中,调用一个对象的方法或者操作叫做向该对象发消息,调用者叫做消息发出者,被调用者叫做
16、消息接受者。消息、事件和函数调用或者事件响应是相辅相承的。程序中,消息就是现实世界中的请求或者通知事件,这一般都是通过对系统执行一定的操作完成的。对该请求或者通知可以响应,也可以不响应,响应可以是同步的,也可以是异步的。第25页,此课件共176页哦例如,客户如果想从ATM机中取钱,通常会按下取钱按键,这实际上就是向ATM机发送了取钱消息,也是向ATM机发送了取钱请求,ATM机会显示一个取钱界面,让用户输入取款数额,这是通过ATM机的一个方法或者操作实现的。用户输入取款金额后按下确定键,相当于又向ATM机发送新的消息,导致ATM机的另一个方法的调用,通常在该方法中又会向其他对象发送消息,例如该客
17、户的账户Account对象,通过调用该账户对象的draw()操作实现账户上资金的更新。用户通过和ATM机一系列的请求/响应的交互活动完成了执行系统的某个功能,如取钱。客户对象、ATM对象、Account对象之间的消息交互见图7.6。第26页,此课件共176页哦图7.6 消息机制 第27页,此课件共176页哦7.3 面向对象技术的基本特点面向对象技术的基本特点7.3.1 封装性封装性程序的基本元素是变量定义以及对变量的处理。对于规模比较小的程序,每个变量的意义和访问都由程序员自己控制,但对于需要多人长时间开发的大规模程序,存在访问其他人定义的变量的情况,这时候变量的安全性则成为问题。程序中有很多
18、错误都是由于错误地访问了不该访问的变量而引起的。面向过程程序设计语言中的函数结构中的局部变量在一定程度上解决了这个问题,但是全局数据结构或者变量中还是存在不安全的访问问题。面向对象程序将存储数据的变量和对数据(变量)的处理(方法)封装起来(私有化),从程序外部不能直接访问数据,而必须通过对外公开的方法进行访问,这就避免了对正确数据的错误操作,如图7.7所示。第28页,此课件共176页哦图7.7 对象的封装性 第29页,此课件共176页哦将Account对象中表示余额的属性balance(实型变量)隐藏起来,对外部程序不可见,外部程序只能通过公开的方法save()或者draw()来改变balan
19、ce的值,这样就可以避免外部程序对其进行错误的操作。比如说:在程序中直接对balance变量做乘除法操作(例如实现存钱操作时将“+”敲成“*”号),而编译程序是没有办法发现此错误的,因为对于实型变量来说,不能限制对其做乘除操作,从语法上来看这些都是合法的操作。对于账户余额来说,乘除法则是无意义的操作。因此可以通过隐藏数据,公开合法的操作接口来限定账户这种对象的内涵和外延,增加程序的安全性。第30页,此课件共176页哦面向对象的封装性实现的是信息隐藏。仅将需要向外公开的方法和属性向外公开;所有不需要向外公开的方法和属性都被隐藏起来。正像电视机一样,内部电路元件对用户都隐藏起来,对外只公开用户可用
20、的接口,如开关、音量调节、调台等。这种封装性通过定义合适的操作接口来进一步确定事物的本质特征。对于传统的面向过程的程序设计语言来说,表示银行存款和图形尺寸时都是使用实型变量,没有区别,但实际上对这两种量的操作是有区别的。很明显,银行存款只允许增加、减少或者查询;对尺寸来说却能按比例放大或者缩小,即执行乘除法。类似的还有数据结构中的例子,保存线性表、堆栈、队列元素的数据存储结构可以是一样的,但对其允许的操作是不一样的。封装性增强了程序中变量的安全性,同时也增强了程序中数据类型、数据结构和变量的语义内涵,提高了程序分析方法的直观性。第31页,此课件共176页哦7.3.2 继承性继承性软件重用技术始
21、终是软件开发技术研究中的一个重要课题,从程序行的简单复制到宏替换,从数据结构定义再到函数定义,从类的定义到类的继承,从构件到框架等,都是代码重用技术的体现。继承机制是一种高级的代码重用技术,子类自动继承父类的所有代码并且可以进行任意的覆盖和扩充。如图7.8所示,子类研究生继承了父类学生中的属性和操作,又扩充了新的属性和操作。子类和父类保持一种动态关系:当父类代码改变的时候,子类继承的那部分代码会自动修改,即子类对父类的继承不是简单的复制,而是动态的链接,子类和父类始终保持一种联系,这是一种与生俱来的、静态的联系,一旦定义,则无法改变。第32页,此课件共176页哦子类对父类的扩充包括对父类同名属
22、性和方法的覆盖以及增加新的属性和方法。过多的继承层次会使程序结构变得异常复杂、难以理解并且难以维护。子类不仅仅继承了父类的代码,也继承了父类的类型,或者说和父类型是相容的。程序设计语言中的继承关系区别于生物界中的遗传关系,如父子关系,更像事物分类中的分类关系。父类往往是各子类的共性的抽象,是对所有子类对象的抽象。例如:汽车、自行车、三轮车的父类是车,车是一个抽象的概念,凡是具有轮子可以滚动行走的物体都可以称为车。又比如三角形、矩形、圆等具体图形的父类可以定义为图形类等。图7.8中,研究生属于学生中的一种,是特殊的学生,因此是从一般到特殊的分类关系。第33页,此课件共176页哦图7.8 类的继承
23、关系 第34页,此课件共176页哦7.3.3 多态性多态性多态性(polymorphism)是指同一种事物可以有多种不同的形态或者含义,也可以认为是从不同的角度观察同一事物,可以得到不同的视图。在面向对象程序设计语言中,多态性有三种含义。多态的第一种含义是方法的重载(Overload),在同一个类中可以存在同名不同参数的操作,这些操作的具体实现是不同的,即同名方法在不同的参数情况下有不同的实现。这反映了客观世界中对事物操作的复杂性和联系性,如对银行来说,存钱是一种操作,但根据用户出示的是存折还是银行卡,其具体的实现有所不同。编译程序通过参数类型或者个数来确定具体调用哪个方法,因为这种多态性是在
24、编译阶段完成的,所以可以称为静态的多态性或者编译期多态性。操作符重载也是基于这种多态性的。例如圆对象可以根据不同的初始条件进行构造,见下面代码。第35页,此课件共176页哦class Circle public Circle(double x,double y,double r)/已知圆心坐标和半径 public Circle(Point center,double r)/已知圆心和半径 public Circle(double x1,double y1,double x2,double y2,double x3,double y3)/已知圆上三点坐标 public Circle(Point
25、p1,Point p2,Point p3)/已知圆上三点 public Circle(Point p1,Point p2,double r)/已知圆上两点和半径 第36页,此课件共176页哦下面是引用上述定义创建圆对象的代码:Circle c1=new Circle();/创建一个默认的圆对象Circle c2=new Circle(new Point(2,2),5);/创建已知圆心和半径的圆对象Circle c3=new Cirlce(0,0,2,3,4,5);/创建已知圆上三点坐标的圆上述代码中同名方法具有不同的参数,给出了在不同初始条件下构建圆对象的方法。第37页,此课件共176页哦多态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 技术 总论 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内