1、1,第十三章 操作契约,2,重点,掌握操作契约的创建,3,系统行为系统顺序图2. 系统行为契约-均属于用例模型,提纲,4,5,系统行为:在进行系统逻辑设计之前,必须先调查系统的行为,即将系统看作一个黑盒子,描述系统要“做什么”,而不是“怎么做”。 定义系统行为的两种手段:系统顺序图和契约。 系统顺序图:展示了一个特殊的用例场景中外部参与者发起的事件以及事件的顺序。在顺序图中,所有的系统都被当成黑盒子对待,顺序图的重点是参与者发起的跨越系统边界的事件。 建立系统顺序图要依赖于前面已经建立起来的用例描述。,1. 系统行为系统顺序图,在用例说明文档基础上将系统看作黑盒子,整理Actor和系统的交互,
2、系统事件,将促发一个同名的系统操作,1. 系统行为系统顺序图,系统事件和系统操作,系统事件是由参与者生成的外部输入事件系统操作是系统响应系统事件而执行的操作事件激发操作响应 通过系统事件获得所有系统操作,8,如何建立一个系统顺序图 1)将系统表示为一个黑盒子。 2)识别出用例中所有直接对系统进行操作的参与者。 3)根据用例的典型事件发生过程的描述,找出每一个参与者所发起的(外部)事件。将他们标注在图中。 4)用例的描述文档放在顺序图的左边,这是任选部分。,1. 系统行为系统顺序图,9,购买商品的用例描述,10,2、3,4、5,8、9,1. 系统行为系统顺序图,1,11,记录在类System中的
3、所有的系统操作,系统操作,12,2. 系统行为契约,契约是一个文档,描述系统操作对系统状态的影响,属于系统行为建模的一部分。契约强调发生了什么而不是怎么发生。 流程:用例描述系统顺序图系统操作契约,13,每一个系统操作都可以定义一个契约,用于描述这个系统操作的行为,2. 系统行为契约,14,名称:操作和参数的名称 交叉引用:所引用的系统功能号、用例等 前置条件:在操作执行前对系统状态所做的假设 后置条件:操作执行完成后系统的状态,契约段,15,名称:enterItem(itemID:ItemID,quantity:integer)交叉引用: 用例:处理销售前置条件:有一个销售正在进行后置条件:
4、,契约举例 enterItem,16,一个SaleLineItem实例sli被创建 sli与Sale实例间形成关联(形成关联) sli的quantity属性被设置(修改属性) sli与ProductSpecification实例发生关联,这个关联建立在两者的UPC匹配的基础上(形成关联),契约举例 enterItem,17,什么是操作契约,契约是描述系统行为的有用文档 系统操作契约描述执行系统操作时整个系统的 状态改变 契约是描述系统操作答应完成的事情 声明风格,面向状态改变,而非动作 重点在于WHAT will happen,而不是howUML通过定义前置条件和后置条件定义系统合约 针对单个
5、操作,或更广泛的系统操作,18,为什么要创建系统合约,用例是UP中描述系统行为的主要机制,但有 时需要更详细的描述系统顺序图显示了外部参与者生成的系统事件 但缺乏理解系统行为所需要的细节,即系统如何响应 操作合约有助于定义系统行为,19,契约文本描述中强调操作的职责和后置条件 实用的契约后置条件分为以下三类:1、实例的创建和删除。2、属性的修改。3、关联的形成和断开。 后置条件的表达要符合领域模型的语境,通过后置条件能发现领域模型遗漏的概念、属性或关联,从而进行补充。,2. 系统行为契约,20,使用后置条件的优点:是一个很好的用于问题调查的工具,在不需要清楚系统操作如何进行的情况下描述了系统操
6、作的执行所引起的系统状态变化,使能集中精力分析系统发生了什么而不是怎么发生的。 建立后置条件的注意点:1)陈述要采用过去时态的声明语气和被动语态。来强调系统状态所发生的变化。如:a sale is created 比create a sale要好。2)不用忘记在新创建的对象和已经存在的对象间建立关联。如:enterItem操作中,光生成一个saleLineItem还不够,还需要和sale实例建立链接。,2. 系统行为契约,21,后置条件应该详细到什么程度,在分析阶段为系统操作建立完整和精确的后置条件几乎不可能,但是契约确实是分析系统行为的一项强有力工具。 后置条件中的某些内容可能会在设计阶段得
7、到细化和准确化。,22,针对每一个用例,识别出系统操作;针对系统操作,书写契约。重点关注契约的后置条件(实例的创建和删除、属性的修改、关联的创建和断开),如何建立契约,23,如何创建系统操作合约,来源: 前面得到的领域模型 系统顺序图 系统操作 从系统顺序图和用例识别系统操作 为系统操作创建合约(复杂的或在UC中不明确的系统操作) 从编写职责部分开始,非正式地描述操作的目的 最后完成后置条件部分:领域模型中对象状态发生了哪些改变?(实例的创建/销毁,属性的变化,关联的建立和变化),24,2、3,4、5,8、9,1,契约举例 makeNewSale,25,添加属性,26,名称:makeNewSa
8、le()交叉引用: 用例:处理销售前置条件:系统启动后置条件:一个Sale实例s被创建(实例创建)s和register建立关联(关联形成)s的属性被初始化,契约举例 makeNewSale,契约举例 makePayment,28,契约举例 endSale,29,修改领域模型,30,契约部分总结,要创建契约,必须: 从SSD识别系统操作 对于复杂的系统操作构造契约,注意与领域模型一致 重点描述后置条件,使用下面的分类: 实例的创建和删除 属性修改 关联形成和断开注意后置条件的陈述应该是被动语态,强调系统状态的变化,而不是这种变化是如何实现的。,31,分析阶段总结,1、概念模型:将问题空间分解为可
9、以理解的小的单元(概念);帮助澄清、统一问题域中的术语和词汇; 2、系统顺序图:系统事件和操作是什么; 3、契约:系统操作对系统状态的影响(发生了什么而不是怎么发生),针对本开发周期中的用例,创建:,32,用例名:记录预约 参与者:接待员 前置条件:接待员已获得系统授权 后置条件:系统记录预约 主要成功场景: 接待员输入要预约的日期 系统显示该日的预约 有合适的餐桌,接待员输入顾客的姓名和电话号码、预约时间、用餐人数和餐桌号。 系统记录并显示预约,餐馆预约系统,34,餐馆预约系统,35,36,makeNewReservation(),37,音像店例子,Use Case: Rent Videos
10、 Typical Course of Events Actor ActionsSystem Response 顾客带着影碟到达收款处 顾客出示会员卡,店员开始一次出租(用例开始) 店员输入顾客会员信息 系统显示该会员当前状态 店员输入顾客要租的每件影碟信息 系统记录每件信息,显示当前影碟列表,包括到期日期,总价格。 店员要求顾客付款 顾客付款 系统记录顾客付款信息,给出找零,并产生交易报告(包括影碟列表,应归还时间及价格) 顾客离开,38,音像店案例出租影碟SSD,39,练习音像店出租系统,40,Contract Name: confirmMembership (membershipID) R
11、esponsibilities: Confirm that the membership is validthat it exists, and that the membership is not suspended. Present confirmation. Present any overdue rentals and charges owed. Cross References: Use Case: Renting Videos Preconditions:System does not have a rental transaction underway. Postconditio
12、ns: If the membership was valid: A RentalTransaction txn was created and initialized. The Membership (with membershipID) was associated with txn.,41,作业,写出音像店系统的 recordVideoRental(videoID) makePament(amount)两个操作的契约,42,Contract Name: recordVideoRental (videoID) Responsibilities: Record the rental of a
13、 video and add it to ongoing rental transaction. Present the item title,charge, and due date. Cross References: Use Case: Renting Videos Preconditions: videoID is known to system. A RentalTransaction has been created. Postconditions: A VideoRental, vr, was created and initialized. vr was associated with a Video, based on videoID match. vr was associated with the current RentalTransaction.,