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的答案是含蓄的调整你的问题。然而,我仍然认为双重派遣是一个更接近于你的问题的众所周知的概念。好吧,我想如果周二之前没有其他人回答一些名字,我会把它标记为一个可接受的答案(尽管不要依赖它,我可能真的很健忘)。我预计这是一个小的“成功”问题^^