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
Actionscript 3 OOP中C风格结构的替换_Actionscript 3_Oop_Setter_Getter - Fatal编程技术网

Actionscript 3 OOP中C风格结构的替换

Actionscript 3 OOP中C风格结构的替换,actionscript-3,oop,setter,getter,Actionscript 3,Oop,Setter,Getter,我是一名学生,主要从事电子编程。我越是投入其中,我就越意识到我在这方面有多么糟糕。 我正在努力提高OO设计的水平。 我一直在读的一件事是关于getter和setter的使用 现在我明白了他们在这里提出的观点,但我仍然无法回避一些简单的问题。这就引出了我的问题(最后)。我正在AS3中设置一个简单的塔防游戏作为学习练习。我想让敌人跟随路径点,所以我要制作一个路径点数组,并将其作为地图对象的属性。路径点是一个具有x和y属性的对象(更像一个结构)。现在我可以看到,这正是文章中令人沮丧的糟糕做法,但我

我是一名学生,主要从事电子编程。我越是投入其中,我就越意识到我在这方面有多么糟糕。 我正在努力提高OO设计的水平。 我一直在读的一件事是关于getter和setter的使用


现在我明白了他们在这里提出的观点,但我仍然无法回避一些简单的问题。这就引出了我的问题(最后)。我正在AS3中设置一个简单的塔防游戏作为学习练习。我想让敌人跟随路径点,所以我要制作一个路径点数组,并将其作为地图对象的属性。路径点是一个具有x和y属性的对象(更像一个结构)。现在我可以看到,这正是文章中令人沮丧的糟糕做法,但我似乎想不出更好的方法来做到这一点。如果你们中的一些人有更多的经验,我们将不胜感激

我不想把这看成是坏习惯与好习惯的较量,而是范式的转变。不幸的是,这并不像简单地拨动开关那么简单。这是随着你越来越有经验以不同的方式看待事物而逐渐发生的事情


我能给你的最好建议就是开始编码。很多。

好吧,接下来是沉重的假设:我认为你对效率考虑得太多了。OO编码与效率无关。这是关于优雅的设计。它是关于最小化外部因素的副作用和保护内部状态。这就是编译器“优化”的原因。您应该主要考虑可维护性和编码的难度。您编写的行数很可能大于非OO代码。这不是重点

试着把你的“物体”想象成可以相互交流的有形物品。此通信是一个协议(包括方法签名)。你彼此“说”的语言。让它简单明了。不要认为任何对象都有能力操纵另一个对象,而不仅仅是传递建议或请求(封装)

不要只是毫无目的地给每件事添加getter和setter。您将错过整个要点,还不如用另一种风格编写代码。保护内部状态。任何东西上的getter和setter都意味着,您将有一个普遍低效的实现。二传手和接球手是守门员。没别的了。如果它们没有意义,就把它们消灭掉。在需要的地方使用它们。永远不要让其他东西干扰你的内在状态。这会造成混乱

在编写游戏时,这些做法会失败,但不能放弃。优化你的关键循环和瓶颈。保留原始代码以供参考&作为优化代码的镜像模型。走你需要的捷径,什么都不做。优化必须始终排在最后。。。即使面对一个明显低效,但深思熟虑的设计

与我共事过的许多前Java程序员不必要地将setter和getter放在属性上(每个属性)。这就是他们所习惯的。10例中有9例没有获益,但他们坚持这种模式。影响总是可以忽略不计的(每分钟5万用户……当然,不是使用Java……但仍然如此)。在高级设计中,getter和setter的总体影响最小。较低级别,如视频编解码器或OpenGL,它是巨大的


您可以选择不经思考就采用它们,或者考虑到它们的适用性而实施它们。你会发现许多教授告诉你,你“错了”,因为你忽略了他们。记住你对课程的期望。:)

首先概括;虽然你现在希望敌人跟随航路点,但在我看来,你拥有的是一个地图的特定实例,它决定了什么东西在哪里移动

让我们将敌人称为“GameEntity”(可能是MoveableGameEntity)的实例

你应该做的是告诉地图管理相关的游戏实体,然后地图可以保留这些对象的列表,并根据需要移动它们

代码片段

interface  MoveableGameEntity
{
    void positionNotify(Position new_postition);
};

public class Barbarian implements MoveableGameEntity
{
    void positionNotify(Position new_postition)
    {
         // do something
    }
};

// during initialisation.
map.Add(new Enemy("Barbarian 1"));
map.Add(new Enemy("Barbarian 2"));

//during map processing
Position new_position = new Position();
for (MoveableGameEntityList moveable : moveable_game_entity_items)
{
   new_position = get_new_posistion(moveable);
   item.moveTo(new_position);
   moveable.positionNotify( new_position );
}
地图需要有一个方法get_new_position(移动游戏实体ge),该方法将确定新的位置,并且只能通过positionNotify方法告知敌人他们的新位置


MoveableGameEntityList是一个将游戏实体及其位置绑定在一起的对象。这样,游戏实体不包含任何位置信息,并且由另一个对象管理

有点不相关,但如果你想进入OO设计,我有2 v。好书,易于理解和掌握


我对AS3一无所知,但一位智者曾告诉我,改掉一个习惯几乎是不可能的,相反,你应该试着养成一个新习惯来取代它。是的,这就是我的目标。我只是需要一些指向正确方向的指针来养成这些好习惯。我建议你编辑你的问题标题,让它更具体。你想知道如何在OOP中使用结构,而不是关于打破习惯的一般建议。这是一个很好的建议我该怎么做我在这方面是新手。谢谢你的建议,它确实让事情变得清晰了一点。但在我的例子中,有没有更好的方法来制作way point对象,这样它就不仅仅是两个原语的持有者,或者这是一个可接受的设计?它是可接受的(在许多圆中都是正确的)。每当我使用简单坐标时,我有时只使用内置数组(使用元组的坏习惯)。如果有意义的话,你可以把智能放在你的点对象上,但我不建议你强迫它。