Objective-C 和 C++ 的區別有哪些?為什麼蘋果會選擇前者? | 知乎問答精選

 

A-A+

Objective-C 和 C++ 的區別有哪些?為什麼蘋果會選擇前者?

2018年09月28日 知乎問答精選 暫無評論 閱讀 5 ℃ 次

這幾天閒來無事在圖書館看obj-c的書,看了兩天,給我的感覺是,這東西不就是加了面向對象的c嗎,而且類的語法還那麼古怪。這東西跟c++有什麼本質區別?為什麼蘋果會選擇obj-c而不是c++?

【池建強的回答(16票)】:

Objective-C是C的擴展,設計思路上借鑒了Smalltalk的面向對像和消息機制的思想。從我個人使用過的面向對像語言來看Objc是對消息傳遞支持的最徹底也最顯式的。其它的C++、Java、Python、Ruby都體現的不明顯,更傾向於對象的封裝和抽像。

Objc和C++基本上是兩門語言,沒有太大的關係。Objc本身是靜態語言,編譯後就是機器碼,執行效率很高,但引入了很多類似Python、Ruby的動態特性,像動態類型推斷,id,selector,block等特性,所以又非常靈活。用慣了Java或C++會覺得Objc的語法很怪,但是放空自己去學習這門語言的話,你會很快愛上它的消息式的編程風格,加上強悍的XCode,無論是寫mac應用還是ios應用,都會非常得心應手。

學習Objc不需要有c的背景,倒是學Objc的時候順手可以把C也學了或溫習下,由於Ojbc是C的超集,所以在Ojbc環境執行C程序毫無問題。

關於蘋果為什麼採用Ojbc的問題,說明一下,其實不是蘋果採用了Objc,而是喬布斯創建的Next公司的操作系統NextStep採用了Ojbc作為原生語言。NextStep是以Mach和BSD為基礎,Objc是其語言和運行庫,後來的事大家都清楚,蘋果買了NextStep,喬幫主回歸,NextStep也成了Max OS X的基礎。以後發展越來越好,Objc反而成了Apple的當家語言,現在基本上是Apple在維護Objc的發展。

還有一點不要忘記,第一台萬維網的Server就是一個叫蒂姆·伯納斯-李的大牛在NextStep上寫的,包括瀏覽器。所以,咱們得感謝Objc,要不然還不知道互聯網會發展成啥樣呢......

【馮東的回答(6票)】:

這說明你看的不過是一本粗淺介紹語言入門開發的書。如果你想知道答案,建議你先看《 Master Mind in Programming 》裡 Objective-C 和 C++ 設計者的 interview。如果裡面有不懂的概念就停下來 Google。如果你有決心,也可以先用一個月看《 The Deisng and Envoluation of C++ 》之後再看 Objective-C 設計者的 interview。

看到問題修改了,我也增加一些內容。Apple 為什麼選擇了 Objective-C 具體原因不可能準確獲知。不過 Jobs 本人似乎對 OO 有些瞭解。Apple 的程序員很厭惡 C++,曾經出過一個 Tech Notes 告訴 Mac OS X 開發者不要用 C++(後因為反對浪潮較大撤下)。這說明在 OO 方面,Apple 對 C++ 和 Objective-C 的異同應該很清楚。

我的一些分析,最近寫了一篇:techsingular.net/

【林藍東的回答(5票)】:

關於Objective-C 和 C++的區別這個文檔有很詳細的說明?chachatelier.fr/programm

兩門語言雖然同是C的超集,但是它們實現面向對像特性的方法很不一樣。個人覺得Objective-C中最重要的概念不是「對像」,而是「消息機制」,弄懂了「消息」基本就明白兩者的區別了。

【Proteas的回答(1票)】:

objective-c 只在 c 上加了薄薄的一層,而 c++ 要厚得多了。從學習成本上看呢?後者也明顯厚重。另:objective-c 的運行時是開源的,有興趣可以看看。

【題葉的回答(1票)】:

網上摘的:

開發人員為何應該使用 Mac OS X 兼 OS X 小史

by 徐宥 blog.youxu.info/2010

在內核層面,他們用了 Mach 這個為 BSD 設計的微內核。?

這個操作系統內核就是為了替換已經過時的 UNIX 內核而設計的,

其中的一個核心設計哲學就是重新設計進程間通信;?

雖然現在基於微內核的操作系統已經不是什麼潮流(為此 Linus 和 Tanenbaum 吵了一場著名的架),

但在相比較於當時 UNIX 系統的內核

(此時 Linux 還沒出現的,UNIX 內核只有 BSD, Bell, SUN 等幾套),

Mach 算是一個高的起點。在這個內核上,Next 公司的工程師開始構建面向對象的基礎系統。

這套系統在 Smalltalk 中已經有了藍圖,

因此這些工程師以 Smalltalk 為藍圖,先設計了一套基於 C 的語言,

也就是 Objective C,照搬了 Smalltalk 的經典的 [對像 消息: 參數] 語法。

(我個人不喜歡 Objective C 這個語言,

Smalltalk 是一種純面向對象的動態類型的語言,Next 公司當年完全有機會用 Smalltalk 語言的,

如果用了 Smalltalk,現在的 Cocoa 框架還會更加漂亮,代碼更加乾淨;

用 Objective C 這個自創的語言,不知道是不是因為專利的考慮,

反正 Objective C 這20年的所有創新,就是在慢慢的更像 Smalltalk 而已,

Java 和 Ruby 這幾年也是不斷的從 Smalltalk 拿東西)。

【天舟的回答(0票)】:

對於面向對象的理解,相對於C++,objective-c更加強調的是對像間的消息傳遞。關於這點你可以搜一下objective-c的前輩smalltalk的發明者Alan Kay關於這方面的闡述。至於為何蘋果選擇objective-c作為開發語言,我想是因為應用程序都是事件驅動的,這符合objective-c的特性。

【鋼盅郭子的回答(0票)】:

因為當年C++還不夠成熟

【鄭海蛟的回答(0票)】:

任何語言都是有歷史的,不是憑空產生的。oc和cpp就像c的兩個分支。

標籤:-蘋果(Apple-Inc-) -C- -Objective-C -Afio


相關資源:





給我留言