项目三:开发团队调度软件
目标
模拟实现一个基于文本界面的《开发团队调度软件》。
需求说明
1 软件功能
- 软件启动时,根据给定的数据创建公司部分成员列表(数组);
- 根据菜单提示,基于现有的公司成员,组建一个开发团队以开发一个新项目;
- 组建过程包括:将成员插入到团队中、从团队中删除某成员、列出团队中现有成员的列表;
- 开发团队成员包括:架构师、设计师和程序员。
2 软件功能演示说明
- 当软件运行时,主界面显示公司成员的列表,如下:
- 当选择
添加团队成员
菜单时,将执行从列表中添加指定(通过ID)成员到开发团队的功能,添加成功后,按回车键将重新显示主界面,被添加进团队的员工状态将变为BUSY
: 开发团队人员组成要求:
- 最多一名架构师;
- 最多两名设计师;
- 最多三名程序员;
- 如果添加操作因某种原因失败,将显示以下类似信息(失败原因视具体原因而不同):
失败信息包含以下几种:
- 成员已满,无法添加;
- 该员工不是开发人员,无法添加;
- 该员工已在本开发团队中;
- 该员工已是某团队成员;
- 该员工正在休假,无法添加;
- 团队中最多只能有一名架构师;
- 团队中最多只能有两名设计师;
- 团队最多只能有三名程序员。
- 当选择
团队列表
时,展示当前团队列表,存在两种情况:1)目前没有成员;2)有成员时,展示的团队成员信息与软件启动时展示的员工列表信息不同: - 当选择
删除团队成员
时,根据团队列表中显示的团队成员的TID
来选择要删除的成员,删除成功的员工在员工列表中的状态也会转变回FREE
:
软件设计分析
对象设计分析
根据软件功能及其演示可分析出:
- 该软件功能针对的是
员工列表
和成员列表
。员工列表
主要是展示作用,成员列表
主要是展示、增、删作用。
由此可分析出,主要的操作对象为员工列表
和成员列表
,因此应该分别具有对应的类。 员工列表
的展示是通过对每个员工的展示实现。成员列表
的展示是通过对每个成员的展示实现,而每个成员来自于每个员工。因此,展示功能实际上是通过对每个员工对应的员工信息或成员信息的展示实现的。成员列表
的增加成员功能是通过指定员工列表
中的员工添加到成员列表
中实现的,因此该功能涉及两个操作:- 从
员工列表
中获取指定员工; - 将指定员工加入到
成员列表
中。
- 从
成员列表
的删除成员功能是通过删除成员列表
中指定的成员实现的。
由此可分析出,各个功能的操作对象是员工对象
,因此应该具有对应的类。
总结下来,该软件操作的类主要是员工列表
和成员列表
,但对这两个对象的操作的实现是通过对员工
对象操作实现的。
方法设计分析
根据上述分析,可分析出员工列表
和成员列表
要实现的方法:
- 员工列表:获取所有员工,对应于展示所有员工信息。
成员列表:获取所有成员,对应于展示所有成员信息。 - 员工列表:获取指定员工,对应于增加成员。
- 成员列表:将指定员工增加到成员列表,对应于增加成员。
- 成员列表:将指定成员从成员列表中删除,对应于删除成员。
进一步,可分析出员工
要实现的方法:
- 展示对应的员工信息,对应于展示员工信息。
- 展示对应的成员信息,对应于展示成员信息。
软件设计结构
该软件由以下三个模块组成:
1 domain模块
由于菜单要显示员工列表,对应的view模块就要通过对对应对象的访问实现,而员工列表
对象中展示所有员工信息功能是通过获取所有员工,分别展示各个员工对象的信息实现。
由于该软件主要功能的具体实现,对应的service模块,也要通过对员工
对象的操作实现。
因此,首先完成该软件对应实体类的定义。
1) Equipment接口及其实现子类的设计
a. Equipment接口 vs Equipment类
- Equipment是
员工
的一个属性,但不同的Equipemnt具有自己的属性。并且在被使用时,只会使用具体的Equipment种类。
换句话说,Equipment本身不被使用,而是使用其实现类或子类。 - 不同的Equipment不一定具有相同的属性,比如下图展示的Printer和其他2类Equipment没有共同的属性。
换句话说,Equipment的属性取决于具体的Equipment。
综上,Equipment设计为接口更合适。
b. 具体设计
2) Employee类及其子类设计
a. 具体设计
b. 状态类 vs 状态接口
- 状态本身不适用,而是使用具体的状态。
- 不同具体状态没有各自的属性和方法,只是都是状态中的一种。
综上,状态接口不合适。
这里将状态类类比为状态枚举类,目前可以理解为具有有限个固定实例的类,后续学习后会更理解。
目前的定义并不完整,之后具体功能实现时再补充。
2 service模块
该软件操作的最小单位是实体对象,但是通过实体对象所在的列表对实体对象进行操作的。
换句话说,对列表对象的操作 = 通过对实体对象的操作实现对其所在的列表操作
简单地说,主要完成:
- 定义对应的实体对象的列表
- 实现对对应列表增、删、查的功能。
具体设计:
员工列表
类的设计:成员列表
类的设计:
3 view模块
view模块的功能可分为:
- 显示主菜单,或者说提供与用户交互的界面;
- 读取用户的操作;
- 处理用户的操作。
具体设计: