【问题标题】:guidance with OO design of my UML diagram我的UML图的OO设计指导
【发布时间】:2014-03-29 13:35:40
【问题描述】:

我能得到一些关于这个 UML 图的反馈吗?这是一个简化图,仅显示了类的布局和互连性,此时故意省略了实例变量、构造函数和方法。

Inventory Project Simplified UML Diagram

我需要指导的主要是面向对象的设计。我是否有正确的类实现接口,或者我应该将接口移动到子类/超类,我是否有正确的关联、组合、聚合关系......那些东西。由于我还是 UML 的新手,我希望我已经使用了正确的约定来按照我想要的方式描述关系。

基本上,我正在做一个 Java 项目,在该项目中我模拟了一个用于商店库存的数据库。该项目的范围只需要几个类,但我正在添加接口和其他 OO 技术以更好地学习面向对象设计,因为这本质上是我的第一个真正的 OO 项目(我已经将一个具体类扩展到另一个具体类到处都是,但到目前为止就是这样)。

几天前我发了一个类似的帖子,但后来添加了一些东西,改变了一些东西等等。另外,我对 OO 设计的掌握仍然太不稳定,我需要进一步的反馈来帮助我获得更好的掌握 - 并更有信心利用 - 面向对象的设计。

RetailProduct,顺便说一句,应该是抽象的;我发现我拍完照片后忽略了斜体。

【问题讨论】:

  • 整体看起来不错。我会说链 InventoryProductRecord 1->1 RetailProduct InventoryRetailProduct 很奇怪。为什么“库存”的东西在两端?如果您为每个类/接口编写职责会更容易理解。

标签: java oop uml composition abstraction


【解决方案1】:

类图看起来正确。我认为,您在 UML 和 OOP 中的命令远非坏事。但是:

  • 这部分软件不会单独存在。它会得到一些用户界面。并且此 UI 将引用产品来显示它。并且这个产品必须有一些参考记录。而且它没有!

  • 只有在从它派生出至少两个不同的具体类时,才具有与抽象 RetailProduct 关联的记录才有意义。因为它是一个过于复杂的结构。加一层楼有什么用?您管理 OOP。但是您使用的 OOP 超出了任务的需要。

【讨论】:

  • 当然也要感谢 Gangnus!您提到有关 UML 的某些术语(例如聚合)的方式使我决定花几个小时阅读和记录关键术语和符号约定,所以我很高兴您偶然发现了我的线程并向我展示了什么我做错了。
  • @Justin 欢迎您。至于关联和它们的形式,看stackoverflow.com/a/21550923/715269,这里你有更短的:-)
【解决方案2】:

看起来不错,但我看不出持久性相关类的意义。你只需要一个PersistenceManager 类,使用saverestore 方法来处理序列化。

如果你想要额外的 OO 点,PersistenceManager 应该是一个接口,然后你会实现FilePersistenceManager。所以很容易实现其他类型的后端,例如DbPersistenceManager...

【讨论】:

  • 非常感谢您的反馈。我一直在强调这一点,因为我基本上不想开始,直到我确信这个设计不是愚蠢的。感谢您花时间在这两个最近的 UML 线程中发帖,即使尝试向某人解释更基本的东西可能会很痛苦。我认为在这两个线程和一些阅读之后,我对这些事情的理解要好得多,所以干杯!
猜你喜欢
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多