10th week task -2 Object 的起源

Posted yitaqiotouto

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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使用动态绑定的消息结构,也就是说,在运行时才会检查对象类型。接收一条消息后,究竟应该执行何种代码,由运行期环境而非编译器来决定


以上是关于10th week task -2 Object 的起源的主要内容,如果未能解决你的问题,请参考以下文章

10th week blog

May 10th 2017 Week 19th Wednesday

March 07th, 2018 Week 10th Wednesday

September 10th 2017 Week 37th Sunday

December 10th 2016 Week 50th Saturday

February 10th, 2018 Week 6th Saturday