【问题标题】:Using Super Mario to help me understand Objective C, is this correct? [closed]用超级马里奥帮助我理解Objective C,这是正确的吗? [关闭]
【发布时间】:2013-01-03 06:21:42
【问题描述】:

在编程方面,我是一个完全的新手,我年轻时的大部分时间都集中在设计、CSS/HTML 上,最后决定我应该迈向编程的飞跃。

我一直在阅读 Stephen Kochan 的书“Objective C 编程”,我大约有 4 章,希望对面向对象编程的概念进行一些澄清。以游戏开发为例,或多或少的对象、类和方法的概念。

因此,如果我们以《超级马里奥兄弟》为例,忽略游戏很可能不是使用 Objective C 开发的事实。

据我了解...

所以如果“食人鱼植物”是类... 咀嚼的食人鱼植物和吐火的食人鱼植物都属于该类(食人鱼植物)吗?

然后你会将方法应用于这些对象吗,例如:

咀嚼食人鱼植物(对象): 从管道上升/下降 咬伤

火球食人鱼植物(物体): 从管道上升/下降 发射火球

...?

我完全误解了这个概念吗?

感谢您的帮助!

【问题讨论】:

  • 听起来不错。您可能还想了解子类,在 Objective-C 的情况下,还需要了解“协议”。
  • 不,游戏中的对象通常映射到 OO 编程术语中的对象,但这不是唯一的。
  • @Thilo 和消息发送、动态和反射、类扩展和类别、属性、引用计数内存管理,最重要的是 C.
  • @H2CO3:取决于他是想学习 OOP 概念还是实用的 Objective-C。对于前者,内存管理细节和低级 C 可能会分散注意力。
  • 这是 OOP 最基本的例子,只是试图理解类和对象之间的概念 - 而不是将方法应用于这些类。我还没有研究内存管理、属性等——我很快就会...我只是想确保我在类和对象之间的关系上处于正确的轨道上。他们一直以汽车为例,但这有点令人困惑。感谢您的帮助!

标签: objective-c oop object


【解决方案1】:

咀嚼和吐火的食人鱼植物是基本食人鱼植物的特化或改进;它们很可能是子类。子类可以做超类可以做的所有事情,但有一些自己的特殊技巧。

由于这两种类型都在它们的管道中上下移动,这将是基本食人鱼植物类的一种方法;这是 所有 pirahna 植物共有的行为。无论他们在弹出后做什么奇怪的事情,也可能是父类上的一个方法,它会被每个子类覆盖,如下所示:

@interface PiranhaPlant : NSObject
// Declare properties, other methods...

- (void) ascendFromPipe: (NSRect)pipeFrame;
- (void) doThingThatIDoOnceFullyExtended;
@end

@implementation

//...

- (void) ascendFromPipe: (NSRect)pipeFrame
{
    // ...drawing/animation stuff

    [self doThingThatIDoOnceFullyExtended];
    [self descendIntoPipe];
}

- (void) doThingThatIDoOnceFullyExtended
{
    return;
}

//...
@end

@interface FireSpittingPiranhaPlant : PiranhaPlant
@end

@implementation FireSpittingPiranhaPlant

- (void) doThingThatIDoOnceFullyExtended
{
     [self spitFireball];
}

@end

对于其他子类也是如此。

然后,您将实例化任何类别的单个食人鱼植物,以填充单个管道。他们每个人都会按照他们班级的定义行事——一个大嚼,一个吐火,一个完全跳出管道,四处追赶马里奥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2013-06-15
    • 2015-12-09
    • 1970-01-01
    相关资源
    最近更新 更多