2011-08-26 87 views
0

我目前正在使用书籍和网站自学OOP。我处于需要练习的地步。我开始了一个小型项目,我知道如何以程序化的方式进行。但是当我尝试以面向对象的方式进行操作时,它给我留下了问题。需要帮助定义类职责

我的项目概念是这样的。我想在工作中组织/归档/管理我们系统上的互连。我使用2班。设备和接口。

设备有一些接口。
设备类有以下methodes:

  • 无效addInterface(字符串名称)
  • 无效removeInterface(接口I)
  • 接口getInterface(接口I)#我应该写道:接口getInterface(字符串接口名)
  • 空隙printAllInterface()

接口类具有以下methodes:

  • 空隙connectInterface(接口interfaceToConnectTo)
  • 空隙disconnectInterface(接口interfaceToDisconnectFrom)
  • 空隙printAllConnection()

基本上,我创建两个设备,添加一些接口到每个最终使一些连接在接口之间。

设备知道它的所有接口。一个接口知道它连接到的所有其他接口。

但是,给定一个接口,我怎么知道它属于哪个设备?

如果接口知道设备,它们变得紧密耦合。对于我目前所了解的情况,这不是很好的面向对象。另一种方法是浏览所有设备以了解他们是否具有我正在寻找的界面。看起来效率很低。我相信我错过了一些明显的东西。任何人都可以看到它吗?

由于

更新: 这可以被看作是在MS Visio文件的形状和连接。界面实际上只是一个形状上的连接器。该设备是形状。

回答

1

如果你有,你必须能够确定Device对于给定Interface的要求,这意味着DeviceInterface即使你没有编写它已经紧密耦合。如果将这两个类别分开,则不能再假定所有Interfaces都属于Device

如果所有Interface对象必须属于一个Device的话,那么我看不出有上InterfacesetDevice/getDevice方法的任何问题。是的,它创建了循环依赖,但它看起来是模拟特定域的最佳方式。在我看来,搜索每个Device只是为了查看它是否包含特定的Interface是一个更糟糕的设计决定。

但是,如果Interface存在而不属于Device或者可能属于完全不同的类,那么您需要重新考虑更高级别的体系结构。一些沿线:我该如何重组这些类,所以我不需要从Interface得到Device答案真的取决于你的具体领域,我们不太了解你的问题中的信息。

+0

确实接口必须属于一个设备。这个循环引用让我觉得在我的设计中出现了错误 – Jason

0

对现有接口的一点小评论。恕我直言,接口上的打印方法应该移动到不同的接口,以便设备接口只负责维护它所控制的接口。此外,“接口getInterface(接口pInterface)”方法接收作为输入参数并返回? 至于答案,上面的答案有几个问题提出。如果我理解正确,设备类将在调用addInterface()时创建一个接口;如果用例是给定接口的设备将被返回,接口上的getDevice()就可以了(我不会添加setDevice()方法; Device可以传入接口的构造函数中)如果接口总是属于设备。 编辑:但是,如果您想给您的api用户一个印象,即您的用例要求与接口关联的设备可以在运行时更改,那么setDevice()方法会更可取。

+0

我正在计划在_core_设计正确的时候使用Model/View/Controler模式。他们在那里进行调试。我应该在我原来的帖子中提到它。 – Jason