徐迎晓 xuyingxiao@126.com 复旦大学软件学院 用例模型--用操作合约添加细节 徐迎晓 xuyingxiao@126.com 复旦大学软件学院
用例模型--用操作合约添加细节 什么是系统操作 什么是系统操作合约 为何要创建系统操作合约 如何创建系统操作合约 好处 总结
什么是系统操作 UML中,整个系统可以表示成一个类 系统行为描述系统做什么,而不解释其如何做--黑箱 系统操作处理系统事件 系统操作是处理输入的系统事件的公共接口—下图
把系统看作单个构件或类,所有用例得到的整个系统操作集合定义了系统的公共接口。
用例模型--用操作合约添加细节 什么是系统操作 什么是系统操作合约 为何要创建系统操作合约 如何创建系统操作合约 好处 总结
什么是操作合约 合约是描述系统行为的有用文档 系统操作合约描述执行系统操作时整个系统的状态改变 合约是描述系统操作答应完成的事情 声明风格,面向状态改变,而非动作 重点在于WHAT will happen,而不是how UML通过定义前置条件和后置条件定义系统合约 针对单个操作,或更广泛的系统操作
用例Process Sale的操作合约
用例模型--用操作合约添加细节 什么是系统操作 什么是系统操作合约 为何要创建系统操作合约 如何创建系统操作合约 好处 总结
为什么要创建系统合约 用例是UP中描述系统行为的主要机制,但有时需要更详细的描述 系统顺序图显示了外部参与者生成的系统事件 但缺乏理解系统行为所需要的细节,即系统如何响应 操作合约有助于定义系统行为
用例模型--用操作合约添加细节 什么是系统操作 什么是系统操作合约 为何要创建系统操作合约 如何创建系统操作合约 好处 总结
如何创建系统操作合约 来源: 从系统顺序图和用例识别系统操作 为系统操作创建合约(复杂的或在UC中不明确的系统操作) 前面得到的领域模型 系统顺序图 系统操作 从系统顺序图和用例识别系统操作 为系统操作创建合约(复杂的或在UC中不明确的系统操作) 从编写职责部分开始,非正式地描述操作的目的 最后完成后置条件部分:领域模型中对象状态发生了哪些改变?(实例的创建/销毁,属性的变化,关联的建立和变化)
描述状态而非功能 用过去式,以强调对过去状态改变的声明 SaleLineItem被创建 创建SaleLineItem ? 2009.10.10
Contract CO1: makeNewSale Operation:makeNewSale() Cross References:Use Cases: Process Sale Preconditions:none Postconditions: - A Sale instance s was created (instance creation). - s was associated with a Register (association formed). - Attributes of s were initialized.
enterItem UC 3. Cashier enters item identifier. 后面:选择控制器,显示Item Description和Price, 创建SalesLineItem,查找ProductSpecification, 从数据库获取ProductSpecification,多对象 UC 3. Cashier enters item identifier. 4. System records sale line item and presents item description, price, and running total.
endSale Contract CO3: endSale Operation: endSale() Cross References: Use Cases: Process Sale Preconditions:There is a sale underway. Postconditions: - Sale.isComplete became true (attribute modification).
makePayment 后面:选择控制器,创建Payment,记录已完成的Sale,计算余额 2004.12.5 8. System logs completed sale and sends sale and payment information to the external Accounting system and Inventory system
用例模型--用操作合约添加细节 什么是系统操作 什么是系统操作合约 为何要创建系统操作合约 如何创建系统操作合约 好处 总结
系统合约好处 在考虑操作合约时可增强领域模型(如发现需要新的概念类、属性、关联) 合约是需求分析的杰出工具 关注应该发生什么(系统操作要求系统状态发生什么样的变化),而不是描述如何完成 软件的设计和解决方案可以延期进行 用例中也可描述,但常不希望这样,因为会使用例太冗长和太详细
用例模型--用操作合约添加细节 什么是系统操作 什么是系统操作合约 为何要创建系统操作合约 如何创建系统操作合约 好处 总结
总结 操作合约用领域对象的状态改变来描述系统操作执行的结果 系统作为黑箱,合约定义系统操作----处理输入的系统事件的公共接口 系统操作可通过系统事件识别
从系统到细化的类都有操作 操作合约也有各种级别 系统级操作合约是用例模型的一部分(UP原始文档没有正式突出)
各个阶段 初始阶段:太细节化了,不用 细化阶段: 只对最复杂的或微妙的系统操作 若使用合约,主要在这个阶段、大多数用例完成时编写 此次迭代至操作合约,只需要几小时、几天,但前期还有大量其他工作,可能总共要几周 概念验证编程 proof-of-concept programming, finding resources (people, software, …), planning, setting up the environment, and so on When one is comfortable with the skills of use case writing, domain modeling, and so forth, the duration to do all the actual modeling that has been explored so far is realistically just a few hours or days.