内在的外在关系

时间:2016-10-26 13:41:42

标签: java uml relationship inner-classes class-diagram

我遇到了一个与我目前正在进行的项目类似的情况。我尝试用一​​些一般的上下文模拟相同的东西。请遵循以下代码:

interface Receptor
{
    public void recept();  
}

class Human
{
    private void bloodCirculate(String receptor)
    {
        System.out.println("Blood flows in " + receptor);
    }

    public class Eye implements Receptor
    {    
        @Override
        public void recept()
        {
            bloodCirculate("eye");
            System.out.println("Look");      
        }
    }

    private class Ear implements Receptor
    {    
        @Override
        public void recept()
        {
            bloodCirculate("ear");
            System.out.println("Listen");      
        }
    }

    private void recept(Receptor receptor)
    {
        receptor.recept();    
    }

    public void look()
    {
        recept(new Eye());
    }

    public void listen()
    {
        recept(new Ear());
    }
}

我试图找出两个班级之间的关系。它不是继承,因为外部类的私有方法可以在内部类中访问。它略微看起来是关联关系,因为内部类的对象保持在外部类中。

1 个答案:

答案 0 :(得分:3)

根据UML规范的11.4.3.1

  

Class充当其范围内定义的各种分类器的命名空间,包括Classes。嵌套分类器是包含类的命名空间的成员。使用分类器嵌套是出于信息隐藏的原因。

所以在你的情况下,眼睛和耳朵嵌套在人类身上。遗憾的是,规范没有为类提供嵌套操作符。您可以将它们呈现在额外的隔离专区中(UML为您可以在除4强制之外的隔离专区中提供的内容留下很大的灵活性),例如建议用于组件的嵌套类(参见11.6.5,尤其是图11.45)。你最终还可以考虑一个特定于包的符号,这是一个在嵌套包中带圆圈加号的行(在你的情况下是人的一面)。这在12.2.5中给出,尤其是图12.5。但请注意,正式的第二种表示法仅适用于包,而不适用于类。