我遇到了一个与我目前正在进行的项目类似的情况。我尝试用一些一般的上下文模拟相同的东西。请遵循以下代码:
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());
}
}
我试图找出两个班级之间的关系。它不是继承,因为外部类的私有方法可以在内部类中访问。它略微看起来是关联关系,因为内部类的对象保持在外部类中。
答案 0 :(得分:3)
根据UML规范的11.4.3.1
Class充当其范围内定义的各种分类器的命名空间,包括Classes。嵌套分类器是包含类的命名空间的成员。使用分类器嵌套是出于信息隐藏的原因。
所以在你的情况下,眼睛和耳朵嵌套在人类身上。遗憾的是,规范没有为类提供嵌套操作符。您可以将它们呈现在额外的隔离专区中(UML为您可以在除4强制之外的隔离专区中提供的内容留下很大的灵活性),例如建议用于组件的嵌套类(参见11.6.5,尤其是图11.45)。你最终还可以考虑一个特定于包的符号,这是一个在嵌套包中带圆圈加号的行(在你的情况下是人的一面)。这在12.2.5中给出,尤其是图12.5。但请注意,正式的第二种表示法仅适用于包,而不适用于类。