1. 程式人生 > >10th week task -2 Object 的起源

10th week task -2 Object 的起源

Objective-C與C++、Java等面嚮物件語言類似,不過很多方面有所差別。若是用過另一種面嚮物件語言,那麼就能理解Objective-C所用的許多正規化與模版了。然而語法上也許會顯得陌生,因為該語言使用“訊息結構”(messaging structure)而非“函式呼叫”(function calling)。Objective-C語言由Smalltalk演化而來,後者是訊息型語言的鼻祖。訊息與函式呼叫之間的區別看上去就像這樣。

 //Messaging (Objective-C)

  Object *obj = [Object new];

  [obj performWith:parameter1 and:parameter2];

  //Function calling (C++)

  Object *obj = new Object;

  obj->perfrom(parameter1, parameter2);

關鍵區別在於:使用訊息結構的語言,其執行時所應執行的程式碼由執行環境來決定;而使用函式呼叫的語言,則由編譯器決定。如果範例程式碼中呼叫的函式是多型的,那麼在執行時就要按照“虛方法表”(virtual table)(PS:virtual method table是程式語言為實現“動態派發”(dynamic dispatch)或“執行時方法繫結(runtime method binding)而採用的一種機制”) 來查出到底應該執行哪個函式實現。而採用訊息結構的語言,不論是否多型,總是在執行時才會去查詢所要執行的方法。實際上,編譯器甚至不關心接收訊息的物件是何種型別。


 Objective-C為C語言添加了面向物件特性,是其超集。Objective-C使用動態繫結的訊息結構,也就是說,在執行時才會檢查物件型別。接收一條訊息後,究竟應該執行何種程式碼,由執行期環境而非編譯器來決定