使用超级马里奥来帮助我理解Objective C,这是正确的吗?

Ale*_*lex 1 oop object objective-c

在编程方面,我是一个完全新手,我将大部分时间都集中在设计,CSS/HTML上,最后决定我应该跨越编程.

我一直在阅读Stephen Kochan的书"Objective C中的编程",我大约有4章,并希望对面向对象编程的概念做一些澄清.或多或少使用游戏开发作为示例的对象,类和方法的概念.

因此,如果我们使用超级马里奥兄弟作为一个例子,无视游戏很可能不是使用Objective C开发的事实.

从我的理解......

因此,如果"食人鱼植物"成为了这一类......那些食人鱼植物和喷火食人鱼植物都会成为该类(食人鱼植物)的对象吗?

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

Chraning Piranha Plant(物体):从管道叮咬上升/下降

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

...?

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

谢谢您的帮助!

Jos*_*ell 5

Chomping和Fire-spitting食人鱼植物是基本食人鱼植物的专业化或改良; 他们很可能是子类.子类可以执行超类可以执行的所有操作,但是它有一些特殊的技巧.

由于这两种类型都在管道中上下移动,这将是基础食人鱼植物类的一种方法; 这是所有 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
Run Code Online (Sandbox Code Playgroud)
@interface FireSpittingPiranhaPlant : PiranhaPlant
@end

@implementation FireSpittingPiranhaPlant

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

@end
Run Code Online (Sandbox Code Playgroud)

对于其他子类也是如此.

然后,您将实例化任何类别的食人鱼植物,以填充单个管道.他们每个人都会按照他们班级的定义行事 - 一个人选择,一个人吐火,一个人完全从管道中跳出来并追逐马里奥.