【问题标题】:How simple is too simple for a (nested) class?对于(嵌套)类来说,简单到什么程度太简单了?
【发布时间】:2015-03-14 15:32:42
【问题描述】:

我是 OOP 的新手,但我仍在努力思考应该如何封装事物。 这个问题是关于最佳实践,而不是关于如何实现功能

对于一项作业,我们被要求制作其节点包含两个字符串的链表:传播疾病的人的姓名和被感染的人的姓名。每个感染病例只是有关谁的记录,感染实际上并没有任何事情。

赋值描述建议我们将两个名称作为字段添加到链表的节点中。但是我刚刚起步的 OOP 雷达正在流行,我不确定是否应该在节点内创建一个嵌套的 Infection 类,或者创建一个它自己的顶级类来存储两个字符串。

所以我的内部冲突(和问题)是:一个对象在什么时候变得太简单以至于不再值得成为一个对象,同时仍然保持在 OOP 范式内?我应该创建一个 Infection 类,还是向节点添加数据以保持简单?

【问题讨论】:

  • 在这种情况下,LinkedList 不应该关心它拥有什么类型 - 它应该是 generic。节点应该有一些通用类型,并保存该类型的对象。然后,您的两个属性自然而然地落入一个对象中,该对象可以包含在您闪亮的新通用 List 中。
  • 一个真实的、通用的、可重用的链表实际上不应该暴露它的内部(Node 类),并且应该接受任何类型的对象。这就是标准 java.util.LinkedList 所做的。良好的 OOP 实践建议不要创建自己的链表,而是重用已经存在并经过反复测试的链表。但这是一个任务,其中链表不应该是可重用的,所以它并不重要。我仍然会将节点引用的数据与节点的内部(即下一个和上一个引用)分开,从而引入一个 Infection 类。
  • 我不会担心对象的复杂性。我的意思是一个对象可以像整个类一样复杂,也可以像持有 2 个字符串一样简单。只要它符合它的目的......
  • 感谢大家的帮助。看来我需要学一点泛型了!

标签: java oop conventions


【解决方案1】:

我会以与 Collections API 相同的方式处理它:创建可以容纳任何类型对象的通用数据结构,并让对象定义其内部结构/功能。

类型可以被泛化,这将是最佳实践。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 2012-01-01
    • 2015-03-28
    相关资源
    最近更新 更多