软件需求分析与设计 - 架构设计模型

justsoso12

贡献于2012-04-23

字数:0 关键词:

软件需求分析与设计 -架构设计模型 2011-10-13 2 架构和设计模型 • 主要内容 – 从需求到设计-迭代计划 – 逻辑架构和UML包图 – 迈向对象设计 –UML交互图 –UML类图 2011-10-13 3 从需求到设计-迭代进化 • 以迭代方式做正确地事,正确的做事 – 分析关注做正确的事 – 设计强调正确的做事:即:为满足当前迭代的需 求灵活地设计解决方案。 • 尽早引发变更 – 在迭代早期,发现和变更一些需求是自然的, 也是有帮助的 – 尽早编程、测试和演示有助于尽早引发不可避 免的变更 2011-10-13 4 UP制品关系示例 : Register enterItem (itemID , quantity ) : ProductCatalog spec = getProductSpec ( itemID ) Require - ments Business Modeling Design Sample UP Artifact Relationships Vision Glossary The logical architecture is influenced by the constraints and non -functional requirements captured in the Supp . Spec . Domain Model ** Supplementary Specification Use -Case Model Register ... makeNewSale () enterItem (...) ... ProductCatalog ... getProductSpec (...) ... 1 1class diagrams (a static view ) interaction diagrams (a dynamic view ) UIpackage diagrams of the logical architecture (a static view ) Domain Tech Services Design Model 2011-10-13 5 逻辑架构和UML包图 • 逻辑架构是软件类的宏观组织结构,他将软件类组织为包(命名空 间)、子系统和层 – 没有决定如何在不同的操作系统或网络层中物理的计算机上对这 些元素进行部署 • 层是对类、包或子系统的甚为粗粒度的分组,具有对系统主要方面加 以内聚的职责, OO系统中通常包括的层有: – 用户界面 – 应用逻辑和领域对象-表示领域概念的软件对象, (例如软件类 Sale),这些对象实现了应用需求,例如计算销售总额。 – 技术服务-提供支持技术服务的常用对象和子系统,例如数据库接 口或错误日志。这些服务通常是独立于应用的,也可在多个系统 中复用。 • 严格的分层,高层可以调用相邻较底层的服务。 • 宽松的分层架构,较高层可以调用其下任何层的服务。 2011-10-13 6 UML包图所表示的层 Domain UI Swing not the Java Swing libraries, but our GUI classes based on Swing Web Sales Payments Taxes Technical Services Persistence Logging RulesEngine 2011-10-13 7 软件架构 • 架构是一组重要决策,涉及软件系统的组织,对 结构元素及其组成系统所用接口的选择,从这些 结构和行为元素到规模更大的子系统的组成,以 及指导该组织结构的架构风格 • 共同主题涉及 – 动机、约束、模式、职责和系统连接 2011-10-13 8 应用UML:包图 • 通常用于描述系统的逻辑架构 – 层、子系统、包 • 包含元素 – 类、其他包、用例 • 用依赖线描述包之间的依赖关系 2011-10-13 9 嵌套包的表示方法 Domain::Sales UI::WebUI::Swing Sales WebSwing UI Domain DomainUI Swing SalesWeb 2011-10-13 10 使用层进行设计 • 将系统的大型逻辑结构组织为独立的、职责相关 的离散层,具有清晰、内聚的关注分离 • 协作和耦合是从较高层到较低层进行的、要避免 从较低层到较高层的耦合 • 有助于解决的问题 – 源码的变更波及整个系统 – 应用逻辑与用户界面交织在一起 – 潜在的一般性技术服务或业务逻辑与更特定于应用的 逻辑交织在一起, – 不同的关注领域之间高度耦合 2011-10-13 11 使用层进行设计 • 使用层的好处 – 可以做到关系分离、高级服务与低级服务分离、特定 于应用的服务与一般性服务分离 – 层可以减少耦合和依赖性,增强内聚性、提高潜在的 复用性并且使概念更加清晰 – 封装和分解了相关的复杂性 – 某些层能够用新的实现替代 – 较低层包含可复用功能 – 某些层(应用)可以是分布式的 – 通过逻辑划分,有助于团队开发 内聚职责;使关系分离 • 同一层内的对象在职责上应该具有紧密关联,不 同层中对象则不应该混淆。 – 例如,UI层中的对象应该关注于UI工作,例如 创建窗口和小部件,捕获鼠标和键盘事件等。 – 应用逻辑或“领域”层中的对象应该关注应用逻 辑,例如计算销售总额或税金。 2011-10-13 13 信息系统逻辑架构中常见的层 UI (AKA Presentation , View ) Application (AKA Workflow , Process , Mediation , App Controller ) Domain (AKA Business , Application Logic , Model ) Technical Services (AKA Technical Infrastructure , High -level Technical Services ) Foundation (AKA Core Services , Base Services , Low -level Technical Services /Infrastructure ) 宽度表示可应用的范围 GUI 窗口 报表 语音接口 HTML , XML , XSLT , JSP , Javascript , ... 处理表示 层请 求 工作流 会话状态 窗口 /页面转换 合并/转换 不/同的表示 数据 处理应用 层请 求 实现领域 规则 领域服务 (POS、库存 )(, - 服务可能 只用 于一个应 用, 但是也存 在 多应用服 务的 可能性, - ((相对)高层 技术) - 服务 和框架 持久性、 安全 等, 低层- 技术服 务、 工具和框 架, 数据结构 、 , 线程、 , 数学、文 件, , DB、, 网络、 /I/O 更特定于应用 依赖性 Business Infrastructure (AKA Low -level Business Services ) 用于多种 业务 -领域的十 分普 遍的低层 业务服务 2011-10-13 14 代码组织映射成为包 //--- UI 层 com.mycompany.nextgen.ui.swing com.mycompany.nextgen.ui.web //--- 领域层 com.mycompany.nextgen.domain.sales com.mycompany.nextgen.domain.payments //---技术服务层 //我们自己的持久访问层 com.mycompany.service.persistence // 第三方 org.apache.log4j org.apache.soap.rpc //---基础层 //我们小组创建的基础包 com.mycompany.util 2011-10-13 15 领域层与应用逻辑层 • 通过创建软件对象,使其名称和信息类似于真 实世界的领域,并且为其分配应用逻辑职责来 设计应用逻辑 – 例如,真实世界的POS具有销售和支付功能。因此 ,在软件中,我们创建Sale和Payment类,并且赋 予其相应的应用逻辑职责。这种软件对象称为领域 对象。 • 领域对象表示问题领域空间的事物,并且与应 用或业务逻辑相关,例如,Sale的对象可以计 算销售总额。 • 领域层,即包含领域对象处理应用逻辑的层。 2011-10-13 16 领域层和领域模型的关系 Payment amount Sale date time Pays-for Payment amount: Money getBalance (): Money Sale date: Date startTime: Time getTotal(): Money . . . Pays-for UP领域模型 涉众对领域内重要概念的看法' UP设计模型中架构的领域层 面向对象开发者在创建软件类时从真实世界获得启发 - . 因此涉众所设想的领域与其在软件的表示之间的表示差异被降低, , , . 1 1 1 1 领域模型中的Payment是 概念,但在设计模型中的 Payment是软件类。 它们不是一回事,但前者 启发了后者的名称和定义。 , . , 这减少了表示差异 . 这是对象技术的主要思想 之一 启发了 对象及 其名称 2011-10-13 17 层(Tier)、层(Layer)和分区(Partition) • 层(Tier)在架构中最初表示的是逻辑层(Layer) , 而不是物理节点,但现在也广泛应用表示物理进 程节点 – 客户层(客户端计算机) • 架构中的层(Layer)表示对系统在垂直方向的划 分,分区则表示对层在水平方向进行划分,形成 相对平行的子系统 2011-10-13 18 层和分区 Persistence Security Logging Technical Services POS Inventory Tax Domain 垂直分层 水平分区 不要将外部资源表示为最底层 • 将外部资源(如某个数据库)表示为“低于”(例 如)基础层的层,是对逻辑视图和架构部署视图 的混淆。 • 就逻辑架构及其层而言, – 对某个持久数据集合(例如库存数据)的访问 可以视为领域层中的子领域——库存子领域。 – 而提供数据库访问的一般性服务则可以视为技 术服务分区——持久性服务。 2011-10-13 20 构架的混合视图 Domain(s) Technical Services Foundation MySQL Inventory Persistence Naming and Directory Services Web AppFramework Technical Services POS Inventory Domain(s) Foundation 较差 混淆了逻 辑 视图和部 署 视 图 较好 逻辑视图 a logical representation of the need for data or services related to these subdomains, abstracting implementation decisions such as a database. «component» Novell LDAP UML notation: A UML component , or replaceable , modular part of the physical system UML notation: A physical database in the UML . 2011-10-13 21 模型-视图分离原则 • 不要将非UI对象直接与UI对象连接或耦合 –UI对象与某个应用相关,而(理想情况下)非UI对象 可以在新应用中重用或附加到新界面。 • 不要在UI对象方法中加入应用逻辑 –UI对象应该只初始化UI元素、接收UI事件、将应用逻 辑的请求委派到非UI对象 •MVC中模型对象不应直接与视图对象连接 • 观者者模式 – 领域对象只能通过propertylistener的接口向视图的UI对 象发送消息 2011-10-13 22 模型-视图分离原则 • 动机 – 支持内聚的模型定义,这些定义只关注领域过程,而 不是用户界面 – 允许对模型和用户界面层分别进行开发 – 使界面的需求变更对领域层的影响最小化 – 允许新视图能够方便地连接到现有的领域层之上,而 不会对领域层产生影响 – 允许对同一模型对象同时使用多个视图 – 允许模型层的运行不依赖于用户界面 – 允许模型层能够简单地移植到另一用户界面 SSD和就层而言的系统操作 • SSD描述了系统操作 • 捕获这些系统操作请求的对象通常是系统UI层的 对象 •UI层对象将从UI层向领域层转发(或委派)请求 以进行处理 • 从UI层发送到领域层的消息将是SSD中所描述的 消息,例如enterItem 2011-10-13 24 SSD和就层而言的系统操作 Domain UI Swing ProcessSale Frame... ... Register makeNewSale () enterItem() ... : Cashier makeNewSale () enterItem() endSale() makeNewSale () enterItem() endSale() enterItem(id, quantity) :System : Cashier endSale () description , total makeNewSale () 在SSD中有系统处理的系统操作表示 从UI层到应用或领域层的操作调用 2011-10-13 25 迈向对象设计 • 开发者如何设计对象 – 编码 – 绘图,然后编码 – 只绘图,不编码,使用工具生成一切 2011-10-13 26 UML建模 • 动态建模 – 有助于设计逻辑、代码行为或方法体 •UML交互图 – 倾向于创建更为有益、困难和重要的图形 – 应该把时间花费在交互图(顺序图或通讯图),而 不仅是类图上 • 静态建模 – 有助于设计包、类名、属性和方法特征标记 • 在绘制UML对象图时,回答以下问题 – 对象的职责是什么 – 对象在与谁协作 – 应该用什么设计模式 2011-10-13 27 UML交互图 •UML使用交互图来描述对象间通过消息的交互 – 顺序图(sequence diagram) – 通讯图(communication diagram) 类型 优势 劣势 顺序图 能够清晰表示消息的顺序和事件排 序;大量详细表示法选项 强制在右侧增加新对 象,消耗水平空间 通讯图 空间效用-能够在二维空间内灵活 地增加新对象 不易查阅消息的顺序表 示法选项较少 2011-10-13 28 顺序图 : A myB : B doTwo doOne doThree 2011-10-13 29 交互图 : A myB : B 1: doTwo 2: doThree doOne 2011-10-13 30 对应的程序 public class A { private B myB =new B(); private void doOne() { myB.doTwo(); myB.doTree(); } //… } 2011-10-13 31 顺序图 : Register : Sale makePayment(cashTendered) makePayment(cashTendered) : Payment create(cashTendered) 2011-10-13 32 交互图 1: makePayment(cashTendered) 1.1: create(cashTendered) :Register :Sale :Payment makePayment(cashTendered) direction of message 2011-10-13 33 对应的程序 public class Sale { private Payment payment; private void makePayment(Money cashTendered) { payment =new Payment(cashTendered); } //… } 2011-10-13 34 表示交互中参与者的生命线框图 sales: ArrayList :Sale s1 : Sale lifeline box representing an instance of an ArrayList class, parameterized (templatized ) to hold Sale objects lifeline box representing an unnamed instance of class Sale lifeline box representing a named instance sales[ i ] : Sale lifeline box representing one instance of class Sale, selected from the sales ArrayList collection x : List «metaclass» Font lifeline box representing the class Font, or more precisely , that Font is an instance of class Class –an instance of a metaclass related example List is an interface in UML 1.x we could not use an interface here , but in UML 2, this (or an abstract class ) is legal 2011-10-13 35 交互图中的单实例类 : Register 1 : Store doA doX the ‘1’ implies this is a Singleton, and accessed via the Singleton pattern 2011-10-13 36 消息和控制期的执行规格条 : Register : Sale doA doB doX doC doD 通常使用实心箭头线表示 同步消息 初始消息 未指定其发送者 表示控制焦点 的执行规格条 2011-10-13 37 表示返回消息结果的两种方式 : Register : Sale d1 = getDate getDate doX aDate 2011-10-13 38 发送给“自身”的消息 : Register doX clear 2011-10-13 39 实例的创建和对象的生命线 : Register : Sale makePayment(CashTendered) : Paymentcreate(cashTendered) authorize note that newly created objects are placed at their creation "height" 2011-10-13 40 对象的销毁 : Sale : Paymentcreate(cashTendered) ... the «destroy» stereotyped message, with the large X and short lifeline indicates explicit object destruction «destroy» X 2011-10-13 41 UML顺序图中的图框 enterItem(itemID, quantity) : B endSale a UML loop frame, with a boolean guard expression description , total makeNewSale [ more items ]loop : A 2011-10-13 42 图框操作符 图框操作符 含义 alt 选择性片断,用于表示保护信息所表达的互斥条件逻辑 loop 用于表示保护信息为真的循环片断。也可以写为loop(n)以指明循 环的次数,这样能够增强规格说明,用以表示FOR循环 opt 当保护信息为真时执行的可选片断 par 并行执行的并行片断 region 只能执行一个线程的临界片断 2011-10-13 43 有条件消息 calculate : Bar yy xx [ color = red ]opt : Foo 2011-10-13 44 互斥的有条件消息 : B: A calculate doX : C calculate [ x < 10 ]alt [ else ] 2011-10-13 45 使用相对直接的表示法对集合进行迭代 st = getSubtotal lineItems[i] : SalesLineItem t = getTotal [ i < lineItems.size ]loop : Sale This lifeline box represents one instance from a collection of many SalesLineItem objects. lineItems[i] is the expression to select one element from the collection of many SalesLineItems; the ‘i” value refers to the same “i” in the guard in the LOOP frame an action box may contain arbitrary language statements (in this case, incrementing ‘i’) it is placed over the lifeline to which it applies i++ 2011-10-13 46 对应的程序 public class Sale { private lineItems = new ArrayList(); private Money getToal() { Money total = new Money(); Money subTotal = null; for( SalesLineItem lineItem : lineItems) { subtotal = lineItem.getSubtotal(); total.add(subtotal); } return total; } //… } 2011-10-13 47 隐含的表示对集合的迭代 st = getSubtotal lineItems[i] : SalesLineItem t = getTotal loop : Sale 2011-10-13 48 图框的嵌套 calculate : Bar xx [ color = red ]opt : Foo loop(n) 2011-10-13 49 交互关联 • 交互发生(interaction occurrence),交互使用 (interaction use) – 在交互中引用另一种交互 – 在整个顺序图周围放置图框,并加上sd标志和诸如 AuthenticateUser这样的名称 – 标记为ref的图框为引用,该引用指另一个已命名顺序 图 2011-10-13 50 交互具体值的示例sd和ref图框 interaction occurrence note it covers a set of lifelines note that the sd frame it relates to has the same lifelines: B and C doA : A : B : C doB sd AuthenticateUser ref AuthenticateUserauthenticate(id) doX doM1 : B : C authenticate(id) doM2 ref DoFoo sd DoFoo doX : B : C doY doZ 2011-10-13 51 调用类或静态方法 1: locales = getAvailableLocales : Foo «metaclass» Calendar doX message to class, or a static method call 2011-10-13 52 对应的程序 public class Foo { public void doX() { // 调用Calendar类的静态方法 Locale[] locales = Calender.getAvailableLocales(); //… } //… } 2011-10-13 53 用顺序图对多态案例建模的方法 :Register authorize doX :Payment {abstract } polymorphic message object in role of abstract superclass :DebitPayment doA authorize :Foo stop at this point – don’t show any further details for this message doB :CreditPayment doX authorize :Bar Payment {abstract } authorize () {abstract } ... CreditPayment authorize () ... DebitPayment authorize () ... Payment is an abstract superclass , with concrete subclasses that implement the polymorphic authorize operation 为多态的每个具体情况制作单独的图 2011-10-13 54 异步调用和主动对象 :ClockStarter :Clock run startClock create a stick arrow in UML implies an asynchronous call a filled arrow is the more common synchronous call In Java, for example , an asynchronous call may occur as follows: // Clock implements the Runnable interface Thread t = new Thread ( new Clock() ); t.start(); the asynchronous start call always invokes the run method on the Runnable (Clock) object to simplify the UML diagram , the Thread object and the start message may be avoided (they are standard “overhead” ); instead, the essential detail of the Clock creation and the run message imply the asynchronous call runFinalization System : Class 主动 对象 主动对象:在自己的执行线程中运行或 控制自己的执行线程的实例。 2011-10-13 55 通信图中表示链的线 1: makePayment(cashTendered) 2: foo 2.1: bar : Register :Sale link line •链(link)是连接两个对象的路径,它指明 了对象间某种可能的导航和可见性 •链是关联的实例 2011-10-13 56 消息 1: msg2 2: msg3 3: msg4 3.1: msg5 : Register :Sale all messages flow on the same link msg1 •对象间的每个消息都可以消息表达式和指明 方向的小箭头来表示 2011-10-13 57 传递到“自身”的消息 : Register msg1 1: clear 2011-10-13 58 实例的创建 1: create(cashier) : Register :Sale create message, with optional initializing parameters. This will normally be interpreted as a constructor call. «create» 1: make(cashier) : Register :Sale if an unobvious creation message name is used, the message may be stereotyped for clarity 1: create(cashier) : Register :Sale {new} Three ways to show creation in a communication diagram 2011-10-13 59 顺序编号 •不为第一个消息编号 •使用合法编号方案来表示后续消息的顺序和嵌套,其中 的嵌套消息要使用附加数字 : Amsg1 : B1: msg2 : C 1.1: msg3 not numbered legal numbering 2011-10-13 60 复杂的顺序编号 : Amsg1 : B1: msg2 : C 1.1: msg3 2.1: msg5 2: msg4 : D 2.2: msg6 first second fourth sixth fifth third 2011-10-13 61 有条件消息 1 [ color = red ] : calculate: Foo : Bar message1 conditional message, with test 2011-10-13 62 互斥消息 1a [test1] : msg2 : A : B : C 1a.1: msg3 msg1 : D 1b [not test1] : msg4 1b.1: msg5 : E 2: msg6 unconditional after either msg2 or msg4 1a and 1b are mutually exclusive conditional paths 2011-10-13 63 迭代 1 * [ i = 1..n ]: num = nextInt: SimulatorrunSimulation : Random iteration is indicated with a * and an optional iteration clause following the sequence number 2011-10-13 64 对集合的迭代 1 * [i = 1..n]: st = getSubtotal: Salet = getTotal This lifeline box represents one instance from a collection of many SalesLineItem objects. lineItems[i] is the expression to select one element from the collection of many SalesLineItems ; the ‘i” value comes from the message clause . lineItems[i]: SalesLineItem this iteration and recurrence clause indicates we are looping across each element of the lineItems collection. 1 *: st = getSubtotal: Salet = getTotal lineItems[i]: SalesLineItem Less precise , but usually good enough to imply iteration across the collection members 2011-10-13 65 调用静态方法 1: locs = getAvailableLocales : Foo «metaclass» Calendar doX message to class, or a static method call 2011-10-13 66 对多态的每个具体情况制作单独的图 :Register authorizedoX :Payment {abstract} polymorphic message object in role of abstract superclass :DebitPayment authorize :Foo stop at this point – don’t show any further details for this message separate diagrams for each polymorphic concrete case doA doB :CreditPayment authorize :Bar doX 2011-10-13 67 通讯图中的异步调用 3: runFinalization :ClockStarter System : Class startClock :Clock 1: create 2: run asynchronous message active object 2011-10-13 68 UML类表示法 java.awt::Font or java.awt.Font plain : Int = 0 { readOnly } bold : Int = 1 { readOnly } name : String style : Int = 0 ... getFont(name : String) : Font getName() : String ... «interface» Runnable run() - ellipsis “…” means there may be elements, but not shown -a blank compartment officially means “unknown” but as a convention will be used to mean “no members” SubclassFoo ... run() ... SuperclassFoo or SuperClassFoo { abstract } - classOrStaticAttribute : Int + publicAttribute : String -privateAttribute assumedPrivateAttribute isInitializedAttribute : Bool = true aCollection : VeggieBurger [ * ] attributeMayLegallyBeNull : String [0..1] finalConstantAttribute : Int = 5 { readOnly } /derivedAttribute + classOrStaticMethod() + publicMethod() assumedPublicMethod() - privateMethod() # protectedMethod() ~ packageVisibleMethod() «constructor» SuperclassFoo( Long ) methodWithParms(parm1 : String, parm2 : Float) methodReturnsSomething() : VeggieBurger methodThrowsException() {exception IOException} abstractMethod() abstractMethod2() { abstract } // alternate finalMethod() { leaf } // no override in subclass synchronizedMethod() { guarded } 3 common compartments 1. classifier name 2. attributes 3. operations interface implementation and subclassing Fruit ... ... PurchaseOrder ... ... 1 association with multiplicities dependency officially in UML, the top format is used to distinguish the package name from the class name unofficially, the second alternative is common order an interface shown with a keyword 2011-10-13 69 两种透视图中UML类图 Register ... endSale() enterItem(...) makePayment(...) Sale time isComplete : Boolean /total makeLineItem(...) Register ... Sale time isComplete : Boolean /total Captures 1 11 Domain Model conceptual perspective Design Model DCD; software perspective currentSale 2011-10-13 70 UML属性表示法:属性文本与关联线 Register ... ... Sale ... ... 1 Register currentSale : Sale ... Sale ... ... using the attribute text notation to indicate Register has a reference to one Sale instance using the association notation to indicate Register has a reference to one Sale instance OBSERVE: this style visually emphasizes the connection between these classes currentSale Register currentSale : Sale ... Sale ... ... 1 thorough and unambiguous , but some people dislike the possible redundancy currentSale 2011-10-13 71 在不同透视图中使用关联表示法的约定 the association name, common when drawing a domain model, is often excluded (though still legal) when using class diagrams for a software perspective in a DCD Register id: Int ... Sale time: DateTime ... 1 currentSale Register id : Int Sale time : DateTime Captures-current-sale1 1UP Domain Model conceptual perspective UP Design Model DCD software perspective 2011-10-13 72 应用准则,以两种表示法展示属性 准则:对数据类型对象使用属性文本表示法,对其 他对象使用关联线 Register id: Int ... Sale time: DateTime ... 1applying the guideline to show attributes as attribute text versus as association lines Store address: Address phone: PhoneNumber ... 1 Register has THREE attributes : 1. id 2. currentSale 3. location currentSale location 2011-10-13 73 在UML中表示集合属性的两种方式 notice that an association end can optionally also have a property string such as {ordered, List} Sale time: DateTime ... SalesLineItem ... ... 1..* lineItems {ordered, List} Sale time: DateTime lineItems : SalesLineItem [1..*] or lineItems : SalesLineItem [1..*] {ordered} ... SalesLineItem ... ... Two ways to show a collection attribute 2011-10-13 74 在类中如何表示方法体 Register ... endSale() enterItem(id, qty) makeNewSale() makePayment(cashTendered) «method» // pseudo-code or a specific language is OK public void enterItem( id, qty ) { ProductDescription desc = catalog.getProductDescription(id); sale.makeLineItem(desc, qty); } 2011-10-13 75 UML关键字样例 关键字 含义 用法示例 《actor》 类元为参与者 在类图中,置于类元名称之上 《interface》 类元为接口 在类图中,置于类元名称之上 {abstractor} 抽象元素;不能实例化 在类图中,置于类元名称或操 作名称之后 {ordered} 具有强制顺序的一组对 象 在类图中,置于关联的端点 2011-10-13 76 构造型的声明和使用 «stereotype» Authorship author: String status : String UML extension relationship to a basic UML metamodel term – Element «authorship» author = “craig” status = “tested” «metaclass» Element ... «authorship» Square ... using the stereotype a tool will probably allow a popup to fill in the tag values, once an element has been stereotyped with «authorship» declaring the stereotype 《》表示构造型,表示对现有建模概念的精化,并 且定义在UML简档中(profile)-一组相关构造型、 标记和约束的集合 2011-10-13 77 依赖 • 依赖从客户到提供者的虚线箭头线表示 • 依赖可以视为耦合的另一个版本 – 拥有提供者类型的属性 – 向提供者发送消息。对提供者的可见性可能是 • 属性、参数变量、局部变量、全局变量或类的可见 性 – 接收提供者类型的参数 – 提供者是超类或接口 • 在类图中,使用依赖线描述对象之间的全局变量、 参数变量、局部变量和静态方法依赖 2011-10-13 78 依赖关系图示 public class Sale { public void updatePriceFor(ProductDescription description){ Money basePrice = description.getPrice(); //… } // } 2011-10-13 79 表示依赖 SalesLineItem ... ... ProductDescription ... ... 1..* lineItems Sale ... updatePriceFor( ProductDescription ) ... the Sale has parameter visibility to a ProductDescription, and thus some kind of dependency 2011-10-13 80 表示依赖 System ... runFinalization() ... Foo ... doX() ... the doX method invokes the runFinalization static method, and thus has a dependency on the System class 2011-10-13 81 UML中可选的依赖标签 «call»Window a dependency on calling on operations of the operations of a Clock Clock getTime() ... «create»A a dependency that A objects create B objects B ... 2011-10-13 82 UML中表示接口的不同方法 «interface» Timer getTime() Clock1 ... getTime() ... lollipop notation indicates Clock3 implements and provides the Timer interface to clients Timer is a provided interface Timer Clock3 ... getTime() ... Window2 Window3 dependency line notation Window2 has a dependency on the Timer interface when it collaborates with a Clock2 object socket line notation Window3 has a dependency on the Timer interface when it collaborates with a Clock3 object Window1 Timer socket line notation Window1 uses the Timer interface it has a required interface Clock2 ... getTime() ... Clock1 implements and provides the Timer interface Timer 2011-10-13 83 组合优于聚合 • 聚合是UML中定义的一种模糊的关联,其不精确 地暗示了整体部分关系 – 不要费力地使用聚合,使用组合 • 组合也称组成聚合,是一种很强的整体部分组合 关系,并且在某些模型中具有效用 – 在某一时刻,部分的实例只属于一个组成实例 – 部分必须总是属于组成 – 组成要负责创建和删除其部分,即可以自己来 创建/删除部分,也可以与其他对象协作来创建 /删除部分 2011-10-13 84 UML中的组合 Finger 0..7 Hand composition 1 Square 40 Board 1 SalesLineItem 1..* Sale 1 组合意味着: -在一个时刻,部分实例只能是一个( 组合的一部分 -组合有管理部分的职责,特别是创建 和删除 2011-10-13 85 约束的表示形式 Stack size : Integer { size >= 0 } push( element ) pop() : Object three ways to show UML constraints { post condition: new size = old size + 1 } { post condition: new size = old size – 1 } 2011-10-13 86 UML中的限定关联 Product Catalog Product DescriptionitemID Contains Product Catalog Product Description Contains 1..* multiplicity reduced to 1 (a) (b) qualifier 1 11 •限定关联具有限定符(qualifier),限定符用于从规 模较大的相关对象集合中,依据限定符的键选择一个 或多个对象 2011-10-13 87 UML的关联类 salary startDate Employment EmploysCompany Person** a person may have employment with several companies 关联类允许将关联本身作为类,并且使用属性、 操作和其他特性对其建模 2011-10-13 88 单实例类 1 ServicesFactory instance : ServicesFactory accountingAdapter : IAccountingAdapter inventoryAdapter : IInventoryAdapter taxCalculatorAdapter : ITaxCalculatorAdapter getInstance() : ServicesFactory getAccountingAdapter() : IAccountingAdapter getInventoryAdapter() : IInventoryAdapter getTaxCalculatorAdapter() : ITaxCalculatorAdapter ... UML notation: in a class box, an underlined attribute or method indicates a static (class level) member, rather than an instance member UML notation: this '1' can optionally be used to indicate that only one instance will be created (a singleton) 2011-10-13 89 UML中的模板 «interface» List clear() ... Kparameterized or template interfaces and classes K is a template parameter anonymous class with template binding complete Board squares : List or squares : List ... ArrayList clear() ... the attribute type may be expressed in official UML, with the template binding syntax requiring an arrow or in another language , such as Java ArrayList elements : T[*] ... clear() ... T for example, the elements attribute is an array of type T , parameterized and bound before actual use. there is a chance the UML 2 “arrow” symbol will eventually be replaced with something else e .g., ‘=’ 2011-10-13 90 分栏 DataAccessObject id : Int ... doX() ... exceptions thrown DatabaseException IOException responsibilities serialize and write objects read and deserialize objects ... 2011-10-13 91 UML中的主动类 «interface» Runnable run() Clock ... run() ... active class •主动对象运行于自己控制的执行线程之上 •主动对象的类即为主动类 2011-10-13 92 交互图与类图的关系 : Register : Sale makePayment(cashTendered) makePayment(cashTendered) Register ... makePayment(…) ... Sale ... makePayment(…) ... 1 currentSale messages in interaction diagrams indicate operations in the class diagrams classes identified in the interaction diagrams are declared in the class diagrams

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档