第9章-面向对象方法学解析课件.ppt
《第9章-面向对象方法学解析课件.ppt》由会员分享,可在线阅读,更多相关《第9章-面向对象方法学解析课件.ppt(93页珍藏版)》请在三一办公上搜索。
1、上次课内容回顾,第8章 维护8.1 软件维护的定义8.2 软件维护的特点8.3 软件维护过程8.4 软件的可维护性8.5 预防性维护8.6 软件再工程过程,上次课内容回顾,class PCI8360vpublic:PCI8360v(void);virtual PCI8360v(void);void PCI_init();void PCI_clos();short PCI_read();,class ArPathTrack:public ArActionpublic:ArPathTrack(ArPose Pose);virtual ArPathTrack(void);virtual ArActi
2、onDesired*fire(ArActionDesired currentDesired);virtual void setRobot(ArRobot*robot);protected:ArRangeDevice*mySonar;ArActionDesired myDesired;public:PCI8360v myPCI;,第9章 面向对象方法学引论,9.1 面向对象方法学概述9.2 面向对象的概念9.3 面向对象建模9.4 对象模型,前言:关于传统方法学的总结,传统的生命周期方法学的本质,是在具体的软件开发工作开始之前,通过需求分析预先定义软件需求,然后一个阶段接着一个阶段有条不紊地开发
3、用户所要求的软件,实现预先定义的软件需求。但它并不能完全消除软件危机。生命周期方法学仍然有许多不足之处,对某些类型的软件开发,这种方法学比较适用,对另一些类型的软件则可能完全不适用。,前言:传统方法学存在的问题,1生产率提高的幅度远不能满足需要生命周期方法学强调需求分析的重要性,强调在每个阶段结束之前必须进行评审,从而提高了软件开发的成功率,减少了重大返工的次数;开发过程中实行严格的质量管理,采用先进的技术方法(主要是结构分析、设计、编程技术)和软件工具,也都加快了软件开发的速度。但开发效率的提高仍然很有限,提高的幅度远远赶不上对软件产品的需要。从用户提出要求到他们最终得到所需要的目标系统,往
4、往需要经过几年甚至更长的延迟时间。,2软件重用程度很低重用也称为再用或复用,是指同一事物不经修改或稍加改动就多次重复使用。软件重用是节约人力,提高软件生产率的重要途径。结构分析、结构设计和结构程序设计(简写为 SASDSP)技术,虽然给软件产业带来了巨大进步,但却没能很好地解决软件重用问题。几乎每次开发一个新的软件系统时,都要针对这个具体的系统作大量重复而又繁琐的工作。,前言:传统方法学存在的问题,3.软件仍然很难维护传统的生命周期方法学强调文档资料的重要性,规定最终的软件产品应该由完整、致的配置成分组成;在软件开发整个过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要质量指标。因此
5、,对这样的软件所进行的维护属于结构化维护的范畴,可维护性有比较明显的提高,软件从不能维护变成基本上可以维护。但实践表明,即使是用生命周期方法学开发出的软件,维护起来仍然相当困难,软件维护成本仍然很高。,前言:传统方法学存在的问题,4软件往往不能真正满足用户需要用传统方法开发涉及多种不同领域知识的大型软件系统,或开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。所谓“不能真正满足用户的需要”,主要有以下两种表现:一种是开发人员不能完全获得或不能彻底理解用户的需求,以致开发出的软件系统与用户预期的系统不一致,不能满足用户的需要。另一种表现是,所开发出的系统不能适应用
6、户需求经常变化的情况,系统的稳定性和可扩充性不能满足要求。,前言:传统方法学存在的问题,前言:出现问题的原因,1僵化的设计模型瀑布模型意味着在生命周期各阶段间存在着严格的顺序性和依赖性。生命周期方法学特别强调预先定义需求的重要性。要求在着手进行具体的开发工作之前,必须通过需求分析预先定义并“冻结”软件需求,然后再一步一步地实现这些需求。实践表明,在系统建立起来之前,往往很难仅仅依靠分析就确定出一套完整、准确、一致、有效的应用需求,这种预先定义需求的方法更不能适应用户需求不断变化的情况。,前言:出现问题的原因,2.结构化技术的缺点用这种技术开发出的软件,其稳定性、可修改性和可重用性都比较差。围绕
7、实现处理功能的“过程”来构造系统的。然而用户需求的变化大部分是针对功能的不稳定性清楚地定义了目标系统的边界,软件通过界面与客观世界通信。系统结构依赖于对系统边界的定义,很难把这样的系统扩展到新的边界系统较难修改和扩充把处理分解成子处理的过程多少带些任意性,并且把数据和操作作为分离的实体可重用性差,面向对象方法的四个要点:,(1)面向对象方法用对象分解取代了传统方法的功能分解。面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法(method)。数据用于
8、表示对象的静态属性(attribute),是对象的状态信息。方法,是允许施加于该类对象上的操作,是该类所有对象共享的。,(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承(inheritance)。低层的特性将屏蔽高层的同名特性(override)。如果在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准。(4)对象彼此之间仅能通过传递消息互相联系。对象是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数
9、据,而不能从外界直接对它的私有数据进行操作。又称为“封装性”(encapsulation),面向对象的方法学可以用下列方程来概括:OO=objects+classes+inheritance+communication with messages也就是说,面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。,9.1.2 面向对象方法学的优点,1.与人类习惯的思维方法一致面向对象的软件技术以对象(object)为核心,用这种技术开发出的软件系统由对象组成。对象是对现实世界实体的正确抽象,它是由描述内部状态表示静态属性的数据,以及可以对这些数据施加的操作(表示对象
10、的动态行为),封装在一起所构成的统一体。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。,9.1.2 面向对象方法学的优点,2.稳定性好由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比较稳定的。3.可重用性好有两种方法可以重复使用一个对象类:一种方法是创建该类的实例,从而直接使用它;另一种方法是从它派生出一个满足当前需要的新类。4.较易开发大型软件产品,9.1.2 面向对象方法学的优点,5.可维护性好(1)面向对象的软件稳定性比较好。(2)面向对象的软件比较容易修改。(3)面向对象的软件比较容易理解。(4)易于测试和调试。,图9.1 喷泉模型,“喷
11、泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。图中代表不同阶段的圆圈相互重叠,这明确表示两个活动之间存在交迭;而面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的无缝过渡.事实上,用面向对象方法开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界。图中在一个阶段内的向下箭头代表该阶段内的迭代(或求精)。图中较小的圆圈代表维护,圆圈较小象征着采用了面向对象范型之后维护时间缩短了。,9.1.3 喷泉模型,9.2 面向对象的概念,9.2.1 对象概念:对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以作的操作表示它的动态行
12、为,通常把对象的操作称为服务或方法(Method)。,对象的定义(1)定义1:对象是具有相同状态的一组操作的集合。(2)定义2:对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。(3)定义3:对象=ID,MS,DS,MI。其中,ID是对象的标识或名字,MS是对象中的操作集合,DS是对象的数据结构,MI是对象受理的消息名集合(即对外接口)。,对象的特点(1)以数据为中心。(2)对象是主动的。它是进行处理的主体。(3)实现了数据封装。它的私有数据完全被封装在盒子内部,对外是隐藏的、不可见的,对私有数据的访问或处理只能通过
13、公有的操作进行。(4)本质上具有并行性。不同的对象能够独立的处理自身的数据,彼此通过发消息传递信息完成通信。(5)模块独立性好。对象是面向对象的软件的基本模块。模块的内聚性强,耦合性弱。,9.2.2 其他概念,类(class)“类”是对具有相同数据和相同操作的一组相似对象的定义,类是对具有相同属性和行为的一个或多个对象的描述。例:类(class):圆(circle)circle:myCircle2.实例(instance)实例就是由某个特定的类所描述的一个具体的对象,实际上类是建立对象时使用的“样板”。“对象”,既可以指一个具体的对象,可以泛指一般的对象,“实例”,是指一个具体的对象。例:实例
14、(对象object):几个不同大小、位置的圆。,3.消息(message)消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。通常,一个消息由下述3部分组成:.接收消息的对象;.消息选择符(也称为消息名);.零个或多个变元。例:myCircle.show(Red),4.方法(method)方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。在C+语言中把方法称为成员函数。方法(Method):画圆、擦除圆、填充圆,显示圆。5.属性(attribute)属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有
15、自己特有的属性值。在C+语言中把属性称为数据成员.属性(Attribute):圆心坐标、圆的半径、圆的颜色,线形等。,【例题】C中类、属性和方法的示例Class Example1 static public int a;/属性,静态数据成员,属于类所有 pulic int b;/非静态数据成员,属于实例所有void Meth1()/实例方法a=10;b=20;static void Meth2()/静态实例方法 a=30;/b=40;public static void ExDemo()Example E1=new Example1();/实例E1 Example E2=new Example
16、1();E1.Meth1();/E1.Meth2();Example1.a=Example1.a+50;E2.b=Example1.a+60;,6.封装(encapsulation)封装也就是信息隐藏,通过封装对外界隐藏了对象的实现细节。使用一个对象的时候,只需知道它向外界提供的接口形式,无须知道它的数据结构细节和实现操作的算法。对象具有封装性的条件如下:(1)有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。(2)有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。(3)受保护的内部实现。实现对象功能的细节(私
17、有数据和代码)不能在定义该对象的类的范围外访问。,7.继承(inheritance)在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。面向对象软件技术中把类组成一个层次结构的系统(类等级):一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的全部描述(数据和操作)。继承具有传递性。因此,一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述,也就是说,属于某类的对象除了具有该类所描述的性质外,还具有类等级中该类上层全部基类描述的一切性质。,【例题】C中继承的示例using System;class Pen pub
18、lic string Color;public static double Price;private int Length;protected int Width;public void SetWidth(int w)Width=w;public int GetWidth()return Width;public void write()Console.WriteLine(现在用笔在写字!);class Pencil:Pen new public void write()/与基类同名的方法,将覆盖继承来的基类同名方法 Console.WriteLine(现在在用铅笔写字!);public v
19、oid Erase()/在派生类中定义的方法 Console.WriteLine(现在擦除已有的文字!);,class Test public static void Main()Pencil P1=new Pencil();/产生一个铅笔对象P1 P1.Color=Black;Pencil.Price=6;/P1.Length=20;/错误,private成员只能在本类中访问/P1.Width=1;/错误,protected成员只能在类或其派生类中访问 P1.SetWidth(20);P1.write();P1.Erase();Console.Write(笔的颜色为:0,价格为:1,宽度为:
20、2,P1.Color,Pencil.Price,P1.GetWidth();,8.多态性(polymorphism)多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。C+中,多态性是通过虚函数实现的。同一操作作用于不同类的实例。9.重载(overloading)1)函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;2)运算符重载是指同一个运算符可以施加于不同类型的操作数上面。,【例题】C中多态性的示例class BaseClass/基类 public void NVMeth()/定义基类的非虚方法 Console.Write
21、Line(调用了基类BaseClass类的非虚方法NVMeth);public virtual void VMeth()/定义基类的虚方法 Console.WriteLine(调用了基类BaseClass类的虚方法NMeth);class InClass:BaseClass/定义派生类 new public void NVMeth()/定义派生类的非虚方法,用new关闭警告 Console.WriteLine(调用了派生类InClass类的非虚方法NVMeth);public override void VMeth()/定义派生类的虚方法,使用override进行重载 Console.Writ
22、eLine(调用了派生类InClass类的虚方法NMeth);,class Test public static void Main()InClass InObj=new InClass();/生成派生类对象InObj BaseClass BaseObj=InObj;/把派生类InObj的对象赋值给基类的对象BaseObj BaseObj.NVMeth();/调用BaseObj对象的非虚方法 BaseObj.VMeth();/调用BaseObj对象的非虚方法 InObj.NVMeth();/调用InObj对象的非虚方法 InObj.VMeth();/调用InObj对象的非虚方法,方法重载,us
23、ing System;class OverTest public double area(double r)/求圆的面积,只有一个参数 return(Math.PI*r*r);public double area(double a,double b)/求矩形面积,有两个参数 return(a*b);public double area(double a,double b,double c)/求三角形面积,有三个参数 double l,s;l=(a+b+c)/2;s=Math.Sqrt(l*(l-a)*(l-b)*(l-c);return(s);,class Exam public static
24、 void Main()OverTest shape=new OverTest();/定义类的实例/求圆的面积 Console.WriteLine(R is 0,Area is 1,3.0,shape.area(3.0);/求矩形的面积 Console.WriteLine(A is 0,B is 1,Area is 2,3.0,4.0,shape.area(3.0,4.0);/求三角形的面积 Console.WriteLine(A is 0,B is 1,C is 2,Area is 3,3.0,4.0,5.0,shape.area(3.0,4.0,5.0);,运算符重载,【例1】MATLAB
25、中”*”运算符,支持向量、矩阵、实数和复数的“乘”运算。【例2】C中,运算符重载在类中进行声明。格式:返回值类型 operator 运算符(运算对象列表)重载的实现部分;,class Complex/复数类 double a,b;/代表实部与虚部,私有变量 public Complex(int m,int n)/构造函数 a=m;b=n;/重载“+”运算符使之能够对两个复数进行加 public static Complex operator+(Complex x,Complex y)Complex t=new Complex(0,0);t.a=x.a+y.a;t.b=x.b+y.b;retur
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 方法 解析 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-4095690.html