
4.6 建模实例:创建BBS论坛类图
构建类图模型就是要表达类图及类图间的关系,以便于理解系统的静态逻辑。类图模型的构造是一个迭代的过程,需要反复进行,通过分析用例模型和系统的需求规格说明可以初步构造系统的类图模型,随着系统分析和设计的逐步深入,类图将会越来越完善。
4.6.1 创建实体类
论坛系统可以划分为10个类,它们分别是:管理员、版主、会员用户、普通用户、版块、提出建议、帖子、请求信息、回复信息、新手手册。
1.管理员类
管理员类用于记录管理员的基本信息和登录时间,它是与整个系统相关的核心类。管理员类中可以包含多个属性和操作,如属性包括管理员姓名、账号、操作时间和联系方式等,而操作可以包括添加版块、删除版块、关闭版块、添加会员、删除会员以及提出建议等。如下图所示为管理员类的类图。

2.版主类
版主类用于记录版主的基本信息和与该版主有关的版块,版主在管理版块的同时也会保留会员身份。像管理员类一样,版主类中也可以包含多个属性和操作,如属性包含版主账号、版主姓名和版主级别等,操作则包括设置热门帖子、设置精华帖子等。如下图所示为版主类的类图。

3.会员用户类
会员用户类记录与会员相关的基本信息和操作,该类中可以包含会员名称、账号、等级、发帖数量、回帖数量以及最近登录时间等属性内容,也可以包含发表帖子、回复帖子和浏览帖子等操作。如下图所示为会员用户类的类图。

4.普通用户类
普通用户类即没有注册的用户类,在该类中没有固定的信息,所以也没有明确记录用户信息的属性。但是,如果用户注册成为会员时,则会记录用户申请的会员号,注册成功后能够顺利转为会员。下图所示为普通用户类的类图。

5.版块类
版块类记录了与版块相关的基本信息和操作,还记录了当前版块是否能够关闭,如果关闭了,则不能发表帖子。另外,在版块相关操作中还会显示版块详细信息。例如,单击某个版块的链接时,会自动调用操作内容显示版块详情。下图所示为版块类的类图。

6.提出建议类
提出建议类记录了会员用户和普通用户提出建议的基本信息,如用户提出时间、提出建议的用户账号、提出建议属性和建议ID等内容。下图所示为提出建议类的类图。

在上图中,单击某个版块链接显示详细内容时调用相应的操作,单击某个版块后管理员可以根据自己的需要调用设置需要关闭版块的标记操作,当设置或取消某个版块标记后,会自动调用该操作更新关闭版块列表。
7.帖子类
帖子类包含多个属性与操作,如帖子属性中包含帖子ID、帖子单击次数和帖子作者账号等;帖子操作中可以包含查看帖子详细信息和查看帖子列表等。下图所示为帖子类的类图。

8.请求信息类
请求信息类包含属性和操作两部分,属性部分记录了请求信息类型,用户可以根据请求类型的选择来调用相应的操作,调用操作完成后则自动调用设置请求标记。请求信息类的类图如下图所示。

9.回复信息类
回复信息类是与请求信息类相反的一个过程。该类会根据回复类型来选择调用哪个操作,调用完毕后会自动设置回复标记记录结果。下图所示为回复信息类的类图。

10.新手手册类
论坛系统中新手手册只有一份,因此该类中只需要记录形成时间和更新时间即可,不需要再记录其他的详细信息。与该类相关的类图不再具体显示。
4.6.2 创建类与类之间的关系图
类与类之间可以存在多种关系,如泛化、依赖、组合和聚合等。前面已经介绍过与论坛系统相关的10个类,下图所示为这些类之间的关系图。由于之前已经列出了大多数类的属性和操作,所以该关系图中不再显示相关属性和操作,而直接使用相关的类。

从上图中可以看到,管理员类与建议类存在一对多的关联关系、管理员类与版块类存在一对多的关联关系、版块类与帖子类是组合关系以及建议类与版块类是组合关系等。下面只挑选几种常见的类关系进行介绍。
□ 管理员类对版主类 一对多的关联关系,管理员可以管理多个版主,而系统管理员只能有一个。
□ 管理员类对回复信息类 一对多的关联关系,管理员可以接收多个用户的请求信息,并对这些信息进行回复。
□ 帖子类对版块类 组合关系,帖子是构成版块的重要部分,它对版块来说是必不可少的。
□ 建议类对版块类 组合关系,管理员可以向会员和版主提出建议,而版块内需要有接收建议的地方,可以说建议是版块的一部分。
□ 回复信息类对请求信息类 依赖关系,回复信息类依赖于请求信息类,请求信息类发生变化则回复信息类也发生变化。
□ 请求信息类对版主类 依赖关系,请求信息类的操作依赖于版主类的对象,如果对象发生变化,则请求信息类也发生变化,因此请求信息类依赖于版主类。
□ 请求信息类对会员类 依赖关系,请求信息类的操作也依赖于会员类的对象,如果会员类对象发生变化,则请求信息类也发生变化,因此请求信息类依赖于会员类。
□ 版主类对会员类 泛化关系。
□ 会员类对普通用户类 泛化关系。