在类图中,用户可以参加多个考试。考试由几个类别组成。每个类别都有许多问题。每个问题都有许多选择。
我要问的两个地方是用户与考试交互的地方。
我的一个朋友说我应该在用户和考试之间建立一个叫做考试的关联类。我想,作为属性,它可以有DateTime和Score。为什么考试不能存储分数并有一个完成日期?(这难道不意味着当考试结束时,它只会改变状态吗?)有了这个设计,我想它也必须有一个用户属性。这将结合用户和测试。(如果我需要考试来存储分数,那么我是否需要一个CompletedCategory来存储每个类别的个人分数?)
另一个地方是用户和问题之间的关系。还是应该是用户和选择?在计算分数之前,我需要一个地方来存储对问题的回答。这些响应也必须保存到数据库中。响应应该是关联类还是有问题的列表?
有人能给我解释一下利弊吗?有什么好的资源我可以阅读吗?我读过很多StackOverflow文章。我学到了很多,但仍然不确定哪些是最好的设计。
以下文章很有帮助:http://www.codeproject.com/Articles/9900/Identifying-Object-Oriented-Classes
但我仍然不确定为什么这是真的:“例如,一个学生班与一个课程班有关联。一个学生可以选修许多课程,而一门课程可以被许多学生选修。但是,谁对分数负责?将分数放在学生班上会给一个学生所有课程都相同的分数。将分数放在课程班上会给所有选修同一课程的学生相同的分数。”
在我的例子中,为什么不能每次考试都分配一个用户。没错,正如我朋友所说,这似乎意味着一次考试。我无法用清楚的解释来证明这一点。那么,对于有自己分数和答案的类别,我该怎么办?
谢谢
为什么考试不能存储分数并有完成日期?
你是对的。“第二学期数学/代数考试”可以有几次考试,如果我们把考试作为完成课程,把考试作为完成课程的尝试。但是在这里,正如你在考试中提出的问题,日期和时间也属于它。你的考试已经是考试了。
毫无疑问,通过将大型类划分为更小、更方便的类,可以大大改进模型。但是你的模型也可以工作。
以下模型包括所有实体类型(类别除外)。注意,虽然测试(作为测试的实例)是一种事件类型,但测试执行(作为测试执行的实例)是一种特定事件(具有发生时间)。这是一种通用的建模模式,事件由对象参与,例如人员参与测试执行。这种参与也是一项活动。
由于参与也可以被视为事件及其参与者之间的链接(关系),我们可以对参与进行建模。
在测试参与的情况下,我们希望记录参与者取得的成绩。为此,关联类的UML概念派上了用场。它允许为关联定义属性(和其他类特征),并使用视觉符号清楚地表明其作为关联的性质,如以下类图所示:
请注意,由于默认情况下关联结束是唯一的,这个模型意味着同一个人最多可以与特定的测试执行有一个参与链接,这实际上是一个约束,适用于参与测试执行。如果我们不将参与
建模为关联类,而是作为一个类,如以下模型所示,我们必须明确表达这个约束:
根据要求,这里有一些关于信息建模基本类别的附加解释:实体、包含对象和事件以及实体类型。
本体论是对存在物的哲学研究,它有以下基本区别:
这些本体论区别在(Guizzardi和Guarino 2015)和(Guizzardi等人,2013)中进行了讨论。
显然,对象和事件是建模信息系统和信息管理应用程序的最基本类别。
UML链接(理解为物质关系)是基于事件的。例如,两个人之间的已婚链接是基于他们的婚姻(或婚礼)事件的。链接基于事件的事实意味着关联(作为链接类型)是基于事件类型的,并且是否将某些概念建模为事件类型还是关联存在一定的模糊性。
对象参与事件。事件是本体论上依赖的实体,因为它们的存在依赖于参与者才能存在。以凯撒被布鲁特斯刺伤为例。在这次活动中,我们有凯撒本人、布鲁特斯和匕首的参与。
对象和事件之间有一个有趣且基本的二元性:虽然对象的所有时间属性都是根据其参与的事件定义的,但事件的所有空间属性都是根据其参与者的空间属性定义的。
在第一步中对所有相关对象类型进行建模后,我们在第二步中对相关事件类型进行建模。事件和对象之间的主要关联类型是参与。因此,在将事件类型添加到(概念)信息模型中的对象类型时,我们还对它们之间的参与类型进行建模。
考试将把学生与考试联系起来。学生是一个实体,并且(希望)独立生活。考试也是一个单独的实体(它是所有相互关联的问题和答案)。现在,检查开始了,并将两者联系起来。因为一个学生可以有很多考试,反之亦然,所以你需要一些东西将两者结合起来。
然而,我要说的是,这两种符号是可互换的。
关于问题/答案,我只需添加一个问题/答案类,并进行由它们组成的考试:
虽然这很简单,但我将从这里开始详细介绍。
使用“关联类型”可以增强代码的可读性,其方式是移动内部类型到一个 trait 作为output(输出)类型。这个 trait 的定义的语法如下: // `A` 和 `B` 在 trait 里面通过`type` 关键字来定义。 // (注意:此处的 `type` 不同于用作别名时的 `type`)。 trait Contains { type A; type B; // 通常
关联类型 定义一个协议时, 有时在协议定义里声明一个或多个关联类型是很有用的. 关联类型给协议中用到的类型一个占位符名称. 直到采纳协议时, 才指定用于该关联类型的实际类型. 关联类型通过associatedtype关键字指定. 关联类型的应用 protocol Container { associatedtype ItemType mutating func append(_ i
关联类型是 Rust 类型系统中非常强大的一部分。它涉及到‘类型族’的概念,换句话说,就是把多种类型归于一类。这个描述可能比较抽象,所以让我们深入研究一个例子。如果你想编写一个Graph trait,你需要泛型化两个类型:点类型和边类型。所以你可能会像这样写一个 trait,Graph<N, E>: trait Graph<N, E> { fn has_edge(&self, &N, &N
我很难理解UML 2.5规范中解释的关联类的概念。最让我困惑的是取自第199页的以下句子: 注意。即使AssociationClass的所有endpoint都具有isUnique=true,也可能有多个实例将endpoint类的同一组实例关联起来。 如本文所述:https://issues.omg.org/issues/UMLR-757这一句话似乎破坏了这一概念的实用性。同时,它使几乎所有解释在U
我在我的本体论中有关于类(而不是个体)的问题。我需要知道OWL(full-dl-lite)允许哪一个关联类。我的意思是属性的域和范围是http://www.w3.org/2002/07/owl#class。那有可能吗?谢谢你的提示。
我已经找了一段时间了,但是找不到一个明确的答案。 很多人说使用联合来键入双关语是不明确的,也是不好的做法。这是为什么呢?我看不出它会做任何未定义的事情的任何理由,考虑到你写入原始信息的内存不会自动改变(除非它超出了堆栈的范围,但这不是一个联合问题,这将是一个糟糕的设计)。 人们引用严格的混淆现象规则,但在我看来,这就像说你做不到,因为你做不到。 此外,如果不打双关语,工会还有什么意义?我在某个地方