参考答案:
【问题1】(6分) 【问题3】(8分)
分析阶段的类图主要是从业务领域获取信息的,在描述上更多使用了业务领域的语言和词汇。
设计阶段的类图是从编程实现角度来设计类图的,更多的是考虑类编码的实现。
【问题2】(11分)
(1) d)读者证
(2)a)系统管理员 b)图书管理员 c)读者
e)账户 f)图书
j)罚金 I)借阅记录
(3)g)借阅 h)归还 i)预订 k)续借
封装性:
组合:不破坏封装性,整体类与局部类之间松耦合,相对独立。
继承:破坏封装性,子类与父类紧耦合,子类缺独立性。
动态组合:
组合:支持动态组合。
继承:不支持动态组合。
创建对象:
组合:创建整体类时,需要创建所有局部类的对象。
继承:创建子类对象时,不需要创建父类对象。
(1)关联关系。关联提供了不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。
(2)依赖关系。两个类A和B,如果B的变化可能会引起A的变化,则称类A依赖于类B。依赖可以由各种原因引起。
(3)继承关系。本质上就是泛化关系。继承是在某个类的层次关联中不同的类共享属性和方法的一种机制。父类与子类的关系是一般与特殊的关系,一个父类可以有多个子类,这些子类都是父类的特例。
(4)聚合关系。表示类之间的整体与部分的关系,其含义是“部分”可能同时属于多个“整体”,“部分”与“整体”的生命周期可以不相同。
(5)组合关系。表示类之间的整体与部分的关系。其中的“部分”只能属于一个“整体”,“部分”与“整体”的生命周期相同,“部分”随着“整体”的创建而创建,也随着“整体”的消亡而消亡。
详细解析:
常见的类关系包括:
(1)关联关系。关联提供了不同类的对象之间的结构关系,它在一段时间内将多个类的实例连接在一起。关联体现的是对象实例之间的关系,而不表示两个类之间的关系。其余的关系涉及类元自身的描述,而不是它们的实例。
(2)依赖关系。两个类A和B,如果B的变化可能会引起A的变化,则称类A依赖于类B。依赖可以由各种原因引起,例如,一个类向另一个类发送消息、一个类是另一个类的数据成员、一个类是另一个类的某个操作参数等。
(3)泛化关系。泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父类与子类之间的关系。继承关系是泛化关系的反关系,也就是说,子类继承了父类,而父类则是子类的泛化。
(4)继承关系。本质上就是泛化关系。继承是在某个类的层次关联中不同的类共享属性和方法的一种机制。父类与子类的关系是一般与特殊的关系,一个父类可以有多个子类,这些子类都是父类的特例。
(5)聚合关系。表示类之间的整体与部分的关系,其含义是“部分”可能同时属于多个“整体”,“部分”与“整体”的生命周期可以不相同。例如,汽车和车轮就是聚合关系,车子坏了,车轮还可以用;车轮坏了,可以再换一个。
(6)组合关系。表示类之间的整体与部分的关系。与聚合关系的区别在于,组合关系中的“部分”只能属于一个“整体”,“部分”与“整体”的生命周期相同,“部分”随着“整体”的创建而创建,也随着“整体”的消亡而消亡。例如,一个公司包含多个部门,它们之间的关系就是组合关系。公司一旦倒闭,也就无所谓部门了。
(7)实现关系。实现关系将说明和实现联系起来。接口是对行为而非实现的说明,而类中则包含了实现的结构。一个或多个类可以实现一个接口,而每个类分别实现接口中的操作。