《C《面向?qū)ο蟪绦蛟O(shè)計》第一章.ppt》由會員分享,可在線閱讀,更多相關(guān)《C《面向?qū)ο蟪绦蛟O(shè)計》第一章.ppt(49頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第一章 程序設(shè)計方法和C++語言概述,復(fù)習(xí)幾個概念:程序,指令,語言;補碼 1.1 程序編寫過程 1.2 面向過程的程序設(shè)計 1.3 面向?qū)ο蟮某绦蛟O(shè)計 1.4 C++程序設(shè)計語言的發(fā)展 1.5 程序開發(fā)過程 1.6 簡單的C++程序,小結(jié),問題,計算機程序,指令,語言,計算機的工作是用程序來控制的 程序是指令的集合。 指令是計算機可以識別的命令。不同計算機識別的指令系列稱為計算機的指令系統(tǒng)。 語言是編寫程序的工具,概念復(fù)習(xí),,計算機語言是用來編寫_________的。 程序必須被翻譯為電信號,計算機才能夠支配和處理;編程語言(計算機語言)必須實現(xiàn)翻譯過程。 計算機語言和編譯工具屬于_____
2、____。,復(fù)習(xí)1,系統(tǒng)軟件,程序,,計算機可以存儲程序指令和數(shù)據(jù)。 數(shù)據(jù)在計算機中存放的形式為:__________。 數(shù)通過___________編碼方式轉(zhuǎn)成二進制的形式存放的。 字符通過___________編碼方式轉(zhuǎn)成二進制的形式存放的。,復(fù)習(xí)2,二進制,補碼,ASCII,,二進制數(shù)的編碼表示:補碼,計算機中的補碼表示法 負數(shù)的補碼由該數(shù)反碼的末位加 1 求得 對補碼再求補即得到原碼 補碼運算規(guī)則 符號位可作為數(shù)值參加運算 減法運算可轉(zhuǎn)換為加法運算: 加上一個負數(shù)等于加上該數(shù)的補碼 補碼運算的結(jié)果仍為補碼 運算結(jié)果溢出: 負數(shù)之和得正數(shù),或正數(shù)之和得負數(shù),信息的表示與存儲,-5 (8位
3、表示) 1000 0101 1111 1010 1111 1011,,信息的表示與存儲練習(xí),(1) 與十進制數(shù)127等值的二進制數(shù)是 A) 01111111 B) 11101111 C) 01111011 D) 10000000 (2)二進制數(shù)01100100轉(zhuǎn)換成十六進制數(shù)是【 】。 A)64 B)63 C)100 D)144 (3)有一個數(shù)值152,它與十六進制6A相等,那么該數(shù)值是【 】。 A)二進制數(shù) B)八進制數(shù) C)十進制數(shù),A,A,B,,,程序編寫過程,程序設(shè)計,用計算機解決一個實際應(yīng)用問題時的整個處理過程稱為程序設(shè)計,,,1.2 面向過程的程序設(shè)計方法,,,1.
4、2 面向過程的程序設(shè)計,基本結(jié)構(gòu) 1、順序 2、分支 3、循環(huán),,1.2 面向過程的程序設(shè)計,模塊的單入 指的是該模塊被哪些模塊所調(diào)用; 模塊的單出 指的是該模塊調(diào)用了哪些模塊。,,1.2 面向過程的程序設(shè)計,主要思想 自頂向下 逐步求精 一個計算機程序可以看成是由一系列任務(wù)組成 的,任何一項任務(wù)如果過于復(fù)雜就將其分解成一系列較小的子任務(wù),直至每一項任務(wù)都很小,很容易解決。,,1.2 面向過程的程序設(shè)計,計算每門課的平均成績,,1.2 面向過程的程序設(shè)計,不足: 1、結(jié)構(gòu)化編程將數(shù)據(jù)和過程相分離; 2、結(jié)構(gòu)化編程對代碼重用支持不夠。 可重用思想就是創(chuàng)建一些已知屬性的
5、組件,然后插入到自己的程序中。,,1.3 面向?qū)ο蟮某绦蛟O(shè)計方法,程序設(shè)計方法的發(fā)展歷程 面向?qū)ο蟮姆椒?封裝:將數(shù)據(jù)及對數(shù)據(jù)的操作方法封裝在一起,作為一個相互依存、不可分離的整體對象。 抽象:對同類型對象抽象出其共性,形成類。 消息隱藏:類通過一個簡單的外部接口,與外界發(fā)生關(guān)系。 消息傳遞:對象與對象之間通過消息進行通訊。,面向?qū)ο蟮姆椒?,對象和類,屬性 (Property) 尺寸、外形、表面、 方法 (Method) 制作、出售、 對“切”的處理、 事件 (Event) 切、,對象:一塊蛋糕,類 (Class):蛋糕類,,面向?qū)ο蟮幕靖拍? 對象,一般意義上的對象: 是現(xiàn)實世
6、界中一個實際存在的事物。 可以使有形的(比如一輛汽車),也可以是無形的(比如一項計劃)。 是構(gòu)成世界的一個獨立單位,具有: 靜態(tài)特征(屬性):可以用某種數(shù)據(jù)來描述 動態(tài)特征(操作):對象所表現(xiàn)的行為或具有的功能,面向?qū)ο蟮姆椒?,面向?qū)ο蟮幕靖拍? 類,分類人類通常的思維方法 分類所依據(jù)的原則抽象 忽略事物的非本質(zhì)特征,只注意那些與當前目標有關(guān)的本質(zhì)特征,從而找出事物的共性,把具有共同性質(zhì)的事物劃分為一類,得出一個抽象的概念。 例如,石頭、樹木、汽車、房屋等都是人們在長期的生產(chǎn)和生活實踐中抽象出的概念。,面向?qū)ο蟮姆椒?,公孫龍的“白馬非馬”,故事是春秋時的公孫龍先生說的。 城門上告示:“馬
7、匹不得入城”。公孫龍同志騎白馬而來,遭拒入。公孫龍一臉正色:“告示上寫的是馬,而我騎的是白馬,難道 馬等于 白馬嗎?” 守門士兵覺得白馬還真不是馬,于是放行。 依公孫龍先生的理論認為:如果白馬是馬,黑馬也是馬,那么豈不白馬等于黑馬,所以,不能說白馬是馬?!鞍遵R非馬”是中國哲學(xué)史上的一樁公案。 不過,若是我們從程序的角度上說,可以認為:馬在這里表示一種類型,而白馬,黑馬它們的類型都是馬。 白馬,黑馬具有相同的“數(shù)據(jù)類型”,但它們都相對獨立的個體。從這點說,別說有白黑之分,就算同樣是白馬,這一匹和哪一匹白馬,也是相對獨立的個體。 在程序中,“類型”和“變量”的關(guān)系正是“馬”和“白馬”的關(guān)系。 如果
8、C或C++有這種數(shù)據(jù)類型: Horse,那么,定義一匹“白馬”的變量應(yīng)該這樣: Horse AWhiteHorse;,,面向?qū)ο蟮幕靖拍? 繼承(類型關(guān)系),繼承對于軟件復(fù)用有著重要意義,是面向?qū)ο蠹夹g(shù)能夠提高軟件開發(fā)效率的重要原因之一。 定義:特殊類的對象擁有其一般類的全部屬性與服務(wù),稱作特殊類對一般類的繼承。 例如:將輪船作為一個一般類,客輪便是一個特殊類。,面向?qū)ο蟮姆椒?,類的繼承和派生,“蛋糕類”派生“生日蛋糕類”,“蛋糕類”是“生日蛋糕類”的基類,“生日蛋糕類”是“蛋糕類”的派生類 “生日蛋糕類”繼承“蛋糕類”,屬性: 賀詞、 方法 裝飾、,,面向?qū)ο蟮幕靖拍疃鄳B(tài)性,多態(tài)
9、是指在一般類中定義的屬性或行為,被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個屬性或行為在一般類及其各個特殊類中具有不同的語義。 例如: 數(shù)的加法 -實數(shù)的加法 -復(fù)數(shù)的加法,面向?qū)ο蟮姆椒?,程序設(shè)計方法的發(fā)展歷程 面向?qū)ο蟮姆椒?優(yōu)點: 程序模塊間的關(guān)系更為簡單,程序模塊的獨立性、數(shù)據(jù)的安全性就有了良好的保障。 通過繼承與多態(tài)性,可以大大提高程序的可重用性,使得軟件的開發(fā)和維護都更為方便。,面向?qū)ο蟮姆椒?,面向過程與面向?qū)ο蟪绦蛟O(shè)計,,是一種數(shù)學(xué)思維或計算機思維方法,與人們認識世界的方法不同 以不穩(wěn)定的、多變的“過程”和“操作” 為中心來構(gòu)造系統(tǒng) 可
10、重用性較差,是建立在認識方法學(xué)基礎(chǔ)上的一項技術(shù)科學(xué),比較自然地模擬了人類認識客觀世界的方式; 以相對穩(wěn)定的“對象”和“數(shù)據(jù)結(jié)構(gòu)”為中心來構(gòu)造系統(tǒng) 可重用性較好,面向過程程序設(shè)計,面向?qū)ο蟪绦蛟O(shè)計,,練習(xí)設(shè)計方法,第一步:分析、歸納、生成對象,第二步:用對象集成系統(tǒng),籌辦宴會項目,安排制作食物、布置裝飾品、邀請賓客、,,1.4 程序設(shè)計語言的發(fā)展,機器語言 簡單的“0”和“1”的組合,硬件相關(guān)。 匯編語言 將機器語言映射為一些可以被人們讀懂的助記符,如“ADD”、“SUB”等,與硬件相關(guān)。 高級語言 接近自然語言,與硬件無關(guān)。,例子,例子,例子:考點 *,,對比舉例機器語言,問題:A=1,B=
11、2 ,求C=A+B 的值 11000111 01000101 11111100 00000001 令A(yù)=1 11000111 01000101 11111000 00000010 令B=2 10001011 01000101 11111100 將B放入eax累加器 00000011 01000101 11111000 將A與累加器中數(shù)加 10001001 01000101 11110100 將累加器中數(shù)放入C中,機器語言是針對特定型號計算機的語言,執(zhí)行效率最高,但是不便于記憶。閱讀和書寫。-----第一代語言,,對比舉例匯編語言,問題:A=1,B=2 ,求C=A+B 的值 Mov dw
12、ord ptr ebp-4 ,1 令A(yù)=1 Mov dword ptr ebp-8 ,2 令B=2 Mov eax,dword ptr ebp-4 將B放入eax累加器 Add eax, dword ptr ebp-8 將A與累加器中數(shù)加 Mov dword ptr ebp-0ch ,eax 將累加器中數(shù)放入C中,匯編語言用來編寫直接控制機器操作的低層程序,與機器密切相關(guān),移植性不好,效率高。-----第二代語言,,對比舉例高級語言,問題:A=1,B=2 ,求C=A+B 的值 A=1 B=2 C=A+B,高級語言與硬件結(jié)構(gòu)和指令系統(tǒng)無關(guān),可讀性、可維護性好,執(zhí)行速度慢,編寫訪問硬件資源
13、的系統(tǒng)軟件較難。-----第三代語言,,1.4.2 C++的誕生,C語言之父dennis Ritchie,The C Programming Language,,1.4 C++的誕生,C++之父 Bjarne stroustrup,The C ++ Programming Language,,1.4 C++的誕生,C++語言是從C語言發(fā)展演變而來。C++包含了整個C,C是建立C++的基礎(chǔ)。C++包含C的所有特征、屬性、優(yōu)缺點,并添加了面向?qū)ο蟮闹С帧?C++語言,C語言,面向?qū)ο?,1.5 程序開發(fā)過程,源程序:.cpp compile(Ctrl+F7) 目標程序:.obj Build(
14、F7) 可執(zhí)行程序:.exe,,,,本書采用VC++6.0集成開發(fā)環(huán)境,1.6 簡單的C++程序,,1.6 簡單的C++程序,/*************************************** 程序文件:ch1_1.cpp 程序功能:在屏幕上輸出hello world! 作 者:XXX 創(chuàng)建時間:XX年XX月XX日 ***************************************/ #include using namespace std; void main() cout<<“Hello World!“<
15、是程序員為讀者作的說明,用來提高程序的可讀性,C++程序在編譯過程中忽略注釋。 1、“//” 用來注釋一行說明,在“//”之后的文字直到換行都為注釋。一般用來對于程序中難懂的代碼進行說明。 2、 “/*”和“*/” 用來注釋一段說明,在“/*”和“*/”之間的部分,不管多長都為注釋。,,1.6 簡單的C++程序,所有以“#”開頭的代碼,稱為編譯預(yù)處理。 #include 每次啟動編譯器時,先運行預(yù)處理器,預(yù)處理器找到所有以“#”開頭的代碼行進行處理。include是一條預(yù)處理指令,意思是“后面跟的是一個文件名,請找到該文件并將其加入。” iostream是系統(tǒng)定義的一個“頭文
16、件”,它設(shè)置了C++的I/O相關(guān)環(huán)境,并定義了輸入輸出流對象cout和cin等。,,1.6 簡單的C++程序,using namespace std; 1998年批準的標準C++使用namespace命名空間標準。iostream是一個標準函數(shù)庫,cout是標準庫函數(shù)提供的一個對象,標準庫函數(shù)在namespace說明書中被指定為“std”。因此這句代碼的意思是使用標準命名空間std中的函數(shù)。,,1.6 簡單的C++程序,正式的程序從代碼“void main()”開始,它包含一個名為main()的函數(shù),也稱為主函數(shù)。每個C++程序有且僅有一個main()函數(shù),程序在開始運行時會自動調(diào)用mai
17、n()函數(shù)。 main()前面的void表示函數(shù)的返回值的類型,意味著程序執(zhí)行結(jié)束后無需向操作系統(tǒng)返回。 所有的函數(shù)都以左大括號開始,右大括號結(jié)束,在大括號之間的部分稱為函數(shù)體。,函數(shù):是指能實現(xiàn)一個或多個功能的代碼塊。,,1.6 簡單的C++程序,1、cout:標準輸出流對象, 2、<<: 插入操作符可以連續(xù)使用 3、endl:代表換行符 意思是使用cout將“<<”后面的內(nèi)容打印在屏幕上。 在函數(shù)體的每一句代碼后面都有一個分號“;”表示一個C++語句的結(jié)束。,cout<<” Hello World!”<
18、+程序中最小的功能單位,在一個C++程序中至少包含一個函數(shù)(main函數(shù)),也可以包含一個main函數(shù)和若干個其它函數(shù)。一個C程序中有并且僅有一個名為main的函數(shù),其它函數(shù)可由用戶取名,它們的位置任意,但執(zhí)行總從main函數(shù)開始,小結(jié):,,2. 一個函數(shù)由兩部分組成: 函數(shù)的說明部分。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、形式參數(shù)類型。void main( ) 函數(shù)體,即由最外層的一對“ ”括住的部分。 函數(shù)體一般包括定義(說明)部分和執(zhí)行語句部分。語句的數(shù)量不限,程序中由這些語句向計算機系統(tǒng)發(fā)出操作命令。,C++程序?qū)嵗f明,,3.C++語言程序有比較自由的書寫格式,一行內(nèi)
19、可以寫幾個語句,一個語句也可以分寫在多行上。 4. C++語言程序中的每一條執(zhí)行語句都必須用分號“;”結(jié)束,分號是C++語句的一部分。,C++程序?qū)嵗f明,,1.6 簡單的C++程序,操作步驟 1、新建一個工程 1) 啟動VC++ 6.0 2) 新建一個console工程 3) 編寫源程序 2、編譯和連接 編譯:compile(Ctrl+F7) 鏈接:Build(F7) 3、運行 使用的命令:Ctrl+F5,,作業(yè),1、 程序設(shè)計語言的發(fā)展過程 機器語言、匯編語言和高級語言。 2、C和C++的關(guān)系 3、如何編寫、編譯、運行一個C++程序 思考題:一圓型游泳池如圖所示,現(xiàn)在需在其周圍建
20、一圓型過道,并在其四周圍上柵欄。柵欄價格為35元/米,過道造價為20元/平方米。過道寬度為3米,游泳池半徑由鍵盤輸入。要求編程計算并輸出過道和柵欄的造價。 4、熟悉VC++ 6.0的環(huán)境。,,小結(jié),本章首先介紹了一般的程序編寫過程。該過程實際為使用計算機語言將現(xiàn)實世界的問題經(jīng)過概念世界的結(jié)構(gòu)轉(zhuǎn)換為計算機世界的程序代碼。根據(jù)認識現(xiàn)實世界問題的基本觀點,形成了兩種不同的程序設(shè)計方法:面向過程的程序設(shè)計方法和面向?qū)ο蟮某绦蛟O(shè)計方法。 面向?qū)ο蟮某绦蛟O(shè)計方法就是研究對象及對象之間的各種靜態(tài)關(guān)系和動態(tài)關(guān)系。 C++語言是一種能同時支持面向過程的程序設(shè)計方法和面向?qū)ο蟮某绦蛟O(shè)計方法的編程語言。C++語言是
21、對C語言的面向?qū)ο髷U展。使用C++語言開發(fā)程序的過程包括:編輯、編譯和鏈接。而一個簡單的C++程序由注釋、編譯預(yù)處理指令和函數(shù)組成。,常問問題,學(xué)習(xí) OO/C++ 需要多長時間? 你應(yīng)該做: 看兩類書:一類是 C++法律的指導(dǎo), 另一類是 C++道德的指導(dǎo) 你不應(yīng)該做兩件事: 不應(yīng)該去學(xué)習(xí) C 作為學(xué)習(xí) OO/C++ 的臺階 不應(yīng)該去學(xué)習(xí) Smalltalk 作為學(xué)習(xí) OO/C++ 的臺階,The Pure Object Environment and Programming Language,essential,effective,,,常問問題,學(xué)習(xí)C++ 的過程? C++的語法和應(yīng)用。使用Visual C++工具,編寫的windows console(控制臺)程序; 編寫windows sdk程序,了解windows的內(nèi)功,事件和消息的驅(qū)動機制,以及windows API 學(xué)習(xí)MFC, 深入淺出MFC。,,