1. 程式人生 > >【C++學習記錄1】學習C++的意義

【C++學習記錄1】學習C++的意義

UINX誕生之初使用匯編語言編寫的。隨著UINX的發展,組合語言成為了其發展的掣肘。如何提高UINX的開發效率呢?

在1971年,K&D來發出C語言,由解釋型語言(B語言)變成編譯型語言。

C語言天生就是為了開發作業系統而存在的,其目標是高效,最終程式執行效率高。但是起初是用來編寫Uinx系統,是在實踐過程中逐漸完善起來的,使其沒有深思熟慮的設計過程,其次是殘留過多低階語言的特徵。 

面向過程程式設計:資料結構+演算法(先分析問題,將大問題分解成若干個小問題,解決小問題大問題便隨之解決)。主要解決科學計算問題,使用者需求簡單而固定。

特點:

  1. 分析解決問題所需要的步驟
  2. 利用函式實現各個步驟
  3. 依次呼叫函式解決問題

問題:

  1. 軟體可重用性差
  2. 軟體可維護性差(BUG可能會越改越多)

面向物件程式設計:由現實世界建立軟體模型。將現實中的事物直接對映到程式中,可直接滿足使用者需求。

特點:

  1. 直接分析使用者需求中涉及的各個實體。
  2. 在程式碼中描述現實世界中的實體。
  3. 在程式碼中關聯各個實體協同工作解決問題。

優勢:

  1. 構建的軟體能夠適應使用者需求的不斷變化。
  2. 直接利用面向過程方法的優勢避開其劣勢。

在面向過程方法論暴露越來越多缺陷的時候,業界開始考慮在工程專案中引入面向物件的設計方法,第一個需要解決的問題是高效的面向物件的程式語言,並且能夠相容已經存在的程式碼。(C++和Objective-C)

  1. Java是半編譯型語言,效率比起C/C++低很多,但其取得最大成功。開發效率高,執行效率低。
  2. C#語言和執行機理和Java一樣,優缺點差不多(微軟公司)。
  3. D語言兩者都高。
  4. JavaScript/ActionScript是指令碼語言。

以上四種介紹都相當於C++的衍生版。

為什麼要學習多種語言?

現在軟體產品架構圖:

作業系統抽象層(可有可無,但是作為軟體產品移植性好的一定需要):把作業系統提供的介面、函式做一層封裝。好處是:需要移植到新的作業系統上時,只需要更改作業系統層面。

現代軟體產品的特性:

1)系統一般是由多種語言寫成的;

2)系統架構的目標是擁抱使用者需求的變化;

3)系統擁有較好的移植性;

4)系統能夠方便的部署和更新。

注意:

1. 作業系統的修改和驅動程式的開發在現代軟體產品中佔據的比重越來越小。

2. 對於一個開發者,能夠勝任系統中任意一個模組的開發是其核心價值的體現。

3. 對於一個架構師而言,掌握各種語言的優勢併合理運用到系統中,由此簡化系統的開發,是其核心價值的體現。