我正在尝试通过数据库设计技能来完善。我今天一直在解决一些与 IT 相关的难题,其中大部分都相当简单。...然后我遇到了这个所谓的“老歌”,这让我很沮丧。
前提是下图中的类层次结构有误。没有提供有关类/接口性质的更多信息。我找不到任何逻辑问题。我能做的最好的事情就是抱怨一个点在技术上不是一个形状,但我想认为答案比这要少一些。
如果有人有任何建议,我很想听听。它真的让我很头疼。
我正在尝试通过数据库设计技能来完善。我今天一直在解决一些与 IT 相关的难题,其中大部分都相当简单。...然后我遇到了这个所谓的“老歌”,这让我很沮丧。
前提是下图中的类层次结构有误。没有提供有关类/接口性质的更多信息。我找不到任何逻辑问题。我能做的最好的事情就是抱怨一个点在技术上不是一个形状,但我想认为答案比这要少一些。
如果有人有任何建议,我很想听听。它真的让我很头疼。
也许这个问题给了我们一个提示:
没有提供有关类/接口性质的更多信息。
我们绝对为零问题的实际范围(即业务逻辑)的信息“形状”可以是在网格上绘制的数学表示。它可以是游戏引擎建模程序的定义。它可能是一个人的健康水平的指标。谁知道?这些变体中的每一个都需要类图和关系数据模型中的不同表示。
它只让我们对可能在语义上错误的地方做出假设。但是,我们可以对技术上可能存在的问题进行观察可能存在的问题。
我提出的问题是箭头指向错误的方向。在大多数类图中,继承由具有指向基类的箭头的子类表示。
我认为 Polygon 类是多余的。有什么特殊的原因你必须分开矩形和正方形吗?更进一步,为什么要区分三角形和矩形?您可以将两者都视为点列表;三角形有三个,矩形有四个。还有你自己提到的那件事;点并不是真正的形状,也许这是您正在寻找的最明显的答案。
我也难住了。我唯一能想到的是Polygon和Ellipse应该从属于Point。
多边形是三个或更多点。
椭圆有两个焦点。
这将使 Shape 接口成为一个列表或点数组。
您的问题涉及数据库设计,这就是我看到问题的地方;类层次结构太深了,我认为可以使用单个形状类进行建模,因为它们都具有相似的属性 EG 都有边。圆形有 1 个,三角形有 3 个,矩形有 4 个。
就类图本身而言,我想可以说点、多边形和椭圆应该是接口而不是类。
我也同意其他关于点不是形状的评论。
出于兴趣,这个问题从何而来?
如果我从严格的数学角度来看,Point 和 Ellipse/Circle 是Conic Sections,应该属于同一类。我不知道这是正在寻找的神奇答案,但它就是一个。
扩展它,多边形由 3-N 条线组成,它们不是数据模型的一部分。
我同意其他发帖人的观点,他们指出圆形、矩形和正方形只是多边形的特例,我不会在关系数据库模型中专门对它们进行分解。这对于对象模型可能是有意义的,但对于关系模型来说似乎有点过头了。
鉴于问题的模糊性,这听起来像是圆椭圆问题的措辞。http://en.wikipedia.org/wiki/Circle-ellipse_problem。
本质上,错误将是定义具有无法在超类中定义的不变量的子类: