gpt4 book ai didi

java - 建模类: hierarchy or attribute?

转载 作者:行者123 更新时间:2023-12-01 11:39:04 27 4
gpt4 key购买 nike

我目前有这两个实体:名义上的和熟悉的(家庭/亲属/亲戚)。

熟悉的 [0..*]<------>[1] 标题

这两个类具有一个人的共同属性(名字,姓氏,出生日期......),并且它们是两种附属

我想将它们统一在一个父类(super class)(泛化)Person中,但我不明白的是我应该使 Titular 和 Familiar 扩展 Person 或添加 Person 作为它们的属性。

人也必须单独存在(不能是抽象的),并且并非所有人都是附属机构但!我还需要一种方法来建立/处理 Titular 和 Familiar 的公共(public)行为。

人物 [1]<------>[0..*] 头衔

人物 [1]<------>[0..*] 熟悉

标题 [1]<------>[0..*] 熟悉

所以疑问是:

public class Titular extend Person
public class Familiar extend Person {

public class Titular implement Affiliate {
private Person person;

public class Familiar implement Affiliate {
private Titular t;
private Person person;

或者(第三个想法)

public class Person {
public abstract class Affiliate {
protected Person person;
public class Titular extends Affiliate {

最佳答案

在我看来,所有成员(member)也是人(或者您有异常(exception)?)!所以正确的层次结构是:

Person --- Affiliate --- Titular 
\- Familiar

现在,至于继承或拥有指针...这称为组合与继承,两者都有很好的论据。选择组合的主要原因是

  1. 可变或可选关系:例如,汽车的所有者可以改变,或者汽车可以没有所有者。猫无法停止成为一种动物并成为其他东西。
  2. 不同的公共(public) API:虽然需要做更多的工作,但组合允许您手动转发您想要从内部指针公开的任何 API,按照您的意愿隐藏或更改“父级”的内容。

一般来说,您会发现当 ClassA IS-A ClassB 时继承更有意义,因此您不会期望这种情况发生变化,也不希望两个类呈现不同的 API。您会随处看到此建议,并且它似乎像手套一样适合您的示例。

关于java - 建模类: hierarchy or attribute?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701529/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com