【发布时间】:2014-03-27 07:31:54
【问题描述】:
注意:我无法在斜体和其他内容的代码块中进行格式化,因此有一些临时标记来尝试传达含义。填充菱形的 html 转义字符也不起作用。希望它仍然有意义
我的 Java 类中有一个项目,我需要在其中创建一个 GUI 程序,该程序基本上对小型库存数据库进行建模。主要重点是以面向对象的方式创建它。所以基本上在开始之前,我已经绘制了一个简化的 UML,它只指定类、组合和继承,而不定义变量或方法——实现这些将很容易,但我想确保我有一个良好的面向对象设计的可靠层次结构在我开始添加细节之前。
因此,如果您可以花点时间查看我的项目结构,并让我知道是否有任何我应该更改、省略或添加的内容。
该项目基本上将是一个临时的视频游戏商店应用程序,它只是简单地将记录读取和写入文本文件,管理数据库的管理员应该有一个图形界面来导航、添加、删除和编辑记录。我会用一些很棒的功能很好地修饰它,但是现在,我只专注于确保我的结构是好的。
**list of classes**
DatabaseRecord <abstract>
VideoGameDatabaseRecord
DatabaseNavigator
Database <abstract>
VideoGameDatabase
Game <abstract>
VideoGame <abstract> (superclass for platform-specific video games)
XBoxGame
PlaystationGame
NintendoGame
etc for all subclasses that would pertain to the needs of the inventory
我对 UML 建模还有些陌生,所以我希望我已经正确使用了约定,并且在基于文本的 UML 导致无法遵循约定的地方,我希望用“a”和菱形中的“c”表示聚合或组合,大写的“A”表示抽象类(斜体不会在代码降价中显示)
------A----- 0..* ----------A-------- ----A---
| Database | <c>------------- | DatabaseRecord | | Game |
------------ ------------------- --------
^ ^ ^
| | |
| | |
--------------------- 0..* ----------------------------- 1 ------A------
| VideoGameDatabase | <c>------- | VideoGameDataBaseRecord | <a>-------- | VideoGame |
--------------------- ----------------------------- -------------
<a> ^ ^ ^
| | | |
1 | | | |
----------------------- -------------| | |
| DatabaseNavigator | | XBoxGame | | |
----------------------- -------------- | |
-------------| |
| PS2Game | |
-------------- |
|
--------|
| etc. |
---------
再次,我只是在寻找有关我的程序结构的层次结构、OOP 设计、组合等方面的指导。即这应该是抽象的,应该是接口,我应该添加更多/更少的子类级别等。我对可靠地编写代码很有信心,但我对 OOP 设计原则的掌握和掌握仍然不够好。
提前感谢您的帮助!
【问题讨论】:
-
你真的需要抽象类型Game吗?在您的图中,它与其他实体没有关系。 (顺便说一句,如果你附上类图的图像可能会更清楚,那里有免费和好的建模师,比如 Astah)。
-
我同意,但我想我可能会把它留在那里,只是为了将来的可扩展性 - 也许这个库存计划所针对的虚构商店想要扩展 他们的 库存以包括棋盘游戏,它将继承所有游戏将拥有的东西,例如
String title;和float/double price;,它们的访问器和突变器,toString(),也许还有更多。但我完全明白 - 关于这个项目 - 类 Game 除了语义价值之外基本上毫无意义 -
为了可扩展性,您可以使用 Sellable 接口来表示任何可以出售的物品。使用获取标题、价格的方法......但除非你与 VideoGameDataBaseRecord 有关系,否则不会有太大的好处
标签: java oop inheritance uml composition