C++學習-入門到精通-[0]計算機和C++簡介
計算機和C++簡介
- C++學習-入門到精通-[0]計算機和C++簡介
- 一、計算機的組成
- 二、硬件和軟件
- 三、數據的層次結構
- 四、機器語言、匯編語言和高級語言
- 五、C++標準庫
- 六、面向對象技術
一、計算機的組成
計算機是由多個不同功能的邏輯單元組成的:
邏輯單元 | 功能描述 |
---|---|
輸入單元 | 從各種輸入設備獲取信息(數據和計算機程序),并將這些信息交給其他單元處理 |
輸出單元 | 取得計算機處理好的信息并將它們輸送到各種輸出設備上,以便用戶在計算機外部使用 |
內存單元 | 這是計算機用于保存信息的倉庫,可以進行快速存取但它的容量不大。它可以保存輸入設備輸入信息,在需要時可以快速獲取;也可以保存處理好的信息,直到輸出設備將它們輸出;注意,內存中保存的信息并不是永久的,它會隨著計算機的關閉而丟失 |
算術邏輯單元 | 負責加、減、乘、除等運算;還可以進行一些判斷,比如,可以比較兩個內存單元中的值是否相等,在現在的計算機中,算術邏輯單元(ALU)通常是CPU的一部分 |
中央處理器 | 負責協調和監督其他各個部分的操作;比如,CPU會告訴輸入單元何時將信息讀入內存單元 |
輔助存儲單元 | 這是計算機中長期性的、大容量的信息倉庫;輔助存儲單元中的信息是永久存儲的,計算機關閉之后仍能存在,但是要讀取保存在這上面的信息讀取效率遠不及內存單元的讀寫速度 |
二、硬件和軟件
計算機是在一系列的指令的控制下處理數據的,這此指令被稱為計算機程序,而在計算機上運行的程序叫做軟件;
一臺計算機在物理上是由各種設備共同組成的,如鍵盤、鼠標、顯示器、硬盤、內存、CPU等。這些設備總稱為硬件;
三、數據的層次結構
層次 | 描述 |
---|---|
位(Bit) | 計算機中最小的數據項,可能的數值為0或1,這樣一個數據項稱作一個位; |
字符(Character) | 二進制位是計算機可以處理的數據形式,但是人類更習慣于處理像十進制數字(0-9),字母(a-z, A-Z)和特殊字符(@,#等等)這類數據,所以將數字、字母和特殊符號稱為字符;二進制數據通過編碼可以轉換成字符; |
字段(Field) | 正如字符由位構成一樣,字段也是由字符構成的;一個字段由一組有意義的字符組成 |
記錄(Record) | 若干個字段可以組成一個記錄;比如,一個學生的記錄由他的名字、性別、年齡、學號這幾個字段組成 |
文件(File) | 一個文件能夠保存多個記錄;比如一個學生名冊文件中就保存了多個學生的記錄 |
數據庫(Database) | 一個數據庫是一個電子化的數據集合,對它的組織要便于訪問和操作 |
四、機器語言、匯編語言和高級語言
- 機器語言
一般由數字字符串組成(0和1組成的數字字符串)。計算機能夠直接明白它自己的機器語言,這是由其硬件結構決定的; - 匯編語言
使用機器語言來編寫程序,這對程序員的要求太高了,只有少數人能做到。并且,使用這種語言進行編程效率低下,所以就出現了匯編語言,這是一種使用類似英語縮寫的指令來表示基本操作的語言;同時,人們開發出了 匯編器的翻譯程序,它們可以將匯編語言轉換成機器指令;這種指令對于人而言要更易于理解,但是機器是無法理解的,所以必須經過轉換; - 高級語言
匯編語言的出現只是在一定程度上方便了人們對程序的編寫,所以為了更進一步的加快編程的速度,人們又開發出了高級語言,其中的單條語句就可以完成實質性的許多工作。高級語言使得程序員可以使用類似日常用語并包含常用數學符號形式的指令來編寫程序,進一步的降低了編程的門檻。高級語言的翻譯器叫做編譯器(compiler),它能夠將高級語言程序轉換成機器指令;
將大型高級語言程序編譯成機器指令是較為耗時的,所以人們又發明了解釋器(interpreter),它可以直接執行高級語言程序,但是這樣的執行過程比編譯后的程序的運行要慢很多。腳本語言就是使用解釋器來執行的;
提示:解釋器在網絡應用腳本編寫方面優于編譯器。待解釋的程序一下載到客戶的機器上就可以開始執行,不需要經過編譯的延遲。
五、C++標準庫
C++程序由一系列的被稱為類和函數的構件組成,你可以自己編寫構成一個c++程序的所有構件。但實際上,大多數程序員都會使用C++標準庫(C++ Standard Library)所提供的豐富而現成的類和函數。所以,要想了解“C++世界”,需要學習兩方面的內容:一是學習C++語言本身,二是學習使用C++標準庫所提供的各種類和函數。
提示:使用“構建塊”的方式來創建程序,可以避免重復工作。這就是軟件重用,也是面向對象編程的核心思想
在C++編程過程中,通常會使用下面三種構建塊:C++標準庫中的類和函數,你和你同事編寫的類和函數,第三方軟件商提供的類和函數
使用自己編寫的類和函數的優點在于你可以確切的知道它們是如何工作的,并且可以檢查C++代碼;但是缺點是保證新開發的類和函數的正確性及有效性是十分費時且代價高昂的;
六、面向對象技術
軟件開發者在編寫程序的過程中發現,相較于早期的開發方法,采用模塊化的、面向對象的設計和實現方法,可以顯著軟件開發小組的生產效率——面向對象的程序更易于理解、糾正和修改。
在這里大家可能還是不太理解什么是面向對象,舉個例子,汽車就是一個面向對象的產品;
一個從想要開車,實際上只需要知道,油門、剎車和離合器是什么、怎么使用即可,至于為什么踩油門車子就能加速,汽車內部是如何實現的,駕駛員并不需要知道。用戶只需要知道產品如何使用、它能實現什么功能即可,產品的功能是如何實現的用戶不需要了解。
成員函數和類
現在,我們從汽車的例子繼續介紹一些關鍵的面向對象編程概念。執行程序中的任務需要調用成員函數。成員函數擁有實際執行這個任務的程序語句,在面向對象編程中,它向用戶隱藏了這些語句,就如同汽車油門隱藏了實現汽車加速的復雜的內部結構。在C++中,我們會創建名為類的程序單元,類包含了執行該類需要完成任務的成員函數集合。例如一個表示學生信息的類可能包含了一個修改學生信息的成員函數、添加一個學生的成員函數,刪除一個學生的成員函數等;這些成員函數中包含了實現任務的的具體代碼,但是用戶在使用時,只需要調用這個函數就能實現對應的功能,并不需要知道這個函數的內部是如何實現的;
實例化
類的成員函數就像汽車制造使用圖紙,在使用汽車之前,需要根據圖紙先造出一個汽車才行;同樣的,在使用類提供的函數來實現目標功能之前,首先需要創建一個類的對象。這個構建對象的過程也叫實例化(instantiation)。于是一個類的對象也叫這個類的一個實例。
重用
一份汽車的圖紙可以生產許多汽車,同樣的我們也可以重用一個類來創建許多的對象。在構建一個新的類和程序時,可以重用已有的類,這可以節省時間和精力,并且重用還有助于構建一個更加可靠、有效的系統,因為被重用的類肯定是經過了大量的測試、使用及性能調試。
消息和成員函數調用
踩油門向汽車發送了要加速的消息,同樣的,我們可以向一個類的對象發送消息。每一條消息都是一個成員函數的調用,該消息告訴對象的成員函數要去執行它的任務。
屬性和數據成員
一個汽車除了可以執行對應任務之外,它還具有許多屬性,比如,汽車的重量、油箱容量、里程數、當前油箱中的油量、車漆的顏色等等;和汽車應該實現的功能一樣,這些屬性在圖紙階段就已經設計好了。每個對象都會維護它自己的屬性,比如,每輛車都知道自己當前的油量,但不知道其他車的測量;
與上面汽車類似,一個類的對象也有它的屬性,這些屬性都是這個對象的一部分;比如,一個學生對象,它有績點屬性,表示他在學校中的成績,這個屬性通常只有他自己知道;
封裝
類將屬性和成員函數封裝(encapsulate)在對象中,一個對象的屬性和成員函數都是密切相關的。對象之間可以相互通信(調用對方的成員函數),但是不允許知道其他對象是如何實現的(內部結構不可知)。
繼承
我們可以通過繼承來快速和方便的創建一個新的類,將原來的類的屬性和成員函數吸收為自己的特性,同時可以添加新的特性。
面向對象分析與設計(OOAD)
一個良好的編程習慣應該是在編寫代碼之前,需要先經歷確定項目的需求,并構想什么樣的設計可以滿足這些需求的分析過程。如果此過程是從面向對象的角度來考慮的,那么就稱為面向對象分析和設計(OOAD)。
UML(統一建模語言)
統一建模語言(Unified Modeling Language, UML)是目前使用最廣泛的、用于面向對象系統的建模圖形語言。