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_Architecture - Fatal编程技术网

Oop 什么';设计火车和轨道对象之间关系的最佳方法是什么?

Oop 什么';设计火车和轨道对象之间关系的最佳方法是什么?,oop,architecture,Oop,Architecture,我在做一个视觉追踪火车的项目。我已经重构了火车、轨道和各自的绘图类之间的对象关系好几次了,我对它们中的任何一个都不满意。也许你们可以帮我 下面是我现在得到的对象的接口 轨道: addControlPoint(点到点) getPointAtPosition(曲线上的浮动位置) getTangentAtPosition(曲线上的浮动位置) getMaxPosition() 轨道抽屉: setGraphicsContext(图形g) 绘制(轨道) 列车: 设置/获取轨道(轨道) 设置/获取跟

我在做一个视觉追踪火车的项目。我已经重构了火车、轨道和各自的绘图类之间的对象关系好几次了,我对它们中的任何一个都不满意。也许你们可以帮我

下面是我现在得到的对象的接口

轨道:

  • addControlPoint(点到点)
  • getPointAtPosition(曲线上的浮动位置)
  • getTangentAtPosition(曲线上的浮动位置)
  • getMaxPosition()
轨道抽屉:

  • setGraphicsContext(图形g)
  • 绘制(轨道)
列车:

  • 设置/获取轨道(轨道)
  • 设置/获取跟踪位置(浮动位置)
  • 设置/获取速度(整数速度)
  • 向前移动(延迟时间)
列车出票人:

  • setGraphicsContext(图形g)
  • 抽签(火车)
下面是它们目前的使用情况

init() {
    Tracks track = new Tracks();
    track.addPoint( point1 );
    track.addPoint( point2 );
    track.addPoint( point3 );  

    Train train = new Train();
    train.setTrack(track);
    train.setPosition(0);
}

run() {
   while (running) {
       elapsedTime = calcTime();
       update(elapsedTime);
       Graphics g = getGraphics();
       draw(g);
   }
}

update(long elapsedTime) {
    train.setSpeed(10);
    train.moveForward(elapsedTime);
}

draw(Graphics g) {
    trackDrawer.draw(track);
    trainDrawer.draw(train);
}
以下是几个具体问题:

  • 火车靠轨道行驶有意义吗?我想是的,因为没有轨道的火车在现实世界中毫无意义

  • 为了画火车,我需要通过计算轨道上的切线来找出火车在轨道上的方向。这会导致TrainDrawer内部轨道的依赖性,我不关心这一点。然而,我不认为让列车负责计算方向向量(切线)是有意义的,因为它只需要绘制列车,而没有其他原因

  • 一般来说,创建需要以某种方式绘制的对象的最佳实践是什么?很多人告诉我,火车应该知道如何画自己,但这似乎太依赖火车本身了。感觉不对

  • 若你们的实体包含更多的逻辑,而不仅仅是被画出来的,那个么我就不会直接把火车和轨道联系起来。取决于当前轨道的列车速度如何?我会在两者之间安排一些旅行。这使得抽象变得很容易,如果需要的话,还可以提供不同的行为实现

  • 方向已经是第一个信息,而不是真正的列车信息。这是旅游的好地方

  • 干得好!火车绝对不负责牵引自己。如果您曾经不得不将您的列车渲染到另一个设备,或者需要过滤某些细节,那么您就会遇到麻烦


  • 我的第一印象是
    TrainDrawer
    TrackDrawer
    是问题的根源,不应该存在


    按照模型视图方法,列车和轨道都是模型实体,都没有另一个。如果你考虑了<代码> Draftsman <代码>对象(对应于“视图”),绘图员从轨道和火车中收集信息,并给出一个连贯的整体。你能不能再详细解释一下?