在绘制 UML class 图时将行为放在正确的 class 中

put behaviours in correct class when drawing the UML class diagram

这是小型办公室的场景。 有软件项目,有经理。 经理负责管理这些项目

经理可以执行以下操作

我想在 uml class 图中对这个场景建模 下面是经理,项目 classes 及其属性

管理员class属性

name
genaralInformation
educationalQualifications
salary

项目class属性

projectid
projectname
deadline
budget
assignedEmployeeList



要完整地绘制 uml class 图,我需要将上述方法(经理可以执行的操作)放在经理 class 和项目 class

之间

我确定以下方法属于经理 class 因为经理只能执行那些操作,而且那些方法不涉及更改项目 class 属性的状态。

createProject()
deleteProjectById()
updateProjectById()
updateManagerInfo()
addQualificationToManager()

但我不确定将下面的方法放在哪里?

assignemployees()
isProjectDeadlinExceed()

因为以上操作可以执行管理器,而且以上方法适用于项目的属性(状态)class 这些方法放在哪里???

我认为您至少缺少一个抽象,即所有项目的集合。我们称这个东西为 ProjectPortfolio。那么我可能会采用这种设计(在 java 语法中):

public interface ProjectPortfolio {
    Project createProject(...);
    Project findById(...);
}

public interface Project {
    void delete();
    void update(...);
    void assignEmployees(...);
    boolean isDeadlineExceeded();
}

public interface Manager {
    void updateInfo(...);
    void addQualification(...);
}

在我看来,您正试图将方法放入 Manager,因为经理就是执行这些方法的人。通常方法应该在被操作的对象上(操作的"subject")。

因此,例如,如果您想要 delete() 一个项目,该方法应该(除非有其他要求)在 Project 对象上。

因此,当您想要 createProject() 时,您必须找到一个合适的 "subject" 那个操作有意义。

这样想:您在应用程序内部,周围环绕着对象,这些对象是您的朋友,您正试图与他们一起使应用程序正常工作。所以你应该问问自己:我可以请谁帮助我?。例如 createProject() 我可以问我的一个 Manager 对象朋友吗? 没有,因为那些人​​只是代表一些现实世界的人,他们不知道如何创建项目。 Project 个对象代表一个已经创建的项目。因此你必须写一个新朋友叫ProjectPortfolio,他知道所有的项目。 :)

用例图从用户目标的角度显示您的场景,帮助您设计 class 系统。这并不意味着每个用例都必须映射为完成操作的参与者的方法(甚至,参与者不值得 class!)。
在我看来,在您的场景中,经理调用项目 class 中的方法来满足他的功能要求。参考以下class图

可以看到功能需求已经满足。例如,在这个 class 系统中,要将员工添加到项目,经理只需调用 Project 中的方法,选择他拥有的项目列表。