协会类混淆

时间:2015-09-12 06:22:15

标签: associations uml class-diagram ooad

在类图中,用户可以参加多个考试。考试由几个类别组成。每个类别都有很多问题。每个问题都有很多选择。

我有两个问题是用户与考试互动的地方。

我的一位朋友说我应该在用户和考试之间进行一次名为考试的联合课程。我猜,作为属性,它可以有DateTime和Score。为什么考试不能存储分数并且有完成日期? (这是否意味着当考试完成时它只会改变状态?)通过这种设计,我猜它也必须具有User的属性。这将结合用户和考试。 (如果我需要考试来存储分数,那么我是否需要一个CompletedCategory来存储每个分类的个人分数?)

另一个地方是用户和问题之间的关系。或者应该是用户和选择?在计算分数之前,我需要在某处存储对问题的响应。这些响应也必须保存到数据库中。 Response应该是关联类还是问题列表?

有人可以向我解释一下利弊吗?有没有我能读到的好资源?我已经阅读了很多StackOverflow文章。我学到了很多,但仍然不确定哪些是最好的设计。

以下文章很有帮助:http://www.codeproject.com/Articles/9900/Identifying-Object-Oriented-Classes

但我仍然不确定为什么会这样:“例如,学生班级与课程班级有联系。学生可以参加很多课程,许多学生可以参加一门课程。但是,谁是否负责成绩?在学生班级中取得成绩可以为所有课程的学生提供相同的成绩。将该成绩放在课程课程中,所有学生都可以选择相同的成绩。“< / p>

为什么不能在我的情况下,每个考试都不能简单地为其分配用户。确实,这似乎意味着我的朋友说的考试或考试。我无法通过明确的解释来证明这一点。那么我该如何处理具有自己的分数和回应的分类?

谢谢!

Association Example1

Association Example2

3 个答案:

答案 0 :(得分:3)

1.88499999 -> 1.8849999 -> 1.884999 -> 1.88499 -> 1.8849 -> 1.885 -> 1.89 课程会与ExaminationStudent相关联。 Exam是一个实体,并且(希望)自己生活。 Student也是一个单独的实体(它是所有相互关联的问题和答案)。现在Exam进来并且两者都有关系。由于Examination可以有很多Student,反之亦然,因此您需要将两者结合起来。

现在,无论你选择一个简单的课程还是一个关联课程(我认为),更多的是品味问题。你会使用像这样的简单关联 enter image description here 如果您只是组合两个对象并添加一些属性(例如Examsscore)。

使用关联类 enter image description here 如果您添加的操作可以增强completionDateStudent之间的关联(例如,提供一组具有特定成绩的学生),则应该使用这些操作。

但是,我会说两种符号都是可以互换的。

关于问题/答案,我只需添加一个问题/答案课程,并由他们组成考试:

enter image description here

虽然这很简单,但从这里开始我会详细介绍。

答案 1 :(得分:3)

以下模型包括您的所有实体类型(类别除外)。请注意,虽然测试(作为Test的实例)是 事件类型 ,但测试执行(作为TestExecution的实例)是特定的 事件 (带有发生时间)。它是一种通用的建模模式,事件具有对象的参与,例如人员参与测试执行。这种参与也是一件大事。

由于参与也可以被视为事件与其参与者之间的链接(关系),我们可以建立关联模型Participation

在测试参与的情况下,我们想要记录参与者所达到的等级。为此,关联类的UML概念派上用场。它允许为关联定义属性(和其他类特征),其可视化符号清楚地表明其作为关联的性质,如下面的类图所示:

Model of Multiple Choice Tests

请注意,由于关联结束在默认情况下是唯一的,因此该模型意味着同一个人最多只能有一个具有特定测试执行的参与链接,这实际上是参与测试执行的约束。如果我们不将Participation建模为关联类,而是将其建模为类,如下面的模型中那样,我们必须明确表达此约束:

enter image description here

进一步说明

根据要求,以下是有关信息建模基本类别的一些其他说明:实体,包含对象事件实体类型

在Ontology中,这是对所有内容的哲学研究,以下是基本的区别:

  1. 有实体(也称为个体)和实体类型(在哲学中称为“普遍性”);
  2. 有三种基本类别的实体:
    1. 对象(在哲学中称为“endurants”),
    2. 转义,是存在依赖的实体(如品质,性格和物质关系),和
    3. 事件(在哲学中称为“perdurants”)。
  3. 例如,在(Guizzardi and Guarino 2015)和(Guizzardi et al. 2013)中讨论了这些本体论的区别。

    显然,对象和事件是建模信息系统和信息管理应用程序的最基本类别。

    UML链接(理解为物质关系)基于事件。例如,两个人之间的已结婚联系是基于他们的婚姻(或婚礼)事件。链接基于事件的事实意味着关联(作为链接类型)基于事件类型,并且将某些概念建模为事件类型或关联存在一定的模糊性。

    对象参与事件。事件是在本体上依赖的实体,因为它们存在依赖于其参与者以便存在。比如说,由布鲁图斯刺伤凯撒的事件。在这种情况下,我们有凯撒本人,布鲁图斯和匕首的参与。

    对象和事件之间存在一种有趣且基本的二元性:虽然对象的所有时间属性都是根据它们参与的事件来定义的,但事件的所有空间属性都是根据其参与者的空间属性来定义的。

    在第一步中对所有相关对象类型建模后,我们在第二步中对相关事件类型进行建模。事件和对象之间的主要关联类型是参与。在我们(概念)信息模型中将事件类型添加到对象类型时,我们也会在它们之间建模参与类型。

答案 2 :(得分:1)

  

为什么考试不能存储分数并且有完成日期?

你是对的。 “数学/代数考试第二学期”可以进行多次考试,如果我们考试完成课程和考试作为整理的尝试。但是在这里,正如你在考试中提出问题一样,日期和时间也属于它。你的考试已经是考试了。

毫无疑问,通过将庞大的类划分为更小,更方便的类,可以大大改善您的模型。但你的模型也可以起作用。