高级软件工程(第八章)-面向对象的分析与建模(2017课件)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

111第八章面向对象的分析与建模2在面向对象分析中,对象、事件和响应成为分析的主体,分析的着力点转向了交互。强调的是在问题领域中发现和描述对象或概念。面向对象分析中一个重要的结果是领域模型(重要的概念及其关联)。PlanetailNumberpublicclassPlane{privateStringtailNumber;publicListgetFlightHistory(){...}}domainconceptvisualizationofdomainconceptrepresentationinanobject-orientedprogramminglanguage领域概念领域概念的可视化2面向对象分析(OOA)概述3建模建立模型的过程是一个抽象的过程。从很高的抽象层次看,现实世界无论多么复杂,本质上都是由人、事、物和规则组成。人要做事,做事就会使用一些物并产生另一些物,同时做事需要遵循一定的规则。人驱动系统,事体现过程,物记录结果,规则是控制。建立模型的关键就是弄明白有什么人,什么人做什么事,什么事产生什么物,中间有什么规则,再把人、事、物之间的关系定义出来,一个模型也就基本成型了。4分析阶段的三种基本模型完整描述系统需要不同的视图(角度),典型的建模需要从不同的层面建立模型。面向对象的建模中从三种相关但不同的角度来建模系统会很有效。每种角度都捕获了重要的系统层面,但完整描述就需要全部三种模型。这三种模型是:类模型、状态模型和交互模型。这三种模型将一个系统划分成不同的视图。在高层次上,用例模型描述了系统如何与外部参与者交互,为分析提供了基础。5类模型的定义类模型描述了系统内部对象的特征、对象之间的相互关系以及对象所属的每个类的属性和操作,捕捉系统的静态特征。类模型在三种模型中更为重要。强调围绕对象而不是功能来构建系统,因为面向对象系统与现实世界更为接近,所以更容易相应变化。6对象建模(ObjectModeling)是一种用于辨识系统环境中的对象和这些对象之间关系的技术。对象建模方法要求使用完全不同于数据建模和过程建模的方法和图形记号(目前最主要的OO建模工具是UML)。面向对象分析涉及到定义信息系统的静态和动态行为模型,而不是定义数据和过程模型(这是传统开发方法的目标)。7面向对象思想每个对象都扮演了一个角色,并为其它成员提供特定的服务或执行特定的行为。在面向对象世界中,行为的启动是通过将“消息”传递给对此行为负责的对象来完成的。同时还将伴随着执行要求附上相关的信息(参数);而收到该消息的对象则会执行相应的“方法”来实现需求。用类和对象表示现实世界,用消息和方法来模拟现实世界。8对象类共享公共属性和行为的对象集合。有时称为类。在UML中为类提供了图形表示。这种可视化的抽象表示,使得我们对类的描述脱离了具体编程语言,而只需要强调抽象的主要部分。类图提供了对类及其关系进行建模的一种图形化的表示法;类主要是由名称、属性和操作组成。类在UML中由专门的图符表达,是一个分成3个分隔区的矩形。其中顶端的分隔区为类的名字,中间的分隔区放类的属性、属性的类型和值(在UML符号表示中给出类的初始值),第3个分隔区放操作、操作的参数表和返回类型。9属性(attribute)属性是已被命名的类的特性,它描述了类的对象(也就是类的实例)所具有的一系列特性值。属性描述了正被建模的事件的一些特性,这些特性是类的所有对象所共有。例如,所有的CPU都有主频率、指令集类型、运算的位算和外观尺寸。一个类可以具有零个到多个属性。属性名列表放在类名之下,并且和类名之间用分隔号隔开。10如何组织属性和操作?在建类模型时,类图中没有必要一下子将全部的属性和操作都画出来。(大多数情况下也不可能,例如领域建模时)只将感兴趣的属性和操作画出来就可以了。可以用”...”表示还有属性或操作没有画出来。11关联(association)关联描述了有共同的结构和语义的一组链接。例如,一个人为一家公司工作(WorksFor),这里WorksFor就是一个关联。如同类描述了一组潜在的对象那样,关联以相同的方式描述了一组潜在的链接。在问题陈述中,链接和关联经常以动词形式出现。关联可以使从一个类导航到另外一个类。12关联的多重性多重性指定了一个类与关联类的单个实例可能相关的实例数目。多重性约束了相关对象的数目。关联表示了对象间的结构关系。有时在建模时需要说明一个关联的实例中有多少个相互连接的对象。PersonCompany*1Worksfor13如何使用关联?在分析阶段,关联表示对象之间的逻辑关系。没有必要指定方向或者关心如何去实现它们。应该尽量避免多余的关联,因为它们不会增加任何逻辑信息。在设计阶段,关联用来说明关于数据结构的设计决定和类之间职责的分离。此时,关联的方向性很重要,而且为了提高对象的存取效率和对特定类信息的定位,也可引入一些必要的多余关联。14聚合(aggregation)在实际建模中,往往需要对“整体/部分”的关系进行描述。在这种关系中,其中一个类所描述的是一个较大的事物(即“整体”),它由较小的事物(“部分”)组成。这种关系在面向对象中就称为聚合,它描述了“has-a”的关系,意思是整体对象拥有部分对象。聚合是一种特殊的关联。例如,电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。在UML中被表示为在整体的一端用一个空心菱形修饰的简单关联。15组合也是关联关系的一种特例,体现的是一种“contains-a”的关系,这种关系比聚合更强,也称为强聚合。整体拥有各部分,部分与整体共存,如整体不存在了,部分也会随之消失。在UML中被表示为在整体的一端用一个实心菱形修饰的简单关联。组合关系(Composition)16面向对象(OO)的需求分析系统开发过程开始于确定事件和事物。事件:新系统所必须考虑的业务过程;事物:包含在商业过程中的问题域对象。新开发人员经常会问这样的问题:是先定义事件和还是先定义实物。事实上,这两个方面是紧密联系在一起的,它们通常一起定义。有经验的开发人员经常在确定类和商业过程之间不断切换。17领域模型领域模型(domainmodel)是对领域内的概念类或现实世界中对象的可视化表示。又称概念对象模型、领域对象模型、分析对象模型。领域模型是对实际问题领域的抽象表示,它专注于分析问题领域本身,发掘重要的业务领域概念或对象,并建立业务领域概念之间的关系。领域模型的作用领域模型是作为设计软件对象的启发来源。领域模型是说明问题域里(对建模者来说)有意义的领域类,它是面向对象分析的时候要创建的最重要的工作(必须说明,用例虽然也是一个重要的分析工作,但它并不是面向对象的,它是强调的概念的过程视图)。识别一个丰富的领域类集,是面向对象分析的核心工作,做好这项工作,将会在设计和实现期间获得丰富的回报。1819UML如何表示领域模型?使用UML表示法,领域模型用一组不带操作的类图来表示,可显示:领域对象或概念类概念类之间的关联概念类的属性1920如何理解领域模型?领域模型不是对软件对象的描述,而是对真实世界领域中的概念或对象的可视化。面向对象分析关注从对象的角度创建领域描述,分析的结果可以表示为领域模型,在领域模型中展示重要的领域概念或对象。这里的对象是指领域对象,是指真实世界的概念,从本质上说它直接来源于现实世界,没有软件设计技术层次上的考虑。21对象建模过程1.建模系统功能[用例参与者词汇表、用例图、用例描述、活动图];2.发现并确定业务对象[对象列表];3.组织对象并确定它们之间的关系[类图]。面向对象分析要求我们辩识从用户角度开发所需的系统功能、支持所需系统功能的对象、对象的数据属性、相关的行为以及对象之间的关联。面向对象分析包含以下三个活动:22建模系统功能在进行面向对象分析时,为了准备对象建模,需要把以前定义的业务需求用例模型转化成分析用例模型。业务需求用例:关注各种参与者的战略视图和目标。这类用例是面向用户的,反映了系统期望行为的高层视图,提供了对问题域和范围的一般性理解,不包括交互细节。系统分析用例:从业务需求用例导出的,记录系统用户与系统之间交互的用例。反映了用户界面约束之类的实现细节,开发人员使用这种用例说明详细的需求,但仍然没有太多的实现细节和约束。23构造分析用例模型根据以下步骤将业务需求用例模型转换成系统分析用例模型:①确定、定义并记录新的参与者②确定、定义并记录新的用例③确定任何复用的可能性④细化用例模型图(如果需要)⑤记录系统分析用例描述课堂练习一画出类模型图,能正确表示出以下要求:①一个雇员最多有一个经理;②经理可以管理多个雇员;③经理也可以不管理任何雇员。EmployeeManager0..n1课堂练习参考答案课堂练习二-----描述以下类模型的语义order(订单),orderitlm(订单项),customer(顾客),consignee(收货人),delierorder(送货单),peddlery(商户),product(产品)。CustomerConsigneeOrder0..n0..111DeliverOrder1111..nPeddlery0..n1Product0..n1OrderItem11..n1..n1110..n0..11111..n1111..n11..n0..n10..n111源类目标类关联分析Customer(1)Order(0…n)订单是属于某个客户的,网站的客户可以有0个或多个订单Order(1)Consignee(1)每个订单只能够有一个收货人Order(1)OrderItem(1…n)订单是由订单项组成的,至少要有一个订单项,最多可以有n个Order(1)DeliverOrder(1…n)一个订单有一个或多个送货单说明:系统根据订单项的产品所属的商户,将其分发给商户,拆成了多个送货单!DeliverOrder(1)OrderItem(1…n)一张送货单对应订单中的一到多个订单项DeliverOrder(1)Consignee(1)每张送货单都对应着一个收货人Peddlery(1)DeliverOrder(0…n)每个商户可以有相关的0个或多个送货单OrderItem(1)Product(1)每个订单项中都包含着唯一的一个产品Peddlery(1)Prodcut(0…n)产品是属于某个商户的,可以注册0到多个产品课堂练习参考答案

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功