網路城邦
上一篇 回創作列表 下一篇   字體:
Object, class, instance, method,和Objective-C語法介紹
2011/02/15 22:44:29瀏覽12575|回應0|推薦1

先讓大家了解一些術語,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]; 

撥打電話


( 知識學習其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=paraquat&aid=4888859