在面向对象编程中,我们使用has-a,is-a relationship。我想知道地球和太阳之间的关系是什么,地球围绕太阳旋转?
学习面向对象分析,设计和编程的最佳方法是什么?
答案 0 :(得分:0)
对象,类和是关系
在面向对象的域模型中,有两个主要对象:
Earth
的对象Planet
(实例化,是-a)Sun
的对象Star
(实例化,是-a)Planet
和Star
是特殊种类的CelestialObject
(专业化,是-a)课程和对象的关联
Sun
和Earth
之间存在关联:Earth
围绕Sun
旋转,由其引力捕获。
如果我们用更一般的术语来思考,任何Star
都可以有几个Planet
旋转。它可能根本没有Planet
。相反,大多数Planet
围绕一个Star
旋转。尽管最近有发现,但现在让我们保持简单,这已经证实,在极少数情况下,Planet
可以与多个Star
相关联。
这种关联有两种观点:从Planet
我们可以说has-a-Star
和从星方来看,我们可以说has-a-Planet
。
如何在对象世界中表示关联?
表示 has-a 关联的简单方法是保持对关联对象的引用。这仅适用于单一关联,例如对象Earth
将保留对Sun
的引用。
表示 has-a 关联的另一种方法是保持对关联对象的引用列表(更一般地说,是一个容器)。然后,Sun
会有一个由Planet
,Venus
,Earth
等组成的关联Mars
列表...
有时,关联可能更复杂,并且承载一些对其所代表的链接唯一的数据。例如,Earth
与Sun
相关联,并在365,25天内转变它。为了简单起见,你可以认为它是太阳系中Planet
的一个属性。但是如果我们认真对待这个问题,那么这个持续时间实际上不是Earth
的属性,因为Earth
也绕着银河系的中心转动,但持续时间不同。它也不是Sun
的属性,因为Mars
也围绕Sun
转,但是在686,96天。
在这种情况下,您可以认为关联本身就是一个类。实例化,如果它是一个轨道持续时间为365,25天的对象,并且具有第一个极端Sun
和第二个极端Earth
有关这些核心概念的更多信息
要了解有关这些核心概念的更多信息,并以独立于语言的方式,您可以查看UML class diagram。它的目的是准确地表达这些类型的概念。您也可以查看this blog,它为天体提供了一个很好的类对象,尽管它没有解决这些关联。
如何在模拟中使用模型?
您需要选择OO语言来实现您的模型。保持一个天体的容器。每个对象应该具有一些坐标,旋转速度和基于其旋转速度和经过时间更新坐标的方法。然后,您的模拟将包含一个循环(表示经过的时间),并且在每次迭代时,您都要浏览天体列表,并为每个天体更新坐标,并显示结果。