c# - 如果在方法中初始化或引用对象,类图中的关系类型是什么?

标签 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 类图,那么您有一个依赖性。来自 Wikipedia (重点是我的):

Dependency is a weaker form of bond which indicates that one class depends on another because it uses it at some point in time. One class depends on another if the independent class is a parameter variable or local variable of a method of the dependent class. This is different from an association, where an attribute of the dependent class is an instance of the independent class.Sometimes the relationship between two classes is very weak. They are not implemented with member variables at all. Rather they might be implemented as member function arguments.

例如:

UML example

在您的案例中,类 A 使用B 和类 C。这是一个依赖关系,而不是 composition因为突出显示的文本:bc 是(至少在那个例子中)局部变量然后 A 和它们之间的关联仅仅是它们的用法(甚至不是弱 aggregation )。

好吧,老实说 - 我希望 UML 纯粹主义者不会责怪我太多 - 我会说 use 而不是 composition 因为(从虚构的代码示例中猜测) b 是完成Foo() 任务的工具。如果它被用于(即使是局部变量)(从外部角度来看)A container for 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 我倾向于同时定义 (LauncherStructureRocket) 作为组成。从外部的角度来看,RocketLauncher 由一个结构和一个火箭组成(由其组成,具有)(即使当前的实现将创建委托(delegate)到最后一刻)。点 (IMO) 是您要用此图表示的内容。如果您描述的是实现,那么观点并不重要:依赖就是依赖,组合就是组合。

如果您描述的是更高层次的架构,您会将实现细节保留在图表之外并尝试描述类接口(interface)(当然,当实现与抽象架构有很大不同时,可能会有一些错误的味道- 在实现或架构中 - 和原因 - 如果有 - 必须记录)。

关于c# - 如果在方法中初始化或引用对象,类图中的关系类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26402280/

相关文章:

c# - Caliburn.Micro 让它将 MainView 中的 UserControls 绑定(bind)到他们的 ViewModels

visual-studio-2010 - 如何在 UML 关系的 MemberEnds 上应用构造型?

UML 类图 - 了解哪些字段是必要的以及何时拥有公共(public)字段

c# - 如何正确配置 foreach 循环以避免索引超出范围错误?

c# - microsoft.office.tools.excel.dll 安装在哪里?

visual-studio - 测验系统用例

.net - 在哪里可以找到.NET Framework类图?

java - UML 中的一些派生类之间共享方法

c# - 从分组元素中选择多个

java - UML - 未在字段中定义时 Java 类之间的关系