先讓大家了解一些術語,Object, Class, Instance, Method分別代表什麼和意義。
Object 是什麼?
Object就是一個實體,物體,物件,而物件導向程式設計就是對這個物體做一些事情。
C語言,是一種程序的程式言,要思考它做事情的先後順序,而物件導向並不是這樣。
Programming in Objective-C 2.0這本書的第三章,以車子做為例子來說明這些術語之間的關係,我稍為修改了一點地方,好讓大家能更易了解。
假設你有一台車,它是一個實體,這台車在某個工廠生產,也許是底特律或在日本或其他的地方,你的車子有個可以識別的獨特數字(車牌)等等的資料。
用物件導向Objective-C的說法,你的車子(一個object)是個車子類別(class)的 實體(instance)。
用我個人的理解來說,假如車子是喜美1.6款式的車,那喜美1.6就是這台車的class。Class你可以把它當作是一個款式、資料、設計、印象來看。喜美1.6它並不是一個實際的車,只是一個代稱,它只是代表這種車的資訊,這種車配有1600cc的引擊、五人座位、置物箱等等的各種配備,可以看成是你的車的設計或定義。
而你的車,則是一個照著喜美1.6的設計圖中生產出來的實體(instance)。
你的車子可能是銀色外表、有個黑色的內裝、可替換的天窗等等,就些車子實際的內容及狀態,可以看成是各種的變數,這些變數就是實體變數(instance variables)。又你想到對你的車子做些什麼動作,如駕駛、加油、清洗、保養等等,這些你會對車子做的動作,稱為方法(Methods)。下表是對你的車子的各種動作,而這些動作,別人也可以對他的車子這樣做。
對車子要做的事情 Object 對它做什麼事? 你的車 駕駛它 加油 保養 清洗 上臘
Instances Methods and Class Methods
車子髒了,你會想要清洗它;沒汽油了,你會去加油;也許你會打開冷氣、關上窗戶等等各種改變車子現實狀態(這些狀態都是instance valuables)的動作,就稱為實體方法(instance methods)。
而查找出喜美1.6的資訊、買一台喜美1.6這種做用在類別(如對喜美1.6這個class )上面的方法稱為類別方法(class methods)。
假設你有兩台出自同產線、同款式的車,同樣的顔色、內裝等等,一開始它們也許是一樣的,但是不久後一台車也許出現了刮痕,另一台車的里程也許遠一點。每台車的 instance 不只是出廠時的設定,而且也有自已的特性,這些特性會動態的改變,如當你駕車的時候,汽油越來越少、里程越來越高、輪胎磨耗越來越多等等。
在這裡有個重要的觀念,就是object是class的各別的表現,而每個object都含有一些各別資訊(data,這些data就是instance valuables),而 methods 提供了可以存取該種data的動作。
Objective-C 語法
在Objective-C程式語言中,可以用特別的語法操作 mathods 對 class 或 instance 做一些事情:
[ Class method];
或者
[ Instance method];
在這語法中,左中括號緊接著 class 名稱或是 instance of class 的名稱, 然後空一個 space,再接上一個你要實行的 method,再加上右中括號,最後再加上一個分號,這個句子就完成了。另一種說法是當你想要某個 class 或 instance 表現出某個動作,可以說你送一個 message 給 class 或 instance,而接收message者則稱為 receiver。所以上二句語法可以看成是這樣:
[ receiver message];
[接收者 訊息];
回到Objective-C的語法上,當你要要一台新車時,到工廠去取得它,語法如:
yourCar = [ Car new];
這樣你送了一個 message 給 Car class (訊息的接收者),命令它給你一台新車。這個新車資料存入了變數 yourCar 中。現在,新車可以被你用來做任何事情了。
因為你從工廠取得的一台新車,這個 方法 new 被稱為為工廠 或 class 方法。其他要在這台新車上面要做的事情則稱為 instance methods,如這些例子:
[yourCar prep];
[yourCar drive];
[yourCar getGas];
[yourCar service];
[yourCar topDown];
[yourCar topUp];
currentMileage = [suesCar currentOdometer];
最後一行是從Sue的車子讀取里程表上面的值存到變數currentMileage中。你的姊姊Sue也有一台車,也可以用同樣的methods來操作她的車:
[suesCar drive];
[suesCar wash];
[suesCar getGas];
用同樣的 methods 去操作不同的種件是物件導向程式設計的重要觀念,以後我們會學到很多。
在實際的程式設計時,你的Object會像是電腦關連的東西,像是 視窗、長方型、文字塊,也計是個計算機(calculator)或是歌曲列表,而這些的語法就像操作車子的 methods 一樣,像是:
[myWindow erase];
清空視窗
[myRect getArea];
計算長方型面積
[userText spellCheck];
對某字詞做拼字檢查
[deskCalculator clearEntry];
清除上次輸入的值
[favoritePlaylist showSongs];
列出喜好的歌曲列表
[phoneNumber dial];
撥打電話
限會員,要發表迴響,請先登入