Fou*_*ali 3 c# uml class-diagram
我正在对一个系统进行逆向工程并创建一个类图。
代码类似于以下示例:
class B
{
}
class C
{
}    
class A
{
    C GetC()
    {
       return new C();
    }
    void Foo()
    {
       B b = new B;
       C c = GetC(); // this function returns a reference to an object of type C
    }
}
我想知道我是否有这段代码,A和B,A和C类之间是什么关系?
假设它是UML类图,那么您就有一个依赖项。来自维基百科(重点是我的):
依赖关系是一种较弱的联系形式,它表示一类依赖于另一类,因为它在某个时间点使用它。如果独立类是依赖类的方法的参数变量或局部变量,则一个类依赖于另一类。这与关联不同,关联是依赖类的属性是独立类的实例,有时两个类之间的关系非常弱。它们根本没有使用成员变量来实现。而是可以将它们实现为成员函数参数。
例如:

在您的情况下,class A 使用 class B和class C。这是一个依赖,这不是组成因为高亮文本的:b和c是(至少在这个例子),那么本地变量之间的关联A,并将它们仅仅是其使用(甚至不弱聚集)。
好吧,老实说-我希望UML纯粹主义者不要怪我太多-我会说使用代替组合,因为(从虚构的示例中猜测)b是完成任务的工具Foo()。如果它被用来(即使局部变量),以使(从外部来看)A一个容器为B然后我说的组合物。例如在这种情况下:
class RocketLauncher {
    public void Launch(World world, Location target) {
        AutonomousObject rocket = world.Rocket.Factory.Build(_structure);
        rocket.MoveTo(world, target);
    }
    private static LauncherStructure _structure;
}
即使严格地说Rocket是使用 RocketLauncher我倾向于同时定义(LauncherStructure和Rocket为)组成。从外部的角度来看,a RocketLauncher是由(构造,具有)结构和火箭组成的(即使当前实现将创建委托到最后)。点(IMO)是您要在此图中表示的内容。如果您要描述实现,那么观点就无关紧要了:依赖关系是依赖关系,组合是组合。
如果您要描述更高级别的体系结构,则应将实现细节保留在图表之外,并尝试描述类接口(当然,当实现与抽象体系结构大不相同时,可能会闻到某种错误-在实现或体系结构方面- 原因 - (如果有的话- 必须记录下来)。