需要对UML项目结构概述进行批评

时间:2014-02-25 08:05:06

标签: java oop inheritance uml composition

注意:我无法在代码块中使用格式化来设置斜体和事物,因此有一些临时标记可以尝试传达含义。填充钻石的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设计原则的掌握和掌握仍然不够好。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

  • “我会用一些很棒的功能很好地修饰它,但就目前来说,我只专注于确保我的结构很好。”这意味着,你应该确保它可以很容易地完成你的功能。 : - )
  • Aggregation可以是三种 - 无,共享或复合。说aggregation而不是sharedshared aggregation是一个错误的错误。唉,从VP-UML工具广泛传播。
  • 对于摘要,通常使用斜体来表示姓名。
  • 这是一个更严重的问题:associationsgeneralizations没有不同的行。因此,几乎不可能理解你的图表。但如果我认为所有箭头都是generalizations,那就有意义了!但实际上,最好使用一些免费的绘图工具。例如,VP-UMP的社区版本。或者在Eclipse上免费使用Papyrus。
  • 你的shared aggregations(请允许我正确命名)很奇怪:
    • 左边的一个根本不可理解 - 在一端写一个钻石,在另一个IS上允许一个多重性(共享聚合在UML标准中没有严格定义),但是应该解释这种不寻常的用法。如果您的数据库导航器适用于许多数据库,则钻石应该正常运行。
    • 正确的是以通常的方式编写,但我无法理解它下面的意义 - 一个VideoGameDataBaseRecord有多个游戏怎么样?我没有抓住逻辑。你可以修理它还是解释一下?我认为,应该是正常关联,none aggregation,单面或双面,两端为0..1。
  • 我非常抱歉,但我不明白etc.中的内容如果其中有未知的内容,你怎么能确定它应该来自Game类?通常情况下,你还没有形式化的东西,只是在图表之外。

答案 1 :(得分:0)

我认为你只在一个图表中混合了逻辑和模型视图。说到核心/业务逻辑术语,您的图表应该只包含实体StoreVideoGame ... 在更深层,你会建模如何坚持它,你会说数据库,记录......

所以,首先你的商业模式可以像这样简单: Logic class diagram

当你有商店的概念,通用的可销售类型和视频游戏时,它是具体的可销售商品。一般来说,编写比继承更好,因此我没有使用NintendoGame,PS2Game ......作为子类型,而是使用console属性对其进行建模。

然后是你持久化模型(到文件,数据库等)。为此目的,您在应用程序中有一个单独的层。该层将负责将VideoGame序列化为寄存器,反之亦然。你也可以有另一个类图或只有几个负责IO的类。

ps:我不知道DatabaseNavigator的目的是什么,所以我在答案中忽略了。