
习题
一、基本概念题
1.简述什么是统一建模语言,有哪些特点和用途?
2.简述UML视图概念,使用视图的目的是什么,UML定义了哪些基本视图,它们的含义是什么?
3.简述UML模型的平台独立性问题。
4.简述UML中表示关系的模型元素有哪些,总结一下这些元素们所表示的含义。
5.简述UML定义的九种基本图的概念和构成元素。
6.简述UML用例视图的概念和各种视图之间的关系。
7.什么是UML的用例视图,它包含了哪些图,建模用例模型的目的是什么?
8.什么是UML的逻辑视图,它包含了哪些图,建模逻辑模型的目的是什么?
9.什么是UML的动态视图,它包含了哪些图,建模动态模型的目的是什么?
10.什么是UML的构件视图,它包含了哪些图,建模构件模型的目的是什么?
11.什么是UML的部署视图,它包含了哪些图,建模部署模型的目的是什么?
12.简述什么是对象约束语言,有哪些特点和用途?
13.简述OCL表达式的概念,OCL表达式的主要作用有哪些?
14.简述不变量的概念,不变量有哪些作用?
15.建模时,是否必须使用OCL,使用的OCL好处有哪些?
二、应用题
1.图2-31给出了一个图书管理系统中的类图,图中的关联表示了读者(Reader)和图书(Book)之间的借阅关系。请根据类图的内容编写OCL表达式描述下列各规则。
1)每个人可以借阅的图书个数不能超过10本。
2)读者的Sex属性的取值只能是“男”或“女”,不允许用其他任何值表示。
3)读者的CountOfBooks属性应等于与读者相关联Book对象的数量相等。
4)读者的CountOfBorrowedBooks方法应返回与读者相关联Book对象的数量。
5)读者的CountOfBooksCanBorrowed方法应返回允许借阅数量与读者实际借阅数量的差。
6)Book类的bookstatus属性只允许取值为ready和lendout两个枚举值。
7)Book类的Borrow方法的前置条件为:Book对象的状态为ready,后置条件为Book对象的状态为lendout。
8)Book类的Return方法的前置条件为:Book对象的状态为lendout,后置条件为Book对象的状态为ready。

图2-31 读者与图书类
2.图2-32给出了一个销售系统中的类图,图中的关联表示了顾客和订单等关系。请根据类图的内容编写OCL表达式描述下列各规则。

图2-32 销售系统类图
1)OrderItem类中的amount属性应等于number和price属性的乘积。
2)OrderItem类中的fee属性应等于amount属性的3%。
3)Order类中的fee属性的值应等于所有与之关联的OrderItem实例的fee属性值的总和。
4)Order类中的total属性的值应等于所有与之关联的OrderItem实例的amount属性值的总和。
5)若需要在Order类中添加一个方法TotalAmount():double,以计算该订单的total属性。请定义该方法应该满足的后置条件,并思考若想实现这个方法,是否需要在OrderItem类中添加点什么?
6)若需要在Order类中添加一个方法Totalfee():double,用来以计算并返回该订单的fee属性值。请定义该方法应该满足的后置条件。与上一小题一样,是否需要在OrderItem类中添加点什么?如何添加?
7)若需要在Customer类中添加一个方法GetTotalAmount(year:int,month:int):double,以计算该顾客指定月份的订单总额。那么应该如何处理这样的需求,即是否需要在Order类和OrderItem类中添加必要的方法,请仔细处理解决方案。并为添加的方法定义应该满足的后置条件。
8)与上一个问题类似,若需要在Customer类中添加一个方法GetTotalfee(year:int,month:int):double,请给出解决方案。