3.2 实例和方法

类的独特存在就是一个实例,对实例执行的操作名为方法。在某些情况下,方法可以应用于类的实例或者类本身。例如,可将洗车作为一个实例(事实上,表3-1列出的所有方法都将作为实例方法)。如果把“找出一家制造厂制造了多少款汽车”应用于这个类,那么它将是一个类方法。

假设你有两辆使用装配线制作的汽车,它们看上去是一样的:都有相同的内部设计,相同的喷漆颜色,等等。它们可能同时启动,但是由于每部汽车是由它各自的主人驾驶的,这就使它们获得了自身独一无二的特性。例如,一辆汽车可能后来有了刮痕,而另一辆汽车可能行驶了更远的距离。每个实例或对象不仅包含从制造商那里获得的有关原始特性的信息,还包含它的当前特性。这些特性可以动态改变。当驶汽车时,油箱的油渐渐耗尽,汽车越来越脏,轮胎也逐渐磨损。

对对象使用方法可以影响对象的状态。如果方法是“给汽车加油”,执行这个方法之后,汽车的油箱将会加满。这个方法影响了汽车油箱的状态。

这里的关键概念是:对象是类的独特表示,每个对象都包含一些通常对该对象来说是私有的信息(数据)。方法提供访问和改变这些数据的手段。

Objective-C采用特定的语法对类和实例应用方法:

[ClassOrInstance method];

在这条语句中,左方括号后要紧跟类的名称或者该类的实例的名称,它后面可以是一个或多个空格,空格后面是将要执行的方法。最后,使用右方括号和结束分号来终止。请求一个类或实例来执行某个操作时,就是在向它发送一条消息,消息的接收者称为接收者。因此,有另一种方式可以表示前面所描述的一般格式,如下所示:


[receiver message];


回顾上一个列表,使用这个新语法为它编写所有方法。在此之前,你需要获得一辆新车。去制造厂购买一辆,如下所示:


yourCar=[Car new];得到一辆新车


向Car类(消息的接收者)发送一条消息请求它卖给你一辆新车。得到的对象(它代表你的独特汽车)将被存储到变量yourCar中。从现在开始,可用yourCar引用你的汽车实例,就是你从制造厂买的那辆汽车。

因为你到制造厂购买了一辆新汽车,所以这个新方法可叫做制造厂方法,或者类方法。对新车执行的其余操作都将是实例方法,因为它们应用于你的新车。下面是一些可能为这辆新车编写的示例消息表达式:


[yourCar prep];准备好第一次使用

[yourCar drive];驾驶汽车

[yourCar wash];洗车

[yourCar getGas];如果需要就给汽车加油

[yourCar service];维修

[yourCar topDown];是否为一辆敞篷车

[yourCar topUp];

currentMileage=[yourCar currentOdometer];


最后一个示例显示的实例方法可返回信息—即当前的行驶里程,这通过里程表(odometer)可看出来。我们将该信息存储在程序中的currentMileage变量内。

你姐姐Sue可以对她自己的汽车实例使用相同的方法:


[suesCar drive];

[suesCar wash];

[suesCar getGas];


将同一个方法应用于不同的对象是面向对象程序设计背后的主要概念之一,稍后将学到这方面的更多内容。

你可能无需在程序中对汽车进行操作。你的对象很可能是面向计算机的对象,例如窗口、矩形、一段文本,或甚至是计算器或歌曲的播放列表。就像用于你的汽车的方法,这些方法可能看上去类似于:


[myWindow erase];清除窗口

[myRect getArea];计算矩形的面积

[UserText spellCheck];对一些文本进行拼写检查

[deskCalculator clearEntry];清除最后一次输入

[favoritePlaylist showSongs];在播放列表中显示喜欢听的歌曲

[phoneNumber dial];拨号