gpt4 book ai didi

oop - 仅具有两个属性的对象

转载 作者:行者123 更新时间:2023-12-01 05:39:34 24 4
gpt4 key购买 nike

我正在尝试确定解决以下问题的最佳方法:

我有一门课叫做课 table 。一张 table 有很多属性。 table 上可能有一些元素。当前应用程序指定它可以在 table 上放置铅笔、计算机或杯子。将来可能会添加更多对象。它可以有一个或没有每个对象。铅笔具有颜色属性,所有对象都有 ID 和名称。所有这些信息都必须是持久的,因此以某种形式存储在数据库中。

我是否:

public class Desk {
public int property1;
public int property2;
...
public ISet<DeskObject> deskObjects;
}

public DeskObject {
public int deskObjectID;
public String name;

public DeskObject(name) {
this.name = name;
}
}

public Computer extends DeskObject {
DeskObject("Computer");
}
public Pencil extends DeskObject {
DeskObject("Pencil);
public Color color;
}

我还需要在 O(1) 时间内轻松判断 Desk 包含哪些对象。这意味着我将不得不为 DeskObjects 覆盖 hashcode 和 equals(可能只返回 ID),这样我才能执行 set.contains(object)。这似乎是矫枉过正和滥用对象。肯定有更好的解决方案吗?

最佳答案

如果您的领域是关于办公 table 及其包含的对象,那么完全有必要使用这样的对象模型。您需要问自己的唯一问题是:这是我的领域模型,还是计算模型?

从你的问题的措辞,我会推断它宁可后者。您的对象不包含任何行为(例如 Desk.CleanNonRecentlyUsed())。

域模型包含数据和行为(真正的对象模型,我称之为域模型),计算模型是数据和分离的行为(过程代码)。

如果您的模型需要做的只是提供有效的查找,您可以选择任何适合您的抽象表示。只捕获数据的轻量级对象是可以的,但您也可以使用元组(或特定于 .net,因为您提到了 GetHashCode:匿名类)或只是桌面的 Hashtable。您的计算模型可以是数据库中的索引(在您的示例中听起来很合理)、特殊对象模型或普通数组上的专用算法。

大多数情况下,当您已经拥有域模型时,没有必要创建计算模型。但有时确实如此。

关于oop - 仅具有两个属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520300/

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