Learn Objective-C: Day 2

欢迎回到Objective-C介绍的第二部分。上周我们了解了C语言的一些基础知识,Objective-C是基于C语言的。这周我们将会介绍是什么使得Objective-C成为了如此了不起的语言。我们还将介绍在Objectitve-C中如何进行面向对象语言编程(OOP)和说明如何声明一个类和给类发消息。

面向对象编程

为什么有了Objective-C语言呢?为什么我们不使用底层的C语言?是因为Objective-C中使用了面向对象的概念。OOP是一种编程思想,它允许开发者在软件设计中使用对象和属性的概念,而不是直接使用变量和函数。更重要的是OOP允许数据的抽象、封装、模块化、多态和继承。关于OOP的话题可以单独成书,所以这里只是通过例子简单的介绍一下基本概念。

假设你有一辆车。你可以将它想象成一个对象。世界上还有很多车,你也许不只有一辆车。在面向对象中,我们将车这一概念抽象为一个类,而将车的实体称之为实例。当一辆新的车被制造出来,一个新的车实例被实例化,然后被赋给自己特有的属性。

还是有点不明白?另外一个例子是点心和点心切割刀。点心切割刀是类,点心是对象。

为什么我们要考虑对象?因为人的大脑会将真实世界概念化,所以将计算机开发抽象化会很方便。

类(也就是对象)由方法和属性构成。如果你有其他语言编程经验,你会发现方法和函数、熟悉和变量有很多共同点。

方法

我们已经有了一个车的实例,接下来要怎么做呢?我们可以开这辆汽车,也可以为它加油等等。这些行为只能在我们自己的汽车上进行,也就是说,我们只能影响一个实例,而不是所有的汽车。因此,一个关于汽车实例方法被称作实例方法。实例方法只针对于实例。

另外一方面,如果我们想知道汽车一共有多少种颜色,这个就是一个类方法。因为我们不用考虑类的实例而是类自身的属性。

你会越来越熟悉这些原则,让我们来看看一些语法。

在Objective-C中,我们通过消息传递来调用类方法。当我们知道油箱里有多少油时,我们向实例发送一个需要加多少油的消息。就像下面这样:

[recipient message];

括号表示我们在发送消息。第一个参数是消息接受者,第二个参数是消息本身。最后,不要忘记了加上分号。

根据上面的例子,我们可以给一辆坦克加油:

[dansCar addGas];

上面的例子说明了我们向一个汽车实例“dansCar发送了一条“addGas”的消息。这和调用方法是一致的,在其它语言中,它可能是这样的:

dansCar.addGas();

属性

假设我们的汽车类中一辆坦克的油箱,如果它含有50%的油,那么它是半满的,如果它含有100%的油,意味着它是全满的。现在,如果我们想知道油罐车里有多少油,我们不应该直接获取它的属性,而是利用一个返回属性值的函数。相同的,如果我们向坦克加油,我们不直接修改熟悉的值,而是使用一个setter函数来修改这个属性的值。这个过程被称为数据封装。

数据封装指的是将数据放在方法里,也就是需要通过方法来访问数据。如果你有开发经验但没有听说过封装,你可能会想这么做的原因。因为封装为类的开发者和类的使用者中间提供了一层保护。因为类方法是在类中操作的,它保证了数据的完整性。另外一个好处是,当开发者发布类时,类的使用者不用关心类的内部。当开发者因为效率等原因更新类内部的代码时,用户不用更改任何代码。

下面我们来介绍Objective- C是如何区分接口和实现的。

接口和实现

当你生成一个Objective-C类时,你会发现有两个文件,一个是以.m结尾的实现文件,另一个是以.h结尾的接口文件。

接口

#import 

@interface Car : NSObject {

    //This is where attributes go
    float fillLevel;

}

//This is where methods go
- (void)addGas; 
@end

首先,我们导入Cocoa.h,这是标准库。

其次,我们为Car声明了一个接口。并且声明它是继承NSObject类的。后面还会深入介绍。

再次声明了一个fillLevel变量,类型是float,用于表示百分比。

最后,声明了一个addGas方法。-表示这是一个实例方法,而不是类方法。(void)部分表示这个方法不会返回任何值。如果这个方法将会返回一个整型,可以换成(int)。我们以分号结束方法声明。

实现

#import "Car.h" 

@implementation Car

-(void) addGas {
    // code goes here to add gas 
}

@end

实现包括了向坦克家汽油的方法。我们引入了Car.h这个接口文件。在addGas的地方,还可以添加其他的方法,但今天不做过多介绍。

下次

下载我们将会更深入的介绍方法和在方法中使用变量(包括在Objective-C中使用变量的基本方法)。有些新的开发者会对生成了两个文件感到困惑。如果你有这种感觉请重新阅读上面的部分或者在下面给我留言。类会在后面的部分不断出现,它是非常重要的部分。

挑战

由于这部分的内容都是理论,没有过多的内容可以练习。我建议你可以在Apple开发者网站上注册一个个人开发者帐号。你可以浏览一下上面的例子,你不需要完全理解他们,只是看下类是如何组织的以及从文件上如何区分。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值