【问题标题】:UML mapping in c#C#中的UML映射
【发布时间】:2010-09-16 18:25:19
【问题描述】:

有人可以告诉我如何在 c# 中映射聚合和组合,考虑到 STUDENT 和 LECTURER 这两个类。

我的问题可能不清楚。例如,我使用 VS 类设计器生成类之间的关联关系。考虑 2 个类 LECTURER 和 STUDENT_SOCIETY。类设计器生成以下代码。 块引用

public class Lecturer
{
    private string Name;
    private string Specialization;

    public StudentSociety StudentSociety
    {
        get
        {

        }
        set
        {
        }
    }


}

public class StudentSociety
{
    private int Name;
    private string NoOfMembers;
}

同样的方式,我如何为聚合和组合建模

【问题讨论】:

  • 问题还不清楚。您是在问:(1)UML 模型对于组合/聚合会是什么样子? (2) 如果建模关系是组合/聚合,生成的代码会是什么样子?或者是其他东西?如果是 (2),请参阅下面的 @FixerMark 解决方案。
  • 就目前而言,您有一个聚合关系,因为 StudentSociety 位于 Lecturer 的外部,其中包含动态分配 Studentsociety 对象的工具。要将其更改为复合关系,您需要将 StudentSociety 成员及其 get/set 函数设为私有,并且可以说,将 StudentSociety 类设为讲师的子类。 (您还应该将其称为 StudentSociety 以外的其他名称,以避免与同名类混淆/冲突)
  • VS 类设计器不是 UML 工具。它不支持聚合或组合。

标签: c# uml class-diagram


【解决方案1】:

通常组合是永久性的,并且通过将一个类完全包含在另一个类中来表示,而聚合涉及某种分配或链接。

因此,假设讲师负责许多学生的作文,会是这样的:

Public class Lecturer
{
    public class Student
    {
        string mName = "";
... etc.

而聚合可能是:

Public class Lecturer
{
    ... Some code ...
}

Public class Lecturer
{
    Student mStudent;

    public void setStudent(Student theStudent)
    {
        mStudent = theStudent
    }

... etc.

如果我在你的作业中获得好成绩,请告诉我... ;)

【讨论】:

  • typo - 聚合示例的第一行应该是 Public class Student(不是 Lecturer)。否则回答好。但是 - 从领域的角度来看 - 我仍然会质疑讲师“包含”或聚集学生的概念(以上每个 cmets)。
  • 完全正确,应该是学生 - 这会教我快速剪切和粘贴。
【解决方案2】:

需要更多信息。您想获取您的领域模型并将其映射到 UML 图吗?通常它以另一种方式发生(首先绘制图表,然后将模型生成为代码对象)。 C# 或“vanilla”Visual Studio 中没有内置任何东西可以做到这一点。但是,MS Visio(“专业”级 Office 安装的一部分)可以从图表到代码再返回,并与 VS 集成以执行此操作。上次我使用 Visio,它不是“纯粹的”UML;从图表方案的组合中借用的图表符号。但是,它会为您提供模型的可读图形表示,并且您在那里所做的更改可以作为代码对象重新发出。

就实际确定它们之间的关系而言,它通常是多对多的,可用的一对多关系的统一上下文是“课程”或“课程”的“班级”或“部分”主题”。一个课程有很多部分。每个部分有一位讲师和许多学生。同一个学生可以参加多个部分,同一个老师可以教多个部分。这意味着讲师和学生都可以拥有他们教授/参加的部分的列表(如果您需要一个“双向”域模型,您可以在其中围绕对象图在任何方向上导航)。

【讨论】:

  • Visual Studio 可以从代码生成类图。它们类似于 UML 静态图。
  • 同意@Keith。你没有提到你试图捕捉的关系的性质——这非常重要。假设它遵循“讲师教学生”的思路:(1)它通常是多:多(带有一些中间体),因此(2)聚合/组合对于这种类型的关系通常没有用处。
  • 感谢您的回复,请参阅编辑
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多