代码之家  ›  专栏  ›  技术社区  ›  ubiquibacon

如何在UML中正确地说明类与封闭类之间的关系?

uml
  •  1
  • ubiquibacon  · 技术社区  · 14 年前

    我有一个 Game 类中存在一个 KeyInputHandler 班级。我相信这是一段“有”的关系,但我不是100%确定。如果这确实是一种“有”的关系,那就是构图,我知道要使用什么符号,但是如果它是其他东西,那么我可以使用一些建议。

    编辑:

    这是我所关心的两个类的结构。

    //Import stuff
    
    public class Game extends Canvas { //The Game class
    
        public Game (){ //Game constructor
    
        }
    
        //Other methods and stuff will go here
    
        private class KeyInputHandler extends KeyAdapter {
            //This is the only other class in my Game, and
            //you can see it is enclosed in the Game class
        }
    
        public static void main(String[] args) {
            Game game = new Game(); // Creates a new game
        }
    
    }
    
    4 回复  |  直到 11 年前
        1
  •  -1
  •   sfinnie    14 年前

    从你的描述来看,它看起来像一个构图关系。

    • 基数为1:1(退化情况为1:many)
    • 组合类(keyputhandler)的生命周期由组合类(game)控制。

    假设这些是正确的,那么组成是适当的。

    一个值得问的相关问题是你如何描述他们之间的关系。keyputhandler在游戏中扮演什么角色?这将帮助读者理解关系的“为什么”,而不仅仅是“什么”。

        2
  •  0
  •   Volker Stolz    14 年前

    这个 Game 这里的类就像顶级容器,非常像一个包。我猜 KeyInputHandler 不是静态类,直接调用“back”到 游戏 ?

    在这种情况下,要么直接有一个类型为的字段 键盘手 或者将实例传递给类似SWT的环境,该环境将回调实例。

    因此,正如@sfinnie所建议的,与包含类型复合的关联是合适的。然而,在我看来还有另一种可能的观点:你也可以从组成部分的角度来看待它。从这个角度来看, 游戏 类成为需要输入环境(SWT、键盘等)的组件。所以在这个更结构化的视图中,您将 游戏 , 键盘手 ,例如SWT。

    通常在软件工程的组件世界中,这些都是那些具有稳定的1:1关系的东西(稳定的意思是你将在一生中与同一个对象交谈)。

    也许你可以详细说明有多紧 键盘手 游戏 是耦合的,也就是说,将一个单独的类放在 游戏 . 这样,你也可以深入了解它们之间的关系(但要记住:“你不需要它”,所以如果你的设计工作得很好,那就保留它——我们只讨论概念层面。

        3
  •  0
  •   UML GURU    14 年前

    我在我的UML工具中颠倒了Java代码,得到了以下结果。 希望能帮上忙!!

    alt text http://www.forum-omondo.com/inner_class_description.png

        4
  •  0
  •   Andrea Sindico    11 年前

    UML规范2.5b1(最新)可在 http://www.omg.org/spec/UML/2.5/Beta1/ 说: 类充当其范围内定义的各种分类器(包括类)的命名空间。嵌套分类器是包含类的命名空间的成员。分类器嵌套用于隐藏信息。嵌套分类器与包含类中的任何其他分类器一样使用。 用于列出类中包含的类的类元类的属性称为NestingClass,如图11.15 pag所示的元模型所示。二百零二

    请注意(非常小心地)两个类之间的包含关联涉及到它们的实例,而不是类。