我有一个问题陈述要建立一个对象模型。
问题陈述:每辆车都有一个发动机和一个变速箱。变速箱由按预定齿轮比工作的滑轮组成。汽车有较小的发动机4-6档,而运动型多功能车(SUV)有更大的发动机4-8档。另一方面,重型车辆(HDV)是为运输货物而设计的,因此有8-16档的巨大发动机。齿轮的数目越多,滑轮的数量就越多,反之亦然。
我已经完成了所有的对象模型,但是有三件事让我感到困惑:
( A)“变速箱由按预定齿轮比工作的滑轮组成”的部分,我们是否需要
如果是1种情况或2种情况,我们将如何显示每辆车的预定义的齿轮比率?
( B)它说汽车有较小的发动机,4-6 gears.....Sports通用汽车(SUV)有更大的发动机( 4-8 gears.....Heavy ),任务车辆(HDV)有8-16齿轮的巨大引擎。那么,我们如何显示所有三种类型车辆的齿轮数呢?如果根据混淆(A),我们选择了第一种情况并制造了目标齿轮,我们是否需要将它与所有这三种物体--汽车、SUV和HDVs -联系起来;或者,如果我们从混淆(A)中选择了第2种情况,那么我们是否需要将齿轮的no作为所有三种物体汽车、SUV和HDV的属性?
( C)当它说齿轮的数目越多时,滑轮的数目就会越大,反之亦然,我们应该如何在对象模型中显示这种关系?
发布于 2017-04-23 23:45:49
您正在寻找通用的帮助,为您的问题陈述模型的设计。因为这个网站不是一个通用的设计服务,我们不会为你做一个设计。但也许我们至少可以给出一些一般性的建议,并为你的问题陈述(和目前的设计,如果你有一个)提供建设性的批评。
建模是通过识别概念(类型)及其关系(关联)来完成的。最重要的是,我们可以添加防止某些不受欢迎的事情发生的约束,约束范围可以从关系中更简单的所需基数范围,到允许和不允许的广泛表达。
从定义上来说,模型是一种抽象;抽象是对问题域和模型最终使用的不相关细节的遗漏。为了知道要建模什么而不需要建模什么,您必须了解如何创建和使用模型。
首先,我倾向于将最简单的实体建模为概念/对象,而不是属性,然后作为优化,将实体重构为属性,当模型显然不需要该类型实体的详细级别时(而是为这些实体提供一个值)。
因此,一个非常好的起动机模型是将变速箱建模成滑轮和齿轮的集合(可能还有齿轮比--除非这些比率是从滑轮和齿轮中得出的)。
这在很大程度上取决于需要建模的内容,从问题语句中看不清楚。请澄清如何使用模型(这样您就知道需要捕获什么,并知道如何计算导出的答案)。在最简单的情况下,您只需将齿轮比直接建模为实体(或属性)。否则,您需要问题说明来告诉您如何从滑轮和齿轮的变速箱中计算或导出齿轮比,并且您需要将齿轮和滑轮存储在有效的安排中,这样就可以计算齿轮比。
那么,我们如何显示所有三种类型车辆的齿轮数呢?
每辆车大概都有一个变速箱。不需要将变速箱内的部件连接到汽车上:只需将每种类型的汽车连接到一个(或多个)变速箱,传递关系就足以将汽车与齿轮连接起来。因此,为了从汽车到齿轮,我们通过它的变速箱。
你可以为每辆车存储一份齿轮数的副本,最初是从变速箱中计算出来的。然而,这将代表对信息的缓存,这是一种设计复杂的优化,如果没有明确的证据表明这样的优化出于某种原因是重要的,就不应该进行这种优化。
齿轮的数目越多,滑轮的数目就越多,反之亦然。
这是一种事实陈述,一种逻辑陈述,一条规则,如果你愿意的话。它说,如果我们在变速箱的设计中增加一个齿轮,我们必须有更多的滑轮,如果我们增加一个滑轮,我们就必须有更多的齿轮。(但它并没有告诉我们,在其他有效的设计中增加一个齿轮或一个滑轮是有效的,或者应该是有效的。)
然而,这并不是很精确:可能是我们每个轮需要两个齿轮,或者每个齿轮需要两个滑轮。您需要从问题域寻求澄清。
如果这些关系是我建议的2:1关系中的一种简单的关系,那么您应该对这个关系建模(一个齿轮与两个滑轮相关,或者一个滑轮与两个齿轮相关),否则您就不必对这个规则/事实陈述建模,因为这足以执行这个规则/声明。
然而,在最广义的意义上,这可能被认为是一种约束,你可以以某种形式加以应用,尽管在最一般的情况下,这是一个很难建模的约束,因为它指定了不同的变速箱设计之间的关系,而没有说明任何单一的有效/合法设计可能是什么。因此,我可以说我有4个滑轮和12个齿轮,而这个事实陈述--这个规则--在验证方面没有任何好处(如果不能访问其他已知的有效设计,那么这些已知的有效设计是如何得到验证的?)。所有的规则都说,如果一个设计是有效的/合法的,比另一个设计有更多的齿轮有更多的滑轮。这是一个很难用的声明,应该把你送回问题领域寻求澄清。
发布于 2019-06-18 11:55:42
我只想在此详述@Dunk在评论中所说的话。您在“问题陈述”中所描述的不是面向对象世界中的问题陈述。
“问题”描述的是数据或关系模型,而不是对象模型。
面向对象的上下文中的对象模型是用来建模行为的.没有行为,就没有对象模型。让我演示一下使用相同的描述,但添加一种行为:
https://softwareengineering.stackexchange.com/questions/347620
复制相似问题