this is a scenario of small office. there is software projects and there is manager. manager is responsible for managing those projects
manager can perform below actions
//createProject()
//deleteProjectById()
//updateProjectById()
//updateManagerInfo()
add qualifications //addQualificationToManager()
assign employees for s project //assignemployees()
//isProjectDeadlinExceed()
i want to model this scenario in uml class diagram below there is manager,project classes with their attributes
manager class attributes
name
genaralInformation
educationalQualifications
salary
project class attributes
projectid
projectname
deadline
budget
assignedEmployeeList
to draw uml class diagram completely i need to place above methods(actions that manager can perform) among the manager class and project class
i,m sure following methods are belongs to manager class because manager can only perform those actions and also those methods not involve changing state of project class attributes.
createProject()
deleteProjectById()
updateProjectById()
updateManagerInfo()
addQualificationToManager()
but i'm not sure where to put below methods?
assignemployees()
isProjectDeadlinExceed()
because above actions can perform manager and also above methods are work on attributes(state) of project class where to put those methods ???
I think you are missing at least one abstraction, that is the set of all projects. Let's call this thing a ProjectPortfolio
. Then I would perhaps go with this design (in java syntax):
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(...);
}
It seems to me you are trying to put methods into the Manager
, because the manager is the one doing them. Usually methods should be on the object that is being acted upon (the "subject" of the action).
So, for example, if you want delete()
a project, that method should be (barring other requirements) on the Project
object.
Therefore when you want to createProject()
, you have to find a suitable "subject" where that operation makes sense.
Think about it this way: You are inside the application, you are surrounded by objects, which are your friends with whom you are trying to make the application work. So you should ask yourself: Who can I ask to help me?. For example for createProject()
can I ask one of my Manager
object friends? No, because those guys just represent some real-world people, they don't know how to create a project. And Project
objects represent a single already created project. Therefore you have to write a new friend called ProjectPortfolio
, who knows about all projects. :)