我正在努力学习课程的运作方式。我想用一些共享元素创建不同的类,但据我所知,我可以通过三种不同的方式创建它:
我看到第一个是简单的,它让我能够更灵活地创建多个具有共享方法和属性的类。但是第二个在我看来更容易使用(或者至少我喜欢它),我可以从if条件中得到任何我想要的东西。第三种方法在没有任何共享方法或属性的情况下混合不同的类是可行的,如果它们共享,就不会弄糟它(或者它会吗?)
哪一个更好?
但是,关于以一种或另一种方式编写代码,似乎只是一个关于如何使用代码的策略问题。是对的吗?
发布于 2014-01-06 15:34:02
第二个示例不是一个好主意;它将导致大量重复的代码,每次您想出新类型的敌人字符时都必须编辑您的Enemy类。
在第一个和第三个之间选择更棘手,并将取决于你想要实现什么(“一个战略问题”,正如你所拥有的)。
第一个是来自Enemy的Troll和Goblin的单一继承,因为它允许您定义所有Enemy字符只有一次的所有代码,并且只定义Troll和Goblin类中的差异。您可以进一步扩展这一点,并让Enemy继承超类(或元类) Character,它为Enemy和Hero类(例如name、health、.)提供了真正的基本内容。
class Enemy(Character)
class Troll(Enemy)第三个示例可能有用,如果您想要分离字符和角色,例如,您可以
class FriendlyTroll(Troll, Friend)和
class UnfriendlyTroll(Troll, Enemy)如果这些角色意味着不同的实例属性(例如,Friend混合可能引入一个share方法)。这允许您的字符定义更加复杂,但如果您不使用额外的功能,这是一个非常复杂的想法,并可能导致棘手的多重继承问题。
TL;博士:使用第一个!如果您稍后决定确实需要将角色分离到混合类中,那么这并不是一项非常复杂的任务。
发布于 2014-01-06 15:31:16
First one:正确的go...You方式是从集体的“敌人”继承下来的。在这里,你可以有“敌人”在类下的共同事物,也可以对所有类型的敌人有单独的类,也可以很好地克服某些使某种“敌人”区别开来的方法。
Second one:不是很好的或正确的面向对象的,因为如果“巨魔”拥有一些其他“敌人”没有共享的属性,该怎么办?您可能会说,它可以放在"if“语句下,但是这使得代码更难管理,这就是为什么您使用OOP (用于管理代码,这不是所有原因之一)。
Third one:我强烈建议尽量不要使用多重继承。谷歌钻石死亡问题,你会知道为什么。一条关于多重继承的规则--继承--“如果你认为你需要多重继承,你可能是错的。如果你知道你必须使用多重继承,那么你可能是对的。”
https://stackoverflow.com/questions/20953011
复制相似问题