软件工程3.ppt
《软件工程3.ppt》由会员分享,可在线阅读,更多相关《软件工程3.ppt(117页珍藏版)》请在三一办公上搜索。
1、1,第三章 面向对象的 方法与UML,软件工程课件,软件工程,2,第三章 面向对象的概念与UML,3.1 面向对象系统的概念3.2 统一建模语言UML概述3.3 UML的模型元素3.4 UML的图3.5 UML的元模型结构,软件工程,3,客观世界中的应用问题面对的主体都是物理的或概念的实体。从这些实体出发,分析实体的作用、责任以及它们之间协作,从而找出问题的解,是很自然的。面向对象技术就是适合用这种方式分析和解决问题的方法。它的基石就是问题领域中识别出来的各种对象。依赖这些对象提供的服务和对象之间相互的协同(关系),实现期望的功能。面向对象技术能够在解决方案中直接模拟问题领域,并与人类的思维习
2、惯相一致。,3.1 面向对象系统的概念,软件工程,4,什么是面向对象,Peter Coad 和 Edward Yourdon 提出面向对象方法的概念:面向对象=对象+分类+继承+消息通信采用这四个概念开发的软件系统就是面向对象的软件系统。一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。,软件工程,5,面向对象范型的特点,面向对象系统中的对象是数据抽象与过程抽象的综合体。所谓过程抽象是指当使用某个过程时,无需关心过程内部的实现细节,只要知道如何调用该过程以及该过程完成什么功能即可。所谓数据抽象是指使用结构或记录等方式把某个实体的数据集中起来,使得使用者能够
3、以单元为单位使用数据。面向对象范型在数据抽象中组织过程抽象。,软件工程,6,面向对象系统的状态分别保存在各个对象的数据存储中,而不是保存在一些全局变量中。系统解决问题的控制流包含在各个对象中的操作内。并通过消息传递,控制流从一个对象转移到另一个对象。算法被分布到各种实体中。通过执行消息传递和对象中的操作实现算法的功能。,软件工程,7,面向对象的特点,抽象性:对象包含数据抽象和行为抽象;封装性:信息隐蔽(使用与实现分开);共享性:同一个类中所有对象共享相同的数据结构和行为;同一应用中的对象通过继承关系,共享共同的数据结构和行为;不同应用中的对象通过复用,共享数据结构和行为。,软件工程,8,对象(
4、object),对象是系统中描述客观事物的实体,是构成系统的一个基本单元,由一组属性值和一组对属性进行操作的服务组成。对象=对象名+数据(属性)+操作(行为)属性值一般只能通过执行对象的操作来改变。操作(方法或服务)描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。对象可以是外部实体、信息结构、事件、角色、组织结构、地点或位置、操作规程等。,软件工程,9,计算机窗口中的三个多边形对象,软件工程,10,表示多边形的三个对象,软件工程,11,类(class),把具有相同属性(数据结构)和服务(操作)的对象归在一起就形成了类。类的定义包括一组数据属性和在数据上的一组合法操作。属于某一个类的
5、各个对象都是该类的实例(instance),它们都可使用类中的操作。类定义了各个实例所共有的数据结构,使用类的构造函数,可以在创建该类的实例时初始化这个实例的状态。,软件工程,12,由两个四边形对象导出一个类,软件工程,13,消息(message),消息是一个对象向另一个对象传递的信息。有四类消息:发送对象请求接收对象提供服务、发送对象激活接收对象、发送对象询问接收对象、发送对象仅传送信息给接收对象。消息的使用类似于函数调用,消息中指定了某一个实例,一个操作名和一个参数表(可能是空的),如quadrilateral1.move(15,20)。接收消息的实例执行消息中指定的操作,并将形式参数与参
6、数表中相应的值结合起来。,软件工程,14,继承(inheritance),如果某几个类之间具有共性的东西(属性和行为),抽取出来放在一个泛化类中,将各个类的特有的东西放在特化类中分别描述,则可建立起特化类对泛化类的继承。继承是使用已有的类定义做为基础建立新类的定义技术。已有的类可当做泛化类(父类)来引用,则新类相应地可当做特化类(子类)来引用。,软件工程,15,建立继承结构的好处:易编程、易理解 代码短,结构清晰易修改 共同部分只要在一处修改即可易增加新类 只须描述不同部分怎样建立一个好的继承层次类可以从父类继承,父类又可以从它的父类继承,形成多层次的继承结构。当增加一个新类时,不一定在最低层
7、,可能需要插在中间层,这样可能需要调整原来的层次结构。,软件工程,16,建立一个新类起重车。它的底盘、发动机、轮胎、驱动装置等都在已有类汽车中。关系如右图所示。新类是已有类的特殊情形。这时直接让起重车类作为汽车类的子类即可。,软件工程,17,增加一个新类拖拉机。它的底盘、发动机等与汽车不同,但驱动装置、轮胎等与汽车相同。调整继承结构。建立一个新的一般的车辆类,把拖拉机与汽车类的共性放到车辆类中,拖拉机与汽车类都成为车辆类的子类。车辆是抽象类,相关操作到子类汽车找。,软件工程,18,另一种情形是在已有类的基础上加入新类,使得新类成为已有类的泛化类。例如,已经存在三角形类,四边形类,想加入一个多边
8、形类,并使之成为三角形和四边形类的泛化类。,软件工程,19,前三个情况主要是通过查找(应用领域)类库,找到可以原封不动地继承的类或可以通过调整继承层次结构继承的类。但如果在已有的继承层次中找不到可以继承的已有类,就从新开始完全独立地建立一个类。如果一个类需要用到多个现有类的特征,可以从多个类中继承,称为多继承。例如退休教师是继承退休者和教师这两个类的某些特征或行为而得到的一个新类。,多继承,软件工程,20,多态性和动态绑定,对象互相通信,即一个对象发消息给另一个对象,执行某些行为或又发消息给另外的对象,从而执行系统的功能。,软件工程,21,多态性指同名的函数或操作可在不同类型的对象中有各自相应
9、的实现。例如整数“+”:整数加法浮点数“+”:浮点数加法字符串“+”:字符串连接点“+”:两个点的坐标位置分别叠加具有多态的函数或操作在运行时才根据实际的对象类型,执行相应实现程序的连接,此即动态绑定。,软件工程,22,例如,想要在屏幕上画一系列多边形,多态性允许发送消息draw,根据消息接收对象的类型不同,画出不同的多边形。draw针对的是一系列的类型(类族)而不仅仅是一个类型。多态性的实现有 2 种:利用继承关系,把所有数据类型当作一个抽象数据类型的子类型。,软件工程,23,利用模板机制,把所有可能的数据类型用一个参数化的数据类型来代替。动态绑定保证在程序执行时实施与对象 P 连接的操作。
10、如果 P 是矩形类的实例,则执行与矩形连接的操作,如果 P 是三角形类的实例,则执行与三角形连接的操作。动态绑定把函数调用与目标代码块的连接延迟到运行时进行。这样,只有发送消息时才与接收消息实例的一个操作绑定。,软件工程,24,3.2 统一建模语言UML概述,UML 是Unified Modeling Language的缩写。它是一种标准的语言,以直观的表述、定义、构造和文档化软件为主的系统的工作制品。UML聚集了来自下列建模的精髓:数据建模(实体关系图ERD)业务建模(工作流)对象建模 构件建模它可用于软件生命周期各个过程,并适用于各种不同的实现技术。,软件工程,25,UML的特点,统一标准
11、融合了当前一些流行的面向对象开发方法的主要概念和技术,成为一种面向对象的标准化的统一建模语言。提供了标准的面向对象的模型元素的定义和表示法,有标准的语言工具可用。已成为工业标准化组织OMG的正式标准。面向对象支持面向对象的主要概念,提供了一批基本的模型元素的表示图形和方法。,软件工程,26,可视化,表示能力强大一种图形化语言,系统的逻辑模型和实现模型都能用UML的模型图形清晰地表示。可以处理与软件的说明和文档有关的问题。提供了语言的扩展机制,用户可以根据需要增加定义自己的衍型(StereoType)、标记值和约束等。可用于各种复杂类型的软件系统的建模。独立于过程系统建模语言,独立于开发过程。,
12、软件工程,27,容易掌握使用概念明确,建模表示法简洁明了,图形结构清晰,容易掌握使用。着重学习三个方面的主要内容:(1)UML的基本模型元素(2)组织模型元素的规则(3)UML语言的公共机制与程序设计语言的关系用Java,C+等编程语言可实现一个系统。一些CASE工具可以根据 UML所建立的系统模型来产生Java、C+等代码框架。,软件工程,28,UML的定义,UML定义有两个组成部分:语义和表示法。语义用自然语言描述,表示法定义了UML的可视化标准表示符号,这决定了UML是一种可视化的建模语言。在语义上,模型是元模型的实例。UML定义给出了语法结构的精确定义。使用UML时,要从不同的角度观察
13、系统,为此定义了概念“视图”。视图是对系统的模型在某方面的投影,注重于系统的某个方面。,软件工程,29,3.3 UML的模型元素,UML的三个主要组成元素基本构造块(basic building blocks)组织构造块的规则(rules)运用于整个UML的公共机制(common mechanisms)UML包括三种基本构造块:事物(things)关系(relationships)图(diagrams),软件工程,30,UML 事物 结构事物,Class(类)Interface(接口)描述了一个类或构件的服务(操作)集。,软件工程,31,Collaboration(协作)合作完成某个特定任务的
14、一组类及其关联的集合,用于对用例的实现建模。Use Case(用例)表示系统想要实现的行为,不关心这些行为是怎样实现的。,用例,软件工程,32,Active Class(主动类)与一般类相同,但它至少拥有一个进程或线程,故能够启动控制活动。Component(构件)系统中物理的、可替代的部件。,软件工程,33,Node(节点)系统在运行时存在的物理元素。,软件工程,34,UML事物 行为事物,Interaction(交互)交互由在特定的上下文环境中共同完成一定任务的一组对象之间传递的消息组成。交互涉及的元素包括消息、动作序列和链。,软件工程,35,State Machine(状态机)状态机描述
15、了一个对象或一个交互在生存周期内响应事件所经历的状态序列。状态机涉及的元素包括状态、转换、事件活动等。,软件工程,36,UML事物 分组事物,package(包)包是把元素组织成组的机制,结构事物、行为事物甚至其他分组事物都可以放进包内。包不象构件(仅在运行时存在),它纯粹是概念上的(即它仅在开发时存在)。,软件工程,37,UML事物 注释事物,Note(注释)依附于一个元素或一组元素之上,对其进行约束或解释的简单符号。,软件工程,38,UML Relationships(关系),UML中有 4 种关系:依赖关联泛化实现 关系特征:这四种关系是UML模型中可以包含的基本关系。它们也有变体。例如
16、,依赖的变体有细化、跟踪、包含和延伸。,软件工程,39,依赖(Dependency)两个事物之间的语义关系,其中目标事物发生变化会影响源事物的语义。图中虚线箭头从源事物指向目标事物,表示源事物依赖于目标事物。,软件工程,40,两个类之间的依赖关系可以是:源类访问定义在目标类内部的数据值;源类的操作调用了定义在目标类的操作;源类的返回类或参数是目标类的实例;如果在顺序图中的两个对象存在消息的传送,而且它们之间没有结构方面的连接,可以在类图上用依赖关系建模。依赖的变体包含特定的语义,表明类之间的关系、包之间的关系、用例之间的关系、对象之间的关系、建模元素与模型之间的关系等。,软件工程,41,类之间
17、的依赖关系可以是:友元依赖 目标类(如二叉树)视源类(如迭代器)为友元,允许源类访问目标类的所有私有属性和操作。导出依赖 两个类或对象如果存在导出依赖,则表明源类(如年龄)可以从目标类(如出生年月)通过计算导出。,软件工程,42,细化依赖 在类图中表示同一模型的不同详细程度的规格说明,源类比目标类更为详细。实例化依赖 若要强调一个类的对象是由另一个类的对象创建的,可用实例化依赖。它表明源类创建了目标类的一个实例。,软件工程,43,使用依赖 不加任何修饰的依赖即为使用依赖。也可用修饰强调源类的语义依赖于目标类的具有共有可见性的构成的语义。绑定(Binding)依赖这种依赖关系中的目标类是模板类,
18、源类是从模板实例化的类。,软件工程,44,包之间的依赖关系可以是:访问依赖 它表明源包被赋予了可访问目标包的权限。导入依赖 它表明了源包可以访问目标包里的元素,但各个包有自己独立的命名空间,这意味着属于不同包的两个元素可以重名。导入依赖可以使目标包内的公共可见元素进入源包的命名空间。,软件工程,45,用例之间的依赖关系可以是:包含依赖 它表明源用例显式地包含目标用例作为其行为的一部分。此时将源用例称为基用例,目标用例称为内含用例。如果两个用例之间具有包含依赖关系,则表明基用例的动作序列中有特定的步骤把内含用例的动作序列包含进来。扩展依赖,软件工程,46,它表明目标用例扩展了源用例的行为。此时,
19、源用例称为基用例,目标用例称为扩展用例。扩展用例在特定条件下为基用例提供附加的动态行为。例如,在人机交互过程中出现差错时进行的异常处理即为扩展动作。扩展依赖与包含依赖的区别在于,如果仅将扩展从基用例地动作序列中去除,基用例仍然是语义完备的,即它的执行仍将产生有意义的结果。而包含依赖则不然。,软件工程,47,对象之间的依赖关系可以是:转换依赖 当需要在交互图上表示对象状态的转换时可以用转换依赖。主要强调由于消息而导致对象状态的改变。转换依赖连接的目标对象和源对象是同一个对象。调用依赖 当需要在交互图或对象图上显式强调对象之间或操作之间的调用关系时要用调用依赖。它表明源对象引用了目标对象的操作,或
20、源操作引用了目标操作。复制依赖,软件工程,48,为了在交互图或活动图上描述对象复制的动作可以采用复制依赖。它连接两个对象,目标对象是源对象的完全相同而又独立的副本。发送依赖 它连接一个对象(在源端)和一个消息(在目标端),表明源对象在交互过程中发送了一个消息,可以用在状态机的描述中。它针对内嵌有状态机的对象,可用来描述如何通过发送信号以产生某种事件的动作。建模元素与模型之间的依赖关系是:回溯依赖 它连接两个模型元素,表明目标是源的历史上的前驱。如交互和协作就是从用例导出的。,软件工程,49,关联(Association)关联是一种结构关系,它描述一组链,这些链是类之间或类与接口之间的连接。通过
21、这种连接,一个对象可以访问另一个对象的属性或调用另一个对象的操作。关联是双向的,其中的角色代表一个类的对象在另一个类中的存在。聚合(aggregation)是一种特殊类型的关联,它描述了整体和部分间的结构关系。,软件工程,50,聚合关系在整体端有一个菱形作为标记。复合聚合(composite aggregate)是一种特殊的聚合关系,它表明整体对象与部分对象具有相同的生存周期。角色的重复度(Multiplicity),软件工程,51,表明角色在关联关系中出现的次数。如1,0.1,1.*,*等。导航(navigation)一般默认关联关系是双向的,而导航则限制关联关系到一个方向。在图中用箭头指明
22、方向。限定关联(qualification)如教师与学生的关系由课程的标识决定。,软件工程,52,关联类关联关系是两个类之间的语义连接。在比较简单的情况下,关联关系的语义用关联关系的名字来概括。但在某些情况下,需要对关联关系的语义做详细的定义、存储和访问,为此可以建立关联类,描述关联的属性。,软件工程,53,泛化(Generalization)一般化特殊化的关系(继承)。表明特化类共享一个或多个泛化类的结构和行为。如果两个类被定义为具有泛化关系,就意味着在任何泛化类(父类)的对象出现的地方,都可以用特化类(子类)来代替。,软件工程,54,软件工程,55,继承的多态性表明子类的操作的动态行为可代
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5639113.html