我有两个类Person和Company,其中的关联指定如下:
(1)为公司工作的人
(2)人(老板)通过评级管理人(工人)。
此图片中提供了详细信息:
如果是第一次关联,我就这样做了:
class Person {
Company co;
String name, ssn, addr;
}
class Company {
String name, addr;
}
class WorksFor {
Person person;
Company com;
int sal;
String title;
}
这是正确的实施吗?我也对第二次关联感到困惑。请帮助我提出宝贵的建议。
答案 0 :(得分:2)
通常,模型中的类(与数据相关联的类)与现实世界的对象相关。并且通常的做法是使用名词调用类,因此我将WorksFor
更改为其他内容。
class Person {
String name, ssn, addr;
Job job;
Person boss;
}
class Company {
String name, addr;
}
class Job {
Company co;
int salary;
String title;
}
上面代码的问题是评级和获得老板的工作人员 - 它可以通过多种方式解决。假设每个老板也是一个工人,你可以扩展Person
类:
class Boss extends Person {
List<Person> workers;
}
另一种可能性是保留Person
的工人列表 - 如果一个人不是老板,列表将为空/ null。
绩效管理的一些想法在KonradOliwer answer中给出,我不打算复制它。
答案 1 :(得分:1)
不是。
你应该知道,如果类与某些东西有关联,那么它就像属性具有给定基数的类型。
所以例如Person会给出字段(省略关联类):
String name[1]
String ssn[1]
String addr[1]
Company company[1]
Person boss[0..*]
Person worker[1..*]
然后如何将这些更改为java:
String name;
String ssn;
String addr;
Company company;
List<Person> bosses;
List<Person> worker;
但请记住,如果需要给定类型的数量,则应在构造函数中传递这些元素。 值得一提的是:如果省略UML值则意味着[1]。 所以我们需要有一个以worker为参数的构造函数。
通过关联类,事情变得更加复杂: 你应该创建类似
的类class Performance {
Person boss;
Person worker;
int performanceRating;
public Performance(Person boss, Person worker, int performanceRating){
this.boss = boss;
this.worker = worker;
this.performanceRating = performanceRating;
}
}
亲自将这些人员列表更改为绩效列表。
它仍然是无效的UML图表,因此我不能完全确定我的答案是否有帮助。
答案 2 :(得分:1)
可以这样做:
class Person {
EmploymentRelationship employmentRelationship;
List<ManagementRelationship> workerManagementRelationships;
ManagementRelationship bossManagementRelationship;
String name, ssn, addr;
}
class Company {
String name, addr;
}
class EmploymentRelationship {
Person person;
Company com;
int sal;
String title;
}
class ManagementRelationship {
int performanceRating;
Person boss;
Person worker;
}