对对象关系感到困惑

时间:2017-09-24 11:11:08

标签: oop object modeling

在面向对象编程中,我们使用has-a,is-a relationship。我想知道地球和太阳之间的关系是什么,地球围绕太阳旋转?

学习面向对象分析,设计和编程的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

对象,类和关系

在面向对象的域模型中,有两个主要对象:

  • Earth的对象Planet(实例化,是-a)
  • Sun的对象Star(实例化,是-a)
  • PlanetStar是特殊种类的CelestialObject(专业化,是-a)

课程和对象的关联

SunEarth之间存在关联:Earth围绕Sun旋转,由其引力捕获。

如果我们用更一般的术语来思考,任何Star都可以有几个Planet旋转。它可能根本没有Planet。相反,大多数Planet围绕一个Star旋转。尽管最近有发现,但现在让我们保持简单,这已经证实,在极少数情况下,Planet可以与多个Star相关联。

这种关联有两种观点:从Planet我们可以说has-a-Star和从星方来看,我们可以说has-a-Planet

如何在对象世界中表示关联?

表示 has-a 关联的简单方法是保持对关联对象的引用。这仅适用于单一关联,例如对象Earth将保留对Sun的引用。

表示 has-a 关联的另一种方法是保持对关联对象的引用列表(更一般地说,是一个容器)。然后,Sun会有一个由PlanetVenusEarth等组成的关联Mars列表...

有时,关联可能更复杂,并且承载一些对其所代表的链接唯一的数据。例如,EarthSun相关联,并在365,25天内转变它。为了简单起见,你可以认为它是太阳系中Planet的一个属性。但是如果我们认真对待这个问题,那么这个持续时间实际上不是Earth的属性,因为Earth也绕着银河系的中心转动,但持续时间不同。它也不是Sun的属性,因为Mars也围绕Sun转,但是在686,96天。

在这种情况下,您可以认为关联本身就是一个类。实例化,如果它是一个轨道持续时间为365,25天的对象,并且具有第一个极端Sun和第二个极端Earth

有关这些核心概念的更多信息

要了解有关这些核心概念的更多信息,并以独立于语言的方式,您可以查看UML class diagram。它的目的是准确地表达这些类型的概念。您也可以查看this blog,它为天体提供了一个很好的类对象,尽管它没有解决这些关联。

如何在模拟中使用模型?

您需要选择OO语言来实现您的模型。保持一个天体的容器。每个对象应该具有一些坐标,旋转速度和基于其旋转速度和经过时间更新坐标的方法。然后,您的模拟将包含一个循环(表示经过的时间),并且在每次迭代时,您都要浏览天体列表,并为每个天体更新坐标,并显示结果。