欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第9章-面向对象方法学解析课件.ppt

    • 资源ID:4095690       资源大小:1.04MB        全文页数:93页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第9章-面向对象方法学解析课件.ppt

    上次课内容回顾,第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 ArActionDesired*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 对象模型,前言:关于传统方法学的总结,传统的生命周期方法学的本质,是在具体的软件开发工作开始之前,通过需求分析预先定义软件需求,然后一个阶段接着一个阶段有条不紊地开发用户所要求的软件,实现预先定义的软件需求。但它并不能完全消除软件危机。生命周期方法学仍然有许多不足之处,对某些类型的软件开发,这种方法学比较适用,对另一些类型的软件则可能完全不适用。,前言:传统方法学存在的问题,1生产率提高的幅度远不能满足需要生命周期方法学强调需求分析的重要性,强调在每个阶段结束之前必须进行评审,从而提高了软件开发的成功率,减少了重大返工的次数;开发过程中实行严格的质量管理,采用先进的技术方法(主要是结构分析、设计、编程技术)和软件工具,也都加快了软件开发的速度。但开发效率的提高仍然很有限,提高的幅度远远赶不上对软件产品的需要。从用户提出要求到他们最终得到所需要的目标系统,往往需要经过几年甚至更长的延迟时间。,2软件重用程度很低重用也称为再用或复用,是指同一事物不经修改或稍加改动就多次重复使用。软件重用是节约人力,提高软件生产率的重要途径。结构分析、结构设计和结构程序设计(简写为 SASDSP)技术,虽然给软件产业带来了巨大进步,但却没能很好地解决软件重用问题。几乎每次开发一个新的软件系统时,都要针对这个具体的系统作大量重复而又繁琐的工作。,前言:传统方法学存在的问题,3.软件仍然很难维护传统的生命周期方法学强调文档资料的重要性,规定最终的软件产品应该由完整、致的配置成分组成;在软件开发整个过程中,始终强调软件的可读性、可修改性和可测试性是软件的重要质量指标。因此,对这样的软件所进行的维护属于结构化维护的范畴,可维护性有比较明显的提高,软件从不能维护变成基本上可以维护。但实践表明,即使是用生命周期方法学开发出的软件,维护起来仍然相当困难,软件维护成本仍然很高。,前言:传统方法学存在的问题,4软件往往不能真正满足用户需要用传统方法开发涉及多种不同领域知识的大型软件系统,或开发需求模糊或需求动态变化的系统时,所开发出的软件系统往往不能真正满足用户的需要。所谓“不能真正满足用户的需要”,主要有以下两种表现:一种是开发人员不能完全获得或不能彻底理解用户的需求,以致开发出的软件系统与用户预期的系统不一致,不能满足用户的需要。另一种表现是,所开发出的系统不能适应用户需求经常变化的情况,系统的稳定性和可扩充性不能满足要求。,前言:传统方法学存在的问题,前言:出现问题的原因,1僵化的设计模型瀑布模型意味着在生命周期各阶段间存在着严格的顺序性和依赖性。生命周期方法学特别强调预先定义需求的重要性。要求在着手进行具体的开发工作之前,必须通过需求分析预先定义并“冻结”软件需求,然后再一步一步地实现这些需求。实践表明,在系统建立起来之前,往往很难仅仅依靠分析就确定出一套完整、准确、一致、有效的应用需求,这种预先定义需求的方法更不能适应用户需求不断变化的情况。,前言:出现问题的原因,2.结构化技术的缺点用这种技术开发出的软件,其稳定性、可修改性和可重用性都比较差。围绕实现处理功能的“过程”来构造系统的。然而用户需求的变化大部分是针对功能的不稳定性清楚地定义了目标系统的边界,软件通过界面与客观世界通信。系统结构依赖于对系统边界的定义,很难把这样的系统扩展到新的边界系统较难修改和扩充把处理分解成子处理的过程多少带些任意性,并且把数据和操作作为分离的实体可重用性差,面向对象方法的四个要点:,(1)面向对象方法用对象分解取代了传统方法的功能分解。面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法(method)。数据用于表示对象的静态属性(attribute),是对象的状态信息。方法,是允许施加于该类对象上的操作,是该类所有对象共享的。,(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同的特性(包括数据和方法),这种现象称为继承(inheritance)。低层的特性将屏蔽高层的同名特性(override)。如果在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准。(4)对象彼此之间仅能通过传递消息互相联系。对象是进行处理的主体,必须发消息请求它执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。又称为“封装性”(encapsulation),面向对象的方法学可以用下列方程来概括:OO=objects+classes+inheritance+communication with messages也就是说,面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。,9.1.2 面向对象方法学的优点,1.与人类习惯的思维方法一致面向对象的软件技术以对象(object)为核心,用这种技术开发出的软件系统由对象组成。对象是对现实世界实体的正确抽象,它是由描述内部状态表示静态属性的数据,以及可以对这些数据施加的操作(表示对象的动态行为),封装在一起所构成的统一体。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。,9.1.2 面向对象方法学的优点,2.稳定性好由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比较稳定的。3.可重用性好有两种方法可以重复使用一个对象类:一种方法是创建该类的实例,从而直接使用它;另一种方法是从它派生出一个满足当前需要的新类。4.较易开发大型软件产品,9.1.2 面向对象方法学的优点,5.可维护性好(1)面向对象的软件稳定性比较好。(2)面向对象的软件比较容易修改。(3)面向对象的软件比较容易理解。(4)易于测试和调试。,图9.1 喷泉模型,“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。图中代表不同阶段的圆圈相互重叠,这明确表示两个活动之间存在交迭;而面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的无缝过渡.事实上,用面向对象方法开发软件时,在分析、设计和编码等项开发活动之间并不存在明显的边界。图中在一个阶段内的向下箭头代表该阶段内的迭代(或求精)。图中较小的圆圈代表维护,圆圈较小象征着采用了面向对象范型之后维护时间缩短了。,9.1.3 喷泉模型,9.2 面向对象的概念,9.2.1 对象概念:对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以作的操作表示它的动态行为,通常把对象的操作称为服务或方法(Method)。,对象的定义(1)定义1:对象是具有相同状态的一组操作的集合。(2)定义2:对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。(3)定义3:对象=ID,MS,DS,MI。其中,ID是对象的标识或名字,MS是对象中的操作集合,DS是对象的数据结构,MI是对象受理的消息名集合(即对外接口)。,对象的特点(1)以数据为中心。(2)对象是主动的。它是进行处理的主体。(3)实现了数据封装。它的私有数据完全被封装在盒子内部,对外是隐藏的、不可见的,对私有数据的访问或处理只能通过公有的操作进行。(4)本质上具有并行性。不同的对象能够独立的处理自身的数据,彼此通过发消息传递信息完成通信。(5)模块独立性好。对象是面向对象的软件的基本模块。模块的内聚性强,耦合性弱。,9.2.2 其他概念,类(class)“类”是对具有相同数据和相同操作的一组相似对象的定义,类是对具有相同属性和行为的一个或多个对象的描述。例:类(class):圆(circle)circle:myCircle2.实例(instance)实例就是由某个特定的类所描述的一个具体的对象,实际上类是建立对象时使用的“样板”。“对象”,既可以指一个具体的对象,可以泛指一般的对象,“实例”,是指一个具体的对象。例:实例(对象object):几个不同大小、位置的圆。,3.消息(message)消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。通常,一个消息由下述3部分组成:.接收消息的对象;.消息选择符(也称为消息名);.零个或多个变元。例:myCircle.show(Red),4.方法(method)方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。在C+语言中把方法称为成员函数。方法(Method):画圆、擦除圆、填充圆,显示圆。5.属性(attribute)属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。在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 Example1();E1.Meth1();/E1.Meth2();Example1.a=Example1.a+50;E2.b=Example1.a+60;,6.封装(encapsulation)封装也就是信息隐藏,通过封装对外界隐藏了对象的实现细节。使用一个对象的时候,只需知道它向外界提供的接口形式,无须知道它的数据结构细节和实现操作的算法。对象具有封装性的条件如下:(1)有一个清晰的边界。所有私有数据和实现操作的代码都被封装在这个边界内,从外面看不见更不能直接访问。(2)有确定的接口(即协议)。这些接口就是对象可以接受的消息,只能通过向对象发送消息来使用它。(3)受保护的内部实现。实现对象功能的细节(私有数据和代码)不能在定义该对象的类的范围外访问。,7.继承(inheritance)在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。面向对象软件技术中把类组成一个层次结构的系统(类等级):一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的全部描述(数据和操作)。继承具有传递性。因此,一个类实际上继承了它所在的类等级中在它上层的全部基类的所有描述,也就是说,属于某类的对象除了具有该类所描述的性质外,还具有类等级中该类上层全部基类描述的一切性质。,【例题】C中继承的示例using System;class Pen public 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 void 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,宽度为:2,P1.Color,Pencil.Price,P1.GetWidth();,8.多态性(polymorphism)多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。C+中,多态性是通过虚函数实现的。同一操作作用于不同类的实例。9.重载(overloading)1)函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;2)运算符重载是指同一个运算符可以施加于不同类型的操作数上面。,【例题】C中多态性的示例class BaseClass/基类 public void NVMeth()/定义基类的非虚方法 Console.WriteLine(调用了基类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.WriteLine(调用了派生类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对象的非虚方法,方法重载,using 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 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中”*”运算符,支持向量、矩阵、实数和复数的“乘”运算。【例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;return(t);Complex x=new Complex(1,2);/生成第一个复数Complex y=new Complex(3,4);/生成第二个复数Complex z=new Complex(0,0);/生成第三个复数z=x+y;/通过重载运算符“+”求得复数x、y的和并赋值给z,习题:用面向对象方法解决下述问题时需要哪些对象类?类与类之间有何关系?在显示器屏幕上圆心坐标为(250,100)的位置,画一个半径为25的小圆,圆内显示字符串“you”;在圆心坐标为(250,150)的位置,画一个半径为100的中圆,圆内显示字符串“world;再在圆心坐标为(250,250)的位置,画一个半径为225的大圆,圆内显示字符串“Universe”。,答:解决这个问题的一个可能的方案是,在“圆”类中增加一个字符串类型的属性,并给“圆”类的服务“显示”加一段代码,使它不仅能在屏幕上显示圆,而且能在圆内显示字符串。虽然用面向对象的程序设计语言实现这个方案并不困难,但它却不是一个理想的方案:字符串和圆是截然不同的两类实体,当我们考虑字符串时,想到的是字符串内容、字体、字号(字符大小)、对齐方式及其他一些可能的属性,它们中没有哪一个是与圆有关的。把两类不同实体的属性放在同一个类中,这样定义出的“综合”模块的独立性显然比较差。当处理性质完全不同的功能时,更理想的方案是,首先建立一些“基础性”的基类,然后把若干个基础性基类的适当特征组合起来,利用多重继承机制派生出一个特定的派生类,使这个派生类具有所需要的综合功能。,在解答上一题时已经定义了圆类,它定义了圆的属性,并能提供在屏幕上显示圆的服务,可以认为圆类是关于图形圆的一个基础性的类。现在还需要再定义一个关于字符串的基础性的类,这个类的基本功能是,在图形模式下从指定的坐标开始,在屏幕上以指定的字体显示一个给定内容的字符串,字符的大小由字符串在屏幕上占用的长度决定。分析上述需求可知,“图形模式字符串”类的基本属性如下:位置(即坐标),字符串内容,显示字符串时的字体,显示字符串时占用的屏幕长度。在解答上一题时曾经定义了位置类,图形模式字符串的基本属性中又包含位置属性,显然应该从位置类派生出图形模式字符串类。该类对外提供的服务为,在屏幕的指定位置以指定字体显示给定的字符串。,有了“圆”和“图形模式字符串”这样两个基础性的类之后,就可以利用多重继承机制从这两个类派生出一个新类,我们给这个派生类起名字为“圆内字符串”,它既继承了圆类在屏幕上显示圆的功能,又继承了图形模式字符串类在图形模式下显示字符串的功能,从而具有在屏幕上显示圆且在圆内显示字符串的综合功能。综上所述,解决本问题所用到的对象类及类之间的层次关系如下:从“位置”类分别派生出“点”类和“图形模式字符串”类,然后由“点”类派生出“圆”类,最后由“圆”类和“图形模式字符串”类共同派生出“圆内字符串”类。,MI 与钻石问题!,关于多重继承,#include usingnamespacestd;classVehicle public:Vehicle(intweight=0)Vehicle:weight=weight;cout载入Vehicle类构造函数endl;voidSetWeight(intweight)cout重新设置重量endl;Vehicle:weight=weight;virtualvoidShowMe()=0;protected:intweight;,classCar:virtualpublicVehicle/汽车,这里是虚拟继承 public:Car(intweight=0,intaird=0):Vehicle(weight)Car:aird=aird;cout载入Car类构造函数endl;voidShowMe()cout我是汽车!endl;protected:intaird;,classBoat:virtualpublicVehicle/船,这里是虚拟继承 public:Boat(intweight=0,floattonnage=0):Vehicle(weight)Boat:tonnage=tonnage;cout载入Boat类构造函数endl;voidShowMe()cout我是船!endl;protected:floattonnage;,classAmphibianCar:publicCar,publicBoat/水陆两用汽车,多重继承的体现 public:AmphibianCar(intweight,intaird,floattonnage):Vehicle(weight),Car(weight,aird),Boat(weight,tonnage)/多重继承要注意调用基类构造函数 cout载入AmphibianCar类构造函数endl;voidShowMe()cout我是水陆两用汽车!endl;voidShowMembers()cout重量:weight顿,空气排量:airdCC,排水量:tonnage顿endl;intmain()AmphibianCara(4,200,1.35f);a.ShowMe();a.ShowMembers();a.SetWeight(3);a.ShowMembers();system(pause);,上次课内容回顾,面向对象方法学基本概念:对象:object类:class方法:method属性:继承:inheritance多态性:polymorphism重载:overloading,ARIA:ArAction Class Reference,ArPose Pose;ArRobot robot;ArSick sick;robot.addRangeDevice(,Aria Robot 程序,9.3 面向对象建模,所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。更进一步讲,模型是一种思考工具,利用这种工具可以把知识规范地表示出来。,9.3 面向对象建模,用面向对象方法开发软件,通常需要建立3种形式的模型,描述系统数据结构的对象模型,描述系统控制结构的动态模型描述系统功能的功能模型。这3种模型都涉及到数据、控制和操作等共同的概念,只不过每种模型描述的侧重点不同。,UML(Unified Modeling Language,统一建模语言)是一种可视化的建模语言,它能让系统构造者用标准的、易于理解的方式建立起能够表达出他们想象力的系统蓝图,并且提供了便于不同的人之间有效地共享和交流设计结果的机制。,交流思想是极为重要的。在UML出现以前,系统开发往往是无计划的议题。系统分析员尽力去获取客户的需求,用某种他自己能够理解(但客户不一定总能理解)的表示法来产生需求分析文档,然后将这个分析转交给个程序员或者一个程序员小组,并且期待着最后所开发出的系统正是客户所需要的。,由于系统开发是项人力活动,因此在开发过程的每个阶段中都很可能潜伏着错误。系统分析员可能没有正确理解客户的需求。他编制的文档存户可能不能理解。系统分析的结果对程序员来说可能很不明确,随后程序员据此构造出的程序很可能不仅难以使用而且根本不是客户所需要的最初问题的解决方案。怎么办呢?,在计算机时代的早期,程序员们在编制程序之前几乎很少对手头问题进行详细的分析。通常他们一开始就自底向上地编写程序,随着时间的进展代码不断扩充。在今天这样一个高商业风险的社会里,这样做被证明是不适当的。,随着世界变得越来越复杂,存在于这个世界中的基于计算机的系统也增加了复杂性。这些计算机系统通常包括多个硬件和软件单元、跨越长距离的网络设施,还要连接到信息量堆积如山的数据库上。如果你要创建一个成功的系统,怎么来对付这些问题的复杂性呢?最关键的一点是要用一种系统分析员、客户、程序员和其他系统开发所涉及到的人员之间能够照解和达成一致的方式来组织系统的设计过程。UML就提供了这种组织方式。,可靠的设计需要一种能被系统分析员、开发人员和客户接受为标准的设计表示法,就象电子工程师在绘制电路图时所用的标准表示法和在机械工程中被作为标准的三视图所用的表示法那样。UML就是软件开发领域的这种表示法。,UML的诞生,UML是Grady Booch、James Rumbaugh和Ivar Jacobson智慧的结晶。他们被人们称为“UML三友”。这几位先生在20世纪80年代和90年代的初期分别在不同的组织里工作,各自设计他们自己的面向对象分析与设计方法学。他们的方法学和其他同行竞争者相比取得了卓越的成果。到90年代中期,他们开始相互借鉴,然后决定相互合作共同推进这项工作。,1994年,Rumbaugh加入到Ratinoal软件公司工作,而Booch早已经在那里工作。第二年Jacobson也加入了Rational公司的行列。后面的事情,是具有历史意义的。UML草案版开始在软件工业界流传开来,并且根据大量的反馈信息做了大幅度修改。由于许多公司感到UML能够适应这些公司的战略目标,因此一个UML联盟蓬勃发展起来。联盟的成员包括DEC、Hewlett-Packard、Intellicorp、Microsoft、OracIe、Rational和其他些公司。1997年,应“对象管理组织”(OMG)向外界征求标准建模语言的建议,联盟制订了UML 1.0版并提交给OMG。,后来联盟继续发展,产生了UML 1.1版,提交给OMG后,于1997年被OMG采纳为标准。1998年OMG接管了UML标准的维护工作,并且又制订了两个新的UML修订版。UML成为软件工业界事实上的标准,并且仍在不断发展。现在UML已经到了1.3版。,在科学和工程技术领域中模型是一个很有用途的概念。在最通常的意义下,当你建立了一个模型后,你其实就在运用你已经了解的很多知识来帮助你理解暂时还不知道的很多东西。在某些领域中,一个模型可能是一组数学方程式;而在另一些领域中,一个模型可能是计算机仿真程序。模型可能有许多种类型。就我们的目的而言,一个模型是一组UML图,为了理解和开发一个系统,我们可以检查、获取和修改这些图。,9.3 面向对象建模,UML建模语言一些著名的软件工程专家在提出自己的面向对象方法的同时,也提出了自己的建模语言。Booch,Rumbaugh和Jacobson经过合作研究,于1996年6月设计出统一建模语言UML 0.9(Unify Modeling Language简称UML)利用这个工具,可以建立用UML描述的软件系统的模型,而且可以自动生成和维护C+、Java、VB和Oracle等语言和系统的代码。截止到1996年10月,在美国已有700多家公司表示支持采用UML作为建模语言,在1996年年底,UML已经稳定地占领了面向对象技术市场的85%,成为事实上的工业标准。1997年11月,国际对象管理组织OMG批准把UML 1.1作为基于面向对象技术的标准建模语言。UML工具:IBM的Rational Rose和MS的VisioRational Rose是Rational公司出品的一种面向对象的统一建模语言的可视化建模工具.http:/,UML的统一性(Unified)表现为以下几点:,(1)UML是人类思想和计算机代码的一个连接桥梁(2)UML所定义的概念和符号可用于软件开发的分析、设计和实现的全过程,软件开发人员不必在开发过程的不同阶段进行概念和符号的转换。(3)UML所用的语言元素基本都是图形化的,便于理解和沟通,不但开发人员之间可以用来交流,客户和开发人员之间也可以用它作为交流的工具。,UML基础,标准建模语言UML的重要内容可以由下列五类图(共9种图形)来定义:第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。,UML基础,第二类是静态图(Static diagram),包括类图、对象图和包图。类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。对象图是类图的实例,不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。包由包或类组成,表示包与包之间的关系。包图用于描述系统的分层结构。,UML基础,第三类是行为图(Behavior diagram),描述系统的动态模型和组成对象间的交互关系。包括状态图和活动图。状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。,UML基础,第四类是交互图(Interactive diagram),描述对象间的交互关系。顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。第五类是实现图(Implementation diagram)。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息。部件图有助于分析和理解部件之间的相互影响程度。,9.4 对象模型,对象模型表示静态的、结构化的系统的“数据”性质。通常,使用UML提供的类图来建立对象模型。在UML中术语“类”的实际含义是,“一个类及属于该类的对象”。下面简要地介绍UML的类图。,类图描述类及类与类之间的静态关系。类图是一种静态模型,它是创建其他UML图的基础。1.定义类UML中类的图形符号为长方形,用两条横线把长方形分成上、中、下3个区域,分别放类的名字、属性和服务,如图9.5所示。其中下面两个区域可省略。类名是一类对象的名字。名字应该是富于描述性的、简洁的而且无二义性的。,图9.5 表示类的图,9.4.1 类图的基本符号,2.定义属性UML描述属性的语法格式如下:可见性 属性名:类型名=初值性质串属性的可见性(即可访问性)通常有下述3种:公有的(public)、私有的(private)和保护的(protected),分别用加号(+)、减号(-)和井号(#)表示。如果未声明可见性,则表示该属性的可见性尚未定义。注意,没有默认的可见性。属性名和类型名之间用冒号(:)分隔。类型名表示该属性的数据类型,它可以是基本数据类型,也可以是用户自定义的类型。例:C中private double width;-width:double,3.定义服务服务也就是操作,UML描述操作的语法格式如下:可见性 操作名(参数表):返回值类型性质串操作可见性的定义方法与属性相同。参数表是用逗号分隔的形式参数的序列。描述一个参数的语法如下:参数名:类型名=默认值例:C中Public static void box(double h,double w)+box(h:double,w:double):void,例 对象“圆”的类图,9.4.2 表示关系的符号,类与类之间通常有关联、泛化(继承)、依赖和细化等4种关系。1.关联关联表示两个类的对象之间存在某种语义上的联系,也就是对象之间有相互作用、相互依靠的关系。,3种基本类型:,一对一(1:1),一对多(1:M),多对多(M:N),依据参与关联的对象的数目,(1)普通关联普通关联是最常见的关联关系,只要在类与类之间存在连接关系就可以用普通关联表示。普通关联的图示符号是连接两个类之间的直线,如图9.6所示。,图9.6 普通关联示例,通常,关联是双向的,可在一个方向上为关联起一个名字,在另一个方向上起另一个名字(也可不起名字)。,重数表示该类有多少个对象与对方的一个对象连接。3 表示3个对象01 表示0到1个对象115 表示1到15个对象0*或*表示0到多个对象1+或1*表示1到多个对象未标明 默认重数是1。,例如,图9.7是一个递归关联(即一个类与它本身有关联关系)的例子。一个人与另一个人结婚,必然一个人扮演丈夫的角色,另一个人扮演妻子的角色。如果没有显式标出角色名,则意味着用类名作为角色名。,图9.7 关联的角色,(2)递归关联(自身关联):一个类可能与它自己发生关联,这样的关联被称为自身关联。在任何关联中都会涉及到参与此关联的对象所扮演的角色(即起的作用).当一个类的对象可以充当多种角色时,自身关联就可能发生。,(3)限定关联:限定关联通常用在一对多或多对多的关联关系中,可以把模型中的重数从一对多变成一对一,或从多对多简化成多对一。在类图中把限定词放在关联关系末端的一个小方框内。,图9.8 一个受限的关联,例如,某操作系统中一个目录下有许多文件,在一个目录内文件名确定了惟一一个文件。图9.8利用限定词“文件名”表示了目录与文件之间的关系,可见,利用限定词把一对多关系简化成了一对一关系。,例如,图9.9是一个电梯系统的类模型,队列就是电梯控制器类与电梯类的关联关系上的关联类。从图中可以看出,一个电梯控制器控制着4台电梯,这样,控制器和电梯之间的实际连接就有4个,每个连接都对应一个队列(对象),每个队列(对象)存储着来自控制器和电梯内部按钮的请求服务信息。电梯控制器通过读取队列信息,选择一个合适的电梯为乘客服务。关联类与一般的类一样,也有属性、操作和关联。,(4)关联类:为了说明关联的性质可能需要一些附加信息。可以引入一个关联类来记录这些信息。关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。,图9.9 关联类示例,2.聚集:聚集也称为聚合,是关联的特例。聚集表示类与类之间的关系是整体与部分的关系。在陈述需求时使用的“包含”、“组成”、“分为部分”等字句,往往意味着存在聚集关系。除了一般聚集之外,还有两种特殊的聚集关系,分别是共享聚集和组合聚集。,(1)共享聚集如果在聚集关系中处于部分方的对象可同时

    注意事项

    本文(第9章-面向对象方法学解析课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开