【发布时间】:2015-03-07 12:35:27
【问题描述】:
我正在尝试编写一些确定性有限自动机相关的算法。所以显而易见的开始是定义实体:DFA、State 和 Edges。但是,我虽然因为DFA 是一种图,所以我应该有基本类Graph、Node 和Edge,每个实现IGraph、INode 和IEdge。然后让DFA 和State 扩展Graph 和Node。
所以Graph 的精简代码是:
class Graph
{
//...
public void addNode(INode node)
{
//...
}
//...
}
现在State 和Node 之间的主要区别在于State 将属性isFinalState 和isStartingState 添加到Node。所以我希望通过Graph 的addNode() 方法将State 对象添加到DFA 而不是Node 对象。
我想我可以在DFA 中覆盖并创建此方法private,并定义了一个新方法addState(),它将接受State 对象。但是在 Java 中不允许降低派生类中父类成员的可见性。
那么在这种情况下遵循的标准解决方案/方法是什么。还是我认为这一切都错了?
【问题讨论】:
-
“我认为我可以在 DFA 中覆盖并将此方法设为私有”。在 Java 中,访问级别不能比被覆盖方法的访问级别更严格。这意味着您不能覆盖公共方法并将其访问说明符更改为私有。
-
是的,我知道,关键是我应该如何应对这种情况。我希望我的要求是真实的,并且不会弄乱 OO 基础知识。
-
由于您的问题不清楚,目前对任何事情发表评论都有些困难。将您计划创建的每个类的骨架以及您计划添加到它们的一些基本方法放入问题中以使其更清晰。
-
我不认为你想错了,但我可能不会建模
State,除非它的存在是解决问题的基础。在某些时候,我们用不必要的专业化来分裂青蛙的毛发并且完成的很少。我会把isStartingState和isFinalState放在Node上,然后称之为美好的一天。
标签: java oop design-patterns architecture