【问题标题】:UML Class Diagrams - Understanding Which Fields are Necessary and When To Have Public FieldsUML 类图 - 了解哪些字段是必需的以及何时拥有公共字段
【发布时间】:2019-11-02 17:33:15
【问题描述】:

我目前正在为一个应该类似于“Duolingo”的应用程序制作 UML 类图。

我正在为如何建模多对多关系而苦苦挣扎。 所以,我想你有很多用户可以参加很多课程(他们希望学习的不同语言)。出于这个原因,我决定创建一个 courseProgress 类来模拟这种多对多关系。

我想知道的是,我需要将用户 ID 和课程 ID 存储在我的 courseProgress 类中吗?我想我在这里混淆了如何在数据库中使用密钥。

见下图:

我走对了吗?

另外,我想知道您何时会使用私有和公共字段。因为在我看来,您似乎总是希望所有字段都是私有的,并且只使用 getter 和 setter 来始终访问这些字段?

注意,上图中的字段是公开的,因为我还没有将它们更改为私有

在上图中,我应该有 userID 字段和 courseID 字段,还是应该有 User 类型的用户字段和 Course 类型的 course 字段?

【问题讨论】:

  • 实际上......用户或课程实体是否甚至需要一个 ID,或者是在创建对象时,它会在应用程序范围内自动唯一这一事实所暗示的唯一 ID?
  • 这取决于图表的用途。你是在为现实世界的概念建模,你在为数据库建模,你在为软件建模吗?

标签: uml class-diagram model-associations


【解决方案1】:

您确实走在正确的轨道上。附加类CourseProgress 帮助您更好地表示UserCourse 之间的多对多关联。另一种方法可能是使用association class

公共、受保护或私有属性之间的选择取决于您的类设计以及您希望如何在对象模型中公开此信息。这太宽泛了,无法在这里解释。为简化起见,如果属性是可以被其他对象更改而不会产生任何后果的数据,那么您可以将其公开。但是,如果某些属性只能根据某些规则更改,并且要保证前置条件、不变量或后置条件,则最好通过方法控制更改,从而使属性成为保护或私有的。

是否指示关联类的标识符(即courseIdUserId)取决于图表的用途。

通常,对于域模型或设计模型,您 wouldn't add 用于表示与您关联的类的属性。这是关联的实现细节。通常,您宁愿使用association end 来指示如何调用相关类的实例。

对于实现模型(one-to-manymany-to-many 的示例),您可能希望显示此详细信息以允许与数据库表进行明确映射。

【讨论】:

    猜你喜欢
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    相关资源
    最近更新 更多