注意:我无法在代码块中使用格式化来设置斜体和事物,因此有一些临时标记可以尝试传达含义。填充钻石的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设计原则的掌握和掌握仍然不够好。
提前感谢您的帮助!
答案 0 :(得分:0)
Aggregation
可以是三种 - 无,共享或复合。说aggregation
而不是shared
或shared aggregation
是一个错误的错误。唉,从VP-UML工具广泛传播。associations
和generalizations
没有不同的行。因此,几乎不可能理解你的图表。但如果我认为所有箭头都是generalizations
,那就有意义了!但实际上,最好使用一些免费的绘图工具。例如,VP-UMP的社区版本。或者在Eclipse上免费使用Papyrus。shared aggregations
(请允许我正确命名)很奇怪:
none
aggregation
,单面或双面,两端为0..1。etc.
中的内容如果其中有未知的内容,你怎么能确定它应该来自Game类?通常情况下,你还没有形式化的东西,只是在图表之外。答案 1 :(得分:0)
我认为你只在一个图表中混合了逻辑和模型视图。说到核心/业务逻辑术语,您的图表应该只包含实体Store
,VideoGame
...
在更深层,你会建模如何坚持它,你会说数据库,记录......
所以,首先你的商业模式可以像这样简单:
当你有商店的概念,通用的可销售类型和视频游戏时,它是具体的可销售商品。一般来说,编写比继承更好,因此我没有使用NintendoGame,PS2Game ......作为子类型,而是使用console
属性对其进行建模。
然后是你持久化模型(到文件,数据库等)。为此目的,您在应用程序中有一个单独的层。该层将负责将VideoGame
序列化为寄存器,反之亦然。你也可以有另一个类图或只有几个负责IO的类。
ps:我不知道DatabaseNavigator
的目的是什么,所以我在答案中忽略了。