UML培训(共97张).pptx
面向对象软件工程(标准建模语言)面向对象软件工程面向对象“面向对象”是一种认识客观世界的世界观,这种世界观将客观世界看成是有许多不同种类的对象构成的,每个对象有自己的内部状态和运动规律,不同对象之间的相互联系、相互作用就构成了完整的客观世界。面向对象软件工程面向对象“面向对象”是从结构组织的角度去模拟客观世界的一种方法,这种方法的基本着眼点是构成客观世界的那些成分对象。用“面向对象”的观点去认识客观世界,用“面向对象”的方法去模拟客观世界,这就构成了“面向对象”的完整含义。面向对象软件工程面向对象概念对象 对象是现实世界中个体或事物的抽象表示,是其属性和相关操作的封装。属性表示对象的性质,属性值规定了对象所有可能的状态。对象的操作是指该对象可以展现的外部服务。面向对象软件工程面向对象概念类和实例 类是某些对象的共同特性的表示,它描述了这些对象内部是如何构造的。相同类的对象在它们的操作和它们的信息结构两个方面都有相同的定义。 在面向对象系统中,每个对象都属于一个类。属于某个特定类的对象称为该类的实例。因此,常常把对象和实例当作同义词。实例是从某类创建的一个对象。面向对象软件工程面向对象概念继承 如果类B继承类A,那么类A中描述的操作和信息结构将成为类B的一部分。 借助继承,可以表示类之间的类似性,并且在其他类能继承的一个类中描述这些相似性。因此,就能够复用公共的描述。继承常常被提倡为软件工业界中关于复用的一个核心思想。继承还有利于软件维护。 通过抽取和共享公共特性就能够通用化一些类,并且把它们放在继承层次的更高位置。同样,如果希望增加新类,可以寻找这样一个类,它已经提供了适用于该新类的某些操作和信息结构。然后,让新类继承这个类,只需增加该新类所独有的那些内容。然后,使这个类专用化。面向对象软件工程 面向对象建模 面向对象思想比较自然地模拟了人类认识客观世界的方式,面向对象的分析和设计应该从建模开始。构造模型通常出于以下几个目地:在着手解决一个复杂问题之前,对解决方案进行检测;用于同客户或其他相关人员进行交流;加强视觉效果;对复杂问题进行简化。面向对象软件工程面向对象建模模型是对事物的一种抽象,人们常常在正式建造实物之前,首先建立一个简化的模型,以便更透彻地了解它的本质,抓住问题的要害;在模型中,人们总是剔除那些与问题无关的、非本质的东西,从而使模型与真实的实体相比更加简单、易于把握;面向对象软件工程面向对象建模在建造一个复杂系统时,开发者必须从多种不同的角度来抽象系统,使用准确的符号来构造模型,然后检查这些模型是否符合系统的需求,并逐步添加细节,从而将这些模型转化成实现方案。建模语言是面向对象建模中的一个非常关键的因素。标准建模语言的设计目标:运用面向对象概念来构造系统模型建立起从概念模型直至可执行体之间明显的对应关系着眼于那些有重大影响的问题创建一种对人和机器都适用的建模语言标准建模语言概要由与1997年11月批准为标准建模语言()。建立在当今国际上最有代表性的三种面向对象方法(( : )方法,( )方法,方法)的基础之上。是一种建模语言而不是一种方法,本身是独立于过程的。标准建模语言 为人们提供了从不同的角度去观察和展示系统的各种特征的一种标准表达方式。在中,从任何一个角度对系统所作的抽象都可能需要用几种模型图来描述,而这些来自不同角度的模型图最终组成了系统的完整模型。标准建模语言 一般而言,我们可以从以下几种常用的视角来描述一个系统:系统的使用实例:从系统外部的操作者的角度描述系统的功能。系统的逻辑结构:描述系统内部的静态结构和动态行为,即从内部描述如何设计实现系统功能。系统的构成:描述系统由哪些程序构件所组成。系统的并发性:描述系统的并发性,强调并发系统中存在的各种通信和同步问题。系统的配置:描述系统的软件和各种硬件设备之间的配置关系。标准建模语言模型图(5类,10种):用例图静态图(类图,对象图,包图)行为图(状态图,活动图)交互图(顺序图,合作图)实现图(构件图,配置图)标准建模语言语义元-元模型: 元模型的基础体系结构,定义一种说明元模型的语言元模型: 元-元模型的一个实例,定义一种说明模型的语言模型: 元模型的一个实例,定义一种语言来描述信息领域用户对象: 模型的一个实例,定义一个特定的领域标准建模语言主要文件:概要( )语义( )表示法指南( )对象约束语言规约( ):该文件定义并介绍了一种对象约束语言(),其用途是用来说明在图形化的系统模型中不能充分表达的建模信息。它是一种形式化语言。标准建模语言 (用例图) 从本质上将,一个用例是用户与计算机之间为达到某个目的的一次典型交互作用:用例描述了用户提出的一些可见的需求;用例可大可小;用例对应一个具体的用户目标标准建模语言 (用例图) 用例图描述系统外部的执行者与系统的用例之间的某种联系。所谓用例是指对系统提供的功能(或称系统的用途)的一种描述;执行者是那些可能使用这些用例的人或外部系统;用例和执行者之间的联系描述了“谁使用哪个用例”。标准建模语言 (用例图)n用例图着重于从系统外部执行者的角度来描述系统需要提供哪些功能,并且指明了这些功能的执行者是谁;n用例图在方法中占有十分重要的地位,人们甚至称是一种用例图驱动的开发方法。标准建模语言 (用例图)用例图中的图符: 用例 执行者 系统:用于界定系统功能范围,描述该系统功能的用例都置于其中,而描述外部实体的执行者都置于其外。 关联:连接执行者和用例,表示执行者所代表的系统外部实体与该用例所描述的系统需求有关。标准建模语言 (用例图)用例图中的图符: 使用:由用例A连向用例B,表示用例A中使用了用例B中的行为或功能。 扩展:由用例A连向用例B,表示用例B描述了一项基本需求,而用例A则描述了该基本需求的特殊情况。 注释体:对实体进行文字描述 注释连接:将注释体与要描述的实体连接,说明该注释体是针对该实体所进行的描述。使用扩展标准建模语言 (用例图)设置边界风险分析交易估计进行交易超越边界更新帐目评价贸易经理营销人员记帐系统销售人员使用使用扩展标准建模语言 (用例图)标准建模语言 (用例图)用例模型的获取:获取执行者获取用例标准建模语言 (用例图)获取执行者:谁使用系统的主要功能(主要使用者)?谁需要系统支持他们的日常工作?谁来维护、管理系统使其能正常工作(辅助使用者)?系统需要控制哪些硬件?系统需要与其他哪些系统交互?对系统产生的结果感兴趣的是哪些人?标准建模语言 (用例图)获取用例:执行者要求系统提供哪些功能?执行者需要读、产生、删除、修改或存储系统中的信息有哪些类型?必须提醒执行者的系统事件有哪些?执行者必须提醒系统事件有哪些?怎样把这些事件表示成用例中的功能?标准建模语言 (类图)n在面向对象的建模技术中,类、对象和它们之间的关系是最基本的建模元素。对于一个想要描述的系统,其类模型、对象模型以及它们之间的关系揭示了系统的结构。n类图描述了系统中的类及其相互之间的各种关系,其本质反映了系统中包含的各种对象的类型以及对象间的各种静态关系(关联,子类型)。标准建模语言 (类图)类图中的图符: 类:表示一个类,其中第一栏是类的 名,第二栏是类的属性,第三栏是类的操作。 包:包是一种分组机制,表示一个类 图集合。 关联:用于表示类的对象之间的关系。其特殊形式有组成关联和聚集关联。OperationsAttributesClassPackage标准建模语言 (类图)类图中的图符: 聚集关联:用于表示类的对象之间的关系是整体与部分的关系。 组成关联:用于表示类的对象之间的关系:整体拥有各部分,部分与整体共存,如整体不存在了,部分也会随之消失。 泛化关联:泛化关系(继承关系)定义了类和包间的一般元素和特殊元素之间的分类关系。标准建模语言 (类图)类图中的图符: 依赖关系:有两个类或包元素X、Y,修改元素X的定义可能会引起对另一个元素Y的定义的修改,则称元素Y依赖于元素X。 对象:类的一个实例。 链接:用于表示对象间的关联关系的一个实例。ValuesObject标准建模语言 (类图)n单一继承CarPowered VehicleTruckTruckCarPowered Vehicle标准建模语言 (类图)n多重继承AircraftPowered VehicleCarAirplaneTruck标准建模语言 (类图)n关联的基本表示法PersonCompanyCountry0.*0.*0.*1.*1.10.1居民雇员雇主EmploymentSiteResidence标准建模语言 (类图)关联表示的一些说明:并不要求关联一定要有名字。但给所有关联命名(组成和聚集关联除外),是一个好习惯。也不需要角色名。但最好给出有意义的角色名。 通常简写多重性。. 0.* 简写为*,1.1写为1。标准建模语言 (类图)多向关联CompanyPurchasedQuantityItemType减价程度0.*0.*0.*厂商产品ItemPurchase CatalogunitPrice:Money标准建模语言 (类图)整体/部分关联组成聚集标准建模语言 (类图)组成整体: 组成对象()部分:成分对象( )如果没有成分对象,组成对象也不存在。 在任何时候,每个给定的成分对象只能是组成对象的组成部分。组成是典型的异构。成分对象可能由多个类型混合组成。.轮子、车轴、木头构成四轮马车。标准建模语言 (类图)组成滑翔机机翼机尾机身fuselagetailleftWingrightWing1111标准建模语言 (类图)聚集整体:聚集对象()部分:构成对象()构成对象不存在,聚集对象还可存在。在任何时候,每个对象都可是多个聚集的构成。聚集往往是同构的。 .森林是树木构成的。标准建模语言 (类图)聚集MgmtReportCorporateDivisionCorporationParagraphtextPartdivision0.*0.*11.*标准建模语言 (类图)订单DateReceivedisPrepaidnumber:Stringprce:MoneyDispatch()close()订单项Quantity:Integerprice:MoneyisSatisfied:Boolean1*项客户NameaddressCreditRating():String团体客户ContactNamecreditRatingcreditLimitRemind()billforMonth(Intrger)雇员产品个人客户CreditCard#creditRating()=“poor”销售代表1*0.11*标准建模语言 (对象图)对象图对象图是类图的一种变形。除了在对象名下面要加下划线以外,对象图中所使用的符号与类图基本相同。对象图是类图的一种实例化。一张对象图表示的是与其对应的类图的一个具体实例,即系统在某一时期或者某一特定时刻可能存在的具体对象实例以及它们相互之间的具体关系。标准建模语言 (对象图)作者计算机名字:String内存:Ineger名字:String年龄:Integer0.1Uses1.*小王:作者小王的工作PC:计算机名字 = “王小影”年龄 = 32小王的工作PC:计算机名字 = “Compaq X”内存 = 32名字 = “Dell486”内存 = 64类图对象图标准建模语言 (对象图)n对象图并不象类图那样具有重要的地位,但是利用它可以帮助我们通过具体的实例分析,更具体直观地了解复杂系统类图的丰富内涵。n对象图还常常被用作合作图的一部分,用以展示一组对象实例之间的动态协作关系。标准建模语言 (包图)n包是类的集合。n包图所显示的是类的包以及这些包之间的依赖关系。n如果两个包中的任意两个类之间存在依赖关系,则这两个包之间存在依赖关系。n包的依赖是不传递的。标准建模语言 (包图)订单获取界面订单获取应用AWT邮件发送清单界面邮件发送清单应用订单顾客标准建模语言 (包图)何时使用包图:在大项目中,包图是一种重要工具(有专家建议,只要你不能将整个系统的类图压缩到一张A4纸上,你就应该使用包图);依赖产生耦合,应该尽量将依赖性减少到最低程度;包的概念对测试也是特别有用的。标准建模语言 (状态图)状态图状态图是对类的一种补充描述,它展示了此类对象所具有的可能的状态以及某些事件发生时其状态的转移情况。 表示状态。状态的改变称作转移,状态转移由箭头表示,箭头旁可以标出转移发生的条件。状态转移可以伴随有某个动作,它表明当转移发生时系统要做什么。 表示初始状态。 表示终止状态。标准建模语言 (状态图)下降状态在第一层上升状态向第一层下降空闲状态上升到达到达上升超时下降到达第一层标准建模语言 (状态图) tentativecanceledconfirmedentry/self.cancelcustSubmitsOrdercustConfirmsOrdercustCancelsOrdercustCancelsOrderAfter(30days)Cust.notifyCanceled(self)self.fulfillmentStatus not=shipped标准建模语言 (顺序图)顺序图顺序图描述了对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。顺序图由一组对象构成,每个对象分别带有一条竖线,称作对象的生命线,它代表时间轴,时间沿竖线向下延伸。顺序图描述了这些对象随着时间的推移相互之间交换消息的过程。消息用从一条垂直的对象生命线指向另一个对象的生命线的水平箭头表示。图中还可以根据需要增加有关时间的说明和其他注释。标准建模语言 (顺序图):计算机:打印服务程序:打印队列:打印机打印文件打印文件打印机空闲保存文件打印机忙标准建模语言 (合作图)合作图与顺序图作用相同,合作图也是用来描述系统中对象之间的动态协作关系。合作图侧重于描述各个对象之间存在的消息收发关系(交互关系),而不专门突出这些消息发送的时间顺序。在合作图中,对象同样是用一个对象图符来表示,箭头表示消息发送的方向,而消息执行的顺序则由消息的编号来表明。标准建模语言 (合作图).从一个帐户()传送一笔资金到另外一个帐户()fromAccount:BankAccounttoAccount: BankAccount1.transferFunds(.)2.depositFunds(.)标准建模语言 (合作图)n合作图中的多态性:指向目标对象有可能隶属的所有类的超类icon:(Polygon)Scal(factor:PositiveReal)标准建模语言 (合作图)n重复的消息:向一个聚集对象的每个组成部分发出同样的消息。n重复消息的三个特性:n1。这种消息有一个星号作为前缀,表示发往多个目标。n2。集合的名字是放在通常的位置,但是每个单独的目标对象没有名字。n3。目标对象的符号是双重的,表示多样性。标准建模语言 (合作图)currDesktop:desktop:(Polygon)*:scale(factor:PositiveReal)10.*icons标准建模语言 (合作图)n在消息中使用(可用)n把 作为一个参数来传递,用来告诉目标对象是哪个对象发送的消息。n发送一个消息给它自身。标准建模语言 (合作图)senderObject:Class1senderObject:Class1message1(self:Class1,)senderObject:Class1self: Class1message2(.)Self作为一个参数来传递发送对象发送一个消息给它自身(self是目标对象)标准建模语言 (合作图):计算机:打印队列:打印服务程序:打印机1. 打印文件 3. 保存文件打印机忙2.打印文件打印机空闲标准建模语言 (合作图)n合作图的布局方法能更清楚地表示出对象之间静态的连接关系。n顺序图突出执行的时序,能更方便地看出事情发生的次序。n如果要描述在一个用例中的几个对象协同工作的行为,交互图是一种有力的工具。交互图擅长显示对象之间的合作关系,尽管它并不对这些对象的行为进行精确的定义。n如果想要描述跨越多个用例的单个对象的行为,应当使用状态图;如果想要描述跨越多个用例或多个线程的多个对象的复杂行为,则需考虑使用活动图。标准建模语言 (活动图)活动图活动图描述系统中各种活动的执行顺序,通常用于描述一个操作中所要进行的各项活动的执行流程。同时,它也常被用来描述一个用例的处理流程,或者某种交互流程。活动图由一些活动组成,图中同时包括了对这些活动的说明。当一个活动执行完毕之后,控制将沿着控制转移箭头转向下一个活动。活动图中还可以方便地描述控制转移的条件以及并行执行等要求。在很多方面,活动图是结构化开发中流程图和数据流程图 () 的面向对象等同体 。标准建模语言 (活动图)活动图的图符 实心圆表示活动图的起点,实际上是一个占位符,带边框的实心圆表示终点。 圆角矩形表示执行的过程或活动。 菱形表示判定点。 箭头表示活动之间的转换,各种活动之间的流动次序。 条件 箭头上的文字表示继续转换所必须满足的条件,总是使用格式“条件”来描述。 粗线条表示可能会并行进行的过程的开始和结束。标准建模语言 (活动图)标准建模语言 (活动图)加水到容器中将咖啡放到过滤器中点燃咖啡炉取出咖啡杯把过滤器放到咖啡炉上冲调咖啡倒咖啡找饮料取一听可口可乐喝饮料人找到可口可乐没有可口可乐没有咖啡找到咖啡熄灭咖啡炉标准建模语言 (活动图)n活动图最适合支持描述并行行为,这使之成为支持工作流建模的最好工具。n活动图最大的缺点是很难清楚地描述动作与对象之间的关系。标准建模语言 (活动图)n对于以下情况可以使用活动图:n(1)分析用例;n(2)理解牵涉多个用例的工作流;n(3)处理多线程应用。n在下列情况下,一般不要使用活动图:n(1)显示对象间合作;n(2)显示对象在其生命周期内的运转情况。标准建模语言 (构件图)构件图构件图描述软件构件以及它们之间的依赖关系,从而便于人们分析和发现当修改某个构件时可能对那些构件产生影响,以便对它们做相应的修改或更新。构件可以是源代码构件、二进制目标码构件、可执行构件或文档构件。 表示构件。标准建模语言 (构件图) Graphic.dll:图形库 Comhnd.cpp: 命令处理器 Main.cpp:主类 Whnd.obj: 窗口处理器 Comhnd.obj: 命令处理器 Main.obj:主类 client.exe: 客户程序 Whnd.cpp: 窗口处理器标准建模语言 (配置图)配置图配置图描述系统中硬件和软件的物理配置情况和系统体系结构。在配置图中,用结点(立方体)表示实际的物理设备,如计算机和各种外部设备等,并根据它们之间的连接关系,将相应的结点连接起来,并说明其连接方式。在结点里面,说明分配给该结点上运行的可执行构件或对象,从而说明哪些软件单元被分配在哪些结点上运行。标准建模语言 (配置图)客户A:个人电脑PC客户B:个人电脑PC数据库服务器:VAX服务器:02TCP/IP协议TCP/IP协议DecNet协议标准建模语言 (配置图)标准建模语言 (案例:系统软件)n项目概述n目的:建立系统软件( )。整个系统包括:、中央服务器( )、系统软件、有关的界面软件。n系统软件的工作:处理系统中和银行电脑之间的交易(),如:查帐、存款、提款等。与系统合作的银行有多家,它们各自有自己的电脑,处理自己的帐号和交易。所有通过中央服务器与每个银行的电脑通信。每家银行电脑处理的交易及其中运行的软件,乃至银行的内部事情与本项目无关。但银行电脑和系统软件之间的界面软件则属于本项目。标准建模语言 (案例:系统软件)工作过程: 银行的顾客持有提款卡( ),可在任何一个查帐、存款、提款、取收据等。提款卡插入后,卡上资料被读取,并提示顾客输入其个人密码。然后,系统检验密码的正确性,若没问题,便把顾客要做的交易传送到中央服务器进一步处理。标准建模语言 (案例:系统软件)系统软件的要求:(1)对所有使用系统的交易,都要有记录,且能每天做报告。(2)系统要有适当的安全措施。(3)一个帐号必须能够同时从多处接入做查询或其他帐务。(4)必须能兼顾未来的扩展,如增加出纳点、因特网客户机等。标准建模语言 (案例:系统软件)系统软件的限制:(1)系统由银行协会拥有。(2)系统软件在中央服务器里运行。(3)各银行自己发行提款卡,并保管有关资料。一家银行发行的卡,头6个数字相同。(4)所有有同样的界面。(5)每家银行的电脑有其程序界面,不一定与其它银行的相同。标准建模语言 (案例:系统软件)n静态分析和设计n静态分析:找出对象类及其静态关系。n动态分析:对象间的相互作用及其对外界面。n核心设计:交易。交易是一个二元关联类,它将提款卡()和联系起来。标准建模语言 (案例:系统软件)交易是系统软件的核心设计Cardnumber:Integername:Stringtrx:Transaction*ATMserialNumber:Integerlocation:Stringtrx:Transaction*Transactiontime:Datecontent:Stringcard:Cardatm:ATM*标准建模语言 (案例:系统软件)系统软件的局部设计BankInfoCardATMTransactionATMManagermanages*111manages标准建模语言 (案例:系统软件)系统软件设计总图BankInfoCardAgentTransactionATMManagermanages*111managesmanagesInternetCashierATM*1标准建模语言 (案例:系统软件)n持久对象设计persistentBankInfopersistentCardpersistentAgentpersistentTransactionpersistentATMManager*111persistentInternetpersistentCashierpersistentATM*1persistentDailylog11*标准建模语言 (案例:系统软件)n动态分析ReceiptInquiryDepositWithdrawATM System标准建模语言 (案例:系统软件)系统时序图IF ImplBankClientATMCentral ServerIF ImplATM Manager插卡问口令键入口令选择交易问金额键入金额发出现金口令正确查证口令请求处理交易确实完成交易检查帐号资料口令正确银行交易数据库记录完成标准建模语言 (案例:系统软件) () () () () () () () ()标准建模语言 (案例:系统软件)n界面设计bankinterfaceAccountMgrIFIF ImplAccountImplIF ImplAccountMgrImplinterfaceAccountIFimplementsimplementsmanages1*标准建模语言 (案例:系统软件)n界面的详细定义interfaceAccountIFget operationsgetBalance():FloatgetAccountInfo():AccountInfogetHistory():Stringtransaction operationsDeposit(amount:float):FloatWithdraw(amount:Float):FloattransferTo(accountName:string, amount:Float):FloatPaybill(receiver:String,amount:Float):FloatinterfaceAccountMgrIFaccess operationsLogin(accountInfo:AccountInfo): AccountIFLogout(account:AccountIF)account managementOpen(accountInfo:AccountInfo,initialAmount:Float):AccountIFRemove(accountInfo:AccountInfo)Showaccounts():String标准建模语言 (案例:系统软件)interfaceSessionIFget operationsgetBalance():FloatgetAccountInfo():AccountInfogetHistory():Stringtransaction operationsDeposit(amount:float):FloatWithdraw(amount:Float):FloattransferTo(accountName:string, amount:Float):FloatPaybill(receiver:String,amount:Float):FloatAccountImplget operationsgetBalance():FloatgetAccountInfo():AccountInfogetHistory():Stringtransaction operationsDeposit(amount:float):FloatWithdraw(amount:Float):FloattransferTo(accountName:string, amount:Float):FloatPaybill(receiver:String,amount:Float):FloatBalance:FloataccountInfo:AccountInfoHistory:String 界面标准建模语言 (案例:系统软件)interfaceSessionMgrIFaccess operationslogin(cardInfo:CardInfo):SessionIFlogout(Session:SessionIF)标准建模语言 (案例:系统软件)atmcsinterfaceSessionMgrIFIF ImplSessionImplIF ImplSessionMgrImplinterfaceSessionIFimplementsimplementsmanages1*interfaceAccountIF11account 包含的两个界面支撑环境 基于的模型驱动的软件开发环境全面支持团队整体合作的开发形式集成了最新软件开发技术和思想的扩展n实时模型 n可执行模型n企业计算 n () n ()n软件过程 ()n其他 n n n n 框架下的软件工程n我们已经有了统一的建模语言n我们正在拥有统一软件过程(?)n下一步是什么?nA n n nA n n 时间表n1997 1.0, 1.1n1998 1.3n2000 1.4 ?n2002 2.0 ?n2004 一个稳定完善的 ?当前的研究热点当前围绕的研究工作集中在两个方面:使得更加精确为提供有效的工具支持的国际会议n 98 , 3 - 4 , 1998, , n 99 , 28 - 30 , 1999, , , n 2000 , 2 - 6 , 2000, , n 2001 , 1 - 5 , 2001, , n , UML当前的研究热点当前围绕UML的研究工作集中在两个方面:n使得UML更加精确n为UML提供有效的工具支持演讲完毕,谢谢观看!