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

Oop 各地办案理念

Oop 各地办案理念,oop,conceptual,Oop,Conceptual,我对面向对象编程中不同概念的命名有一个问题。 我不想用一般的方法来解释,让我用两个不同概念的例子来说明。 我认为一个很好的方式来说明这是如何处理游戏中的伤害免疫。让我们来谈谈火灾,它会破坏在其中行走的实体。例如,假设有灵魂对火免疫,所以他们在那里行走时不会受到伤害。 有两种方法可以处理这种示例情况(实际上有三种,但有一种不是很“有用”。我将在最后说明它是什么) 首先,实体类包含一个名为ISimmunitoFire的布尔方法/属性,Fire类中负责处理破坏过程的方法正在检查该方法。如果此布尔值

我对面向对象编程中不同概念的命名有一个问题。
我不想用一般的方法来解释,让我用两个不同概念的例子来说明。


我认为一个很好的方式来说明这是如何处理游戏中的伤害免疫。让我们来谈谈火灾,它会破坏在其中行走的实体。例如,假设有灵魂对火免疫,所以他们在那里行走时不会受到伤害。

有两种方法可以处理这种示例情况(实际上有三种,但有一种不是很“有用”。我将在最后说明它是什么)

首先,实体类包含一个名为ISimmunitoFire的布尔方法/属性,Fire类中负责处理破坏过程的方法正在检查该方法。如果此布尔值为true,只需返回方法,如果不是,则在实体类中调用方法damageBy(amount,source)

其次,火灾内部的损坏处理方法只调用damageBy(数量、来源)。所有关于免疫性的事情都是在实体类的方法的单独实现中处理的。这更像是将免疫处理的实际重复工作委托给负责的职业,同时给予他们更精确的控制(例如,某些实体在被击中一次后可以在5秒内免疫火焰伤害,或者玩家可以穿戴火焰免疫盔甲,等等)

我希望我能充分说明这一点。这两个不同的概念有名字吗,或者说它们太“边缘化”了以至于没有名字



提到的第三个概念是对损坏处理方法中的对象(例如Java中的
instanceof
)进行强制检查,以确定它们的类,从而决定是否应该处理损坏。这当然是一种简单的方法,它只会破坏任何动态方面和模块化。但是如果有人有这个名字,我当然会接受。在此之前,我将继续称之为
BFSJ-code
,是
暴力静态混杂代码的缩写损坏比(数量,来源)
消息的对象在
源的所有可能值之间进行两次切换,您可以通过让
火灾
发送消息
火灾损坏来消除这两个位置的条件逻辑(amount)
取而代之。这样,损坏源就不必检查对象是否免疫,并且对象将知道如何使用其特定于源的方法。

感谢您的回答。我明白您的观点,并通过在父类中组合预定义的方法(例如
damageBy
)自愿为子类实现方法(如
firedmage
;父类可以立即将其“重定向”到
damageBy
,因此只有与这种类型的损坏相关的子类才必须自己实现),这将是不同的、解决问题的好方法(唯一的问题是,其他人创建不改变现有代码的mod/插件时需要变通方法)。然而,这并不是问题的全部意图。我想尝试为我脑海中的概念找到名称,如果它们存在的话。但当然,引入新概念也很有趣,就像展示概念的利弊一样。@Adowrath,我知道。这就是为什么我说may的答案是含蓄的调整你的问题。然而,我仍然认为双重派遣是一个更接近于你的问题的众所周知的概念。好吧,我想如果周二之前没有其他人回答一些名字,我会把它标记为一个可接受的答案(尽管不要依赖它,我可能真的很健忘)。我预计这是一个小的“成功”问题^^