代码之家  ›  专栏  ›  技术社区  ›  Shiran Abbasi

对对象关系感到困惑

  •  1
  • Shiran Abbasi  · 技术社区  · 7 年前

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Christophe    7 年前

    对象、类和 关系

    • 一个物体 Earth 类的 Planet (实例化,is-a)
    • 一个物体 Sun 类的 Star
    • 行星 明星 CelestialObject (专业化,is-a)

    类和对象的关联

    太阳 : 世界 太阳

    如果我们从更一般的角度考虑,任何 明星 旋转。它还不如没有 行星 完全相反,大多数 行星 明星 行星 可能与几个 明星

    这种联系有两种观点:从 行星 has-a-Star has-a-Planet .

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

    has-a 关联是保持对关联对象的引用。这仅适用于单一关联,例如对象 将保留引用 太阳 .

    has-a 关联是保留对关联对象的引用列表(更一般地说,是一个容器)。 然后会有一个相关的 行星 Venus , 世界 , Mars

    有时,关联可能更复杂,并且包含一些它所代表的链接所特有的数据。例如 世界 它会在365,25天内扭转局面。为了简单起见,您可以考虑它是 在太阳系中。但如果我们认真对待这个问题,这个持续时间实际上并不是 世界 ,因为 世界 太阳 要么,因为 火星 太阳

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

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

    UML class diagram . 它的目的是准确地表示这些概念。你也可以看看 this blog

    您需要选择一种面向对象语言来实现您的模型。保存一个天体容器。每个对象都应该有一些坐标、旋转速度和基于其旋转速度和经过的时间更新坐标的方法。然后,您的模拟将由一个循环(表示经过的时间)组成,在每次迭代中,您将遍历天体列表,并为每个天体更新坐标,并显示结果。