【发布时间】:2015-03-14 15:32:42
【问题描述】:
我是 OOP 的新手,但我仍在努力思考应该如何封装事物。 这个问题是关于最佳实践,而不是关于如何实现功能。
对于一项作业,我们被要求制作其节点包含两个字符串的链表:传播疾病的人的姓名和被感染的人的姓名。每个感染病例只是有关谁的记录,感染实际上并没有做任何事情。
赋值描述建议我们将两个名称作为字段添加到链表的节点中。但是我刚刚起步的 OOP 雷达正在流行,我不确定是否应该在节点内创建一个嵌套的 Infection 类,或者创建一个它自己的顶级类来存储两个字符串。
所以我的内部冲突(和问题)是:一个对象在什么时候变得太简单以至于不再值得成为一个对象,同时仍然保持在 OOP 范式内?我应该创建一个 Infection 类,还是向节点添加数据以保持简单?
【问题讨论】:
-
在这种情况下,
LinkedList不应该关心它拥有什么类型 - 它应该是 generic。节点应该有一些通用类型,并保存该类型的对象。然后,您的两个属性自然而然地落入一个对象中,该对象可以包含在您闪亮的新通用List中。 -
一个真实的、通用的、可重用的链表实际上不应该暴露它的内部(Node 类),并且应该接受任何类型的对象。这就是标准 java.util.LinkedList 所做的。良好的 OOP 实践建议不要创建自己的链表,而是重用已经存在并经过反复测试的链表。但这是一个任务,其中链表不应该是可重用的,所以它并不重要。我仍然会将节点引用的数据与节点的内部(即下一个和上一个引用)分开,从而引入一个 Infection 类。
-
我不会担心对象的复杂性。我的意思是一个对象可以像整个类一样复杂,也可以像持有 2 个字符串一样简单。只要它符合它的目的......
-
感谢大家的帮助。看来我需要学一点泛型了!
标签: java oop conventions