Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 形状模型的正确层次结构_Oop - Fatal编程技术网

Oop 形状模型的正确层次结构

Oop 形状模型的正确层次结构,oop,Oop,如果我必须为几何形状层次结构创建一个OOP模型,那么考虑点类也是最好的 谢谢。使用java.awt.Shape怎么样?如果你想完全封装一个形状的概念,它不应该是一个层次结构,因为世界上有无数个形状。相反,它应该只是一个形状类。它应该由一系列直线和曲线组成。然后,您可以使用方法检查它是否符合特定的形状定义,例如,IsCircle(),IsSquare()等 您还可以使用方法和/或构造函数将其设置为特定类型的形状。所有形状都可能实现一个IShape接口IShape需要一个Area()方法和一个IsI

如果我必须为几何形状层次结构创建一个OOP模型,那么考虑点类也是最好的


谢谢。

使用java.awt.Shape怎么样?

如果你想完全封装一个形状的概念,它不应该是一个层次结构,因为世界上有无数个形状。相反,它应该只是一个形状类。它应该由一系列直线和曲线组成。然后,您可以使用方法检查它是否符合特定的形状定义,例如,
IsCircle()
IsSquare()


您还可以使用方法和/或构造函数将其设置为特定类型的形状。

所有形状都可能实现一个
IShape
接口
IShape
需要一个
Area()
方法和一个
IsIntersectingWith(IShape otherShape)
方法。不过,这种过于简单的观点提出了一些关于如何实现动态调度的其他问题(三角形/三角形交点需要与三角形/线段不同的算法)

当然,这是假设您确实需要此功能。假设是面向图形的形状库,则可以定义变换,如
旋转
平移
缩放
。您还可以强制使用
Union
Intersect
或任何其他集合操作(但这两种操作可以表达您可能需要的所有内容)

您还可以基于计算几何,并提供将任何
IShape
转换为
多边形的方法函数


我的观点是,可以通过
IShape
实现的功能应该符合预期用途。如果您没有任何预期用途(因为它从一开始就具有教育意义),您应该将其作为练习本身的一部分,或者作为发现字段使用(这个用途或那个用途如何,我们可以在一个界面中表达所有这些功能,还是将其拆分为多个)

您打算使用形状做什么?他们应该有什么共同的行为?他们的行为应该有什么不同?我想用2d形状(圆形、矩形等)3d形状(球体等)来建模一个系统xdevel2000:是的,但是这个系统是用来做什么的?OO建模是一项完全由您感兴趣的行为驱动的活动。在OO设计中对真实世界的一切进行建模是不可能的,也是毫无意义的,您需要并且应该只对对您重要的东西进行建模。为此,你需要确定你正在设计的系统的用途。@Charles:哦,没什么特别的。我的目标是用二维和三维几何形状构建一个简单的系统并进行测试。我真的不知道如何才能让自己更清楚。你的“简单系统”应该做什么?你打算测试什么行为?是的,但我想创建一个用于教育目的的行为