第1章_面向?qū)ο蟮某绦蛟O(shè)計及C++概述new.ppt_第1頁
第1章_面向?qū)ο蟮某绦蛟O(shè)計及C++概述new.ppt_第2頁
第1章_面向?qū)ο蟮某绦蛟O(shè)計及C++概述new.ppt_第3頁
第1章_面向?qū)ο蟮某绦蛟O(shè)計及C++概述new.ppt_第4頁
第1章_面向?qū)ο蟮某绦蛟O(shè)計及C++概述new.ppt_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、面向?qū)ο蟪绦蛟O(shè)計及C+,主講:,第1章 面向?qū)ο蟪绦蛟O(shè)計及C+概述,面向?qū)ο蟪绦蛟O(shè)計及C+,本章作業(yè),作業(yè)本:本章習(xí)題:一、二、三(1、2、5) 或: 網(wǎng)上自測,本章內(nèi)容提要,面向過程與面向?qū)ο?面向?qū)ο蟮幕靖拍罴疤卣?C+語言概述 C+程序及其開發(fā) 本章小結(jié),1.1.1 面向過程的程序設(shè)計,核心思想:功能分解 實現(xiàn)方法:自頂向下、逐步求精 優(yōu)點:直觀有條理、結(jié)構(gòu)清晰、模塊化強。 缺點: 代碼的可重用性差、模塊之間依賴性強、不利于代碼的維護和擴充。 數(shù)據(jù)結(jié)構(gòu)對整個程序公開,數(shù)據(jù)安全性差,1.1.1 面向過程的程序設(shè)計,數(shù)據(jù)與對數(shù)據(jù)處理的過程相分離,其弊端表現(xiàn)在:一旦數(shù)據(jù)結(jié)構(gòu)改變,與之相關(guān)的所

2、有操作都必須改動 ,代碼修改量大 例如:一個簡單的學(xué)生成績管理系統(tǒng)用來管理若干個學(xué)生的信息。 每個學(xué)生的信息包括學(xué)號、姓名、某門課的平時成績、期末成績、總評成績和名次, 總評成績=平時成績*0.3+期末成績*0.7。 主要操作:成績的錄入、計算、排名、輸出。,1.1.1 面向過程的程序設(shè)計,數(shù)據(jù)結(jié)構(gòu)定義一個結(jié)構(gòu)體 typedef struct studentScore char number10; /學(xué)號 char name10; /姓名 int dailyScore ; /平時成績 int finalScore; /期末成績 float generalScore; /總評成績 int pla

3、ce; /名次 SS; /結(jié)構(gòu)體變量名 C,int experiScore; /后增項實驗成績,1.1.1 面向過程的程序設(shè)計,操作數(shù)據(jù)的幾個函數(shù): void readData(SS stu ,int n); /輸入n個學(xué)生的學(xué)號、姓名、平時及期末成績 void calcuScore(SS stu ,int n); /計算n個學(xué)生的總評成績 void sortScore(SS stu ,int n); /根據(jù)總評成績排名,得出每個學(xué)生的place值 void printOut(SS stu ,int n); /按一定的格式輸出n個學(xué)生的完整信息,1.1.1 面向過程的程序設(shè)計,現(xiàn)在,需求改變了

4、: 在C語言課程中,需要增加實驗成績這一項,學(xué)生的總評成績計算方法修改為: 總評成績=平時成績*0.2+實驗成績*0.2+期末成績*0.6。 顯然,類型SS中需要增加一個數(shù)據(jù)項 int experiScore; 表示實驗成績。G 同時,所有的函數(shù)代碼都應(yīng)該作相應(yīng)地修改,1.1.1 面向過程的程序設(shè)計,面向過程的程序設(shè)計的范型是: 程序=算法+數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)與對數(shù)據(jù)操作的分離導(dǎo)致軟件維護(包括軟件的測試、調(diào)試和升級)的困難。 一種新型的程序設(shè)計方法面向?qū)ο蟮某绦蛟O(shè)計方法應(yīng)運而生,它很好地解決了以上問題。,1.1.2 面向?qū)ο蟮某绦蛟O(shè)計,核心思想:以數(shù)據(jù)為核心,將數(shù)據(jù)以及對這些數(shù)據(jù)的操作封裝為一個

5、整體 實現(xiàn)方法:以類封裝,以類的對象作為程序的基本元素,通過向?qū)ο蟀l(fā)送消息,進而由對象啟動相關(guān)的方法完成各種功能 優(yōu)點:數(shù)據(jù)安全、軟件可靠、代碼可重性可維護性強 缺點:代碼的效率有時會低,類與對象是抽象與具體的關(guān)系 類包含: 對象必然屬于某一個類,且各有一個名字(對象名),有不同的數(shù)據(jù)成員值,可以進行相同的行為。 類與對象的關(guān)系: 相當于類型和變量的關(guān)系,1.1.2 面向?qū)ο蟮某绦蛟O(shè)計,成員函數(shù):,數(shù)據(jù)成員:,-類對象的靜態(tài)特性,-類對象的動態(tài)特性,1.1.2 面向?qū)ο蟮某绦蛟O(shè)計,例如: 人類,靜態(tài)特性:,動態(tài)特性:,姓名,性別,年齡,身高,體重,身份,吃,穿,住,行,學(xué)習(xí),工作,Person

6、類,數(shù)據(jù)成員,成員函數(shù),char name20,char sex8,int age,double height,double weight,char identity,void eat();,void dress();,void reside();,void walk();,void study();,void work();,類對象名: teacher1,張虹,女,25,1.70,55.0,教師,前面成績管理的例子,將結(jié)構(gòu)體改造成一個類SS,其定義如下: class SS private: char number10; char name10; int dailyScore; int fin

7、alScore ; float generalScore; int place ;,1.1.2 面向?qū)ο蟮某绦蛟O(shè)計,public: /接口對外公開 void readData( ); void calcuScore( ); void printOut( ); ;,此時的主函數(shù)代碼為: int main( ) SS s,t; /定義SS類型的兩個學(xué)生對象,對象名為s和t s.readData( ); /向?qū)ο蟀l(fā)送消息,對象接受消息后調(diào)成員函數(shù) t.readData( ); /readData()實現(xiàn)讀入每個學(xué)生的信息 s.calcuScore( ); /對象調(diào)用calcuScore()計算總評成

8、績 t.calcuScore( ); s.printOut(); /對象調(diào)用printOut()輸出各自的信息 t.printOut(); return 0; ,1.1.2 面向?qū)ο蟮某绦蛟O(shè)計,若在類SS中增加 int experiScore; 表示實驗成績,總評成績計算方法改變,則類的成員函數(shù)代碼需做相應(yīng)地改造,但主函數(shù)的代碼不需做任何變動。,幾個結(jié)論: (1)面向?qū)ο蟮某绦蛟O(shè)計由類的定義和類的使用兩部分組成,類的使用表現(xiàn)為類對象的定義與功能調(diào)用。 (2)程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實現(xiàn)的,對象接收到消息后,啟動有關(guān)方法完成相應(yīng)的操作。 (3)向?qū)ο蟀l(fā)送消息的形式是:對象名.成員

9、函數(shù)名(實在參數(shù)表) 面向?qū)ο蟮某绦蛟O(shè)計范型為: 程序=對象/類+對象/類+,1.1.2 面向?qū)ο蟮某绦蛟O(shè)計,面向?qū)ο蟪绦蛟O(shè)計中最重要的兩個概念:類和對象 面向?qū)ο蟪绦蛟O(shè)計中最突出的特征是:封裝性、繼承性和多態(tài)性 面向?qū)ο蟮某绦蛟O(shè)計圍繞類的定義和類的使用展開的,1.1.2 面向?qū)ο蟮某绦蛟O(shè)計,返回,類是具有相同屬性和操作的一組對象的集合,它為屬于該類的全部對象提供了統(tǒng)一的抽象描述。 對象是對問題域中客觀存在事物的抽象,是類的具體的個體,也稱為類的一個實例。 類與對象是一對抽象與具體的關(guān)系 例1:教師是一個類,李老師則是教師類的一個對象。 例2:上面的SS類,主函數(shù)中定義了2個對象,對象名分別為

10、s和t。,1.2.1 類與對象,1.2.1 類與對象,類與對象的比較 設(shè)計類是為了使用類,使用類的方式是定義該類的變量對象,通過對象實現(xiàn)特定功能;對象一定屬于類,它具有什么樣的靜態(tài)屬性值、可以有哪些動態(tài)行為取決于類的設(shè)計。,每一個對象有以下幾個特征: (1)必須屬于某一個類,必須有一個區(qū)別于同類型其他對象的對象名。 (2)對象有自己的屬性值,即每個對象的數(shù)據(jù)成員有特定的值來標識該對象的靜態(tài)特性。 (3)對象有一組類所規(guī)定的操作,每一個操作決定對象的一種動態(tài)行為,通過對象名.成員函數(shù)名(實在參數(shù)表)的形式實施這種行為。,1.2.1 類與對象,封裝性是面向?qū)ο蟪绦蛟O(shè)計的第一大特征,這一特性使得面向

11、對象程序設(shè)計具有安全性和可靠性。 生活中的封裝例:MP4 對外接口:面板上的各種控制按鈕如: 電源開關(guān)、菜單選擇按鈕、調(diào)節(jié)音量按鈕等 封裝起來的:各種元器件、按下某按鈕時其內(nèi)部的元器件狀態(tài)如何改變、如何參與工作等細節(jié),1.2.2 封裝性,類中封裝的成員: private屬性的數(shù)據(jù)成員和成員函數(shù) protected屬性的數(shù)據(jù)成員和成員函數(shù) public屬性的成員函數(shù)具體實現(xiàn)代碼 類中未被封裝的成員: public屬性的數(shù)據(jù)成員 public屬性的成員函數(shù)原型 對于類中封裝的成員不可以用形如對象名.成員的形式直接訪問,這種形式只可以訪問未被封裝的成員。,1.2.2 封裝性,例如前面講過的學(xué)生類SS

12、中: 封裝的信息有 (1)所有的private數(shù)據(jù)成員:number、name、dailyScore、finalScore、generalScore、 place 。 (3)所有的public成員函數(shù)的實現(xiàn)細節(jié): void readData() void calcuScore() void printOut() 公開的接口有:以上3個成員函數(shù)的原型,1.2.2 封裝性,因此在main()函數(shù)中通過類的對象可以直接訪問類的接口成員: s. readData(); s. calcuScore(); s.printOut() ; 封裝的單位實際上是屬于某一個類的對象。因此,在封裝之前需要仔細做好數(shù)據(jù)

13、抽象和功能抽象的工作,明確類中哪些成員需要信息隱藏,哪些成員應(yīng)該對外公開。,1.2.2 封裝性,繼承性是面向?qū)ο蟪绦蛟O(shè)計的第二大特征,是面向?qū)ο蟮某绦蛟O(shè)計提高代碼重用性的重要措施 。 繼承表現(xiàn)了特殊類與一般類之間的上下分層關(guān)系,這種機制為程序員提供了一種組織、構(gòu)造和重用類的手段。 繼承使一個類(稱為基類或父類)的數(shù)據(jù)成員和成員函數(shù)能被另一個類(稱為派生類或子類)重用。,1.2.3 繼承性,派生類中成員的構(gòu)成: (1)從基類直接繼承的數(shù)據(jù)成員和成員函數(shù) (2)派生類中新增加的數(shù)據(jù)成員和成員函數(shù) (3)對基類中某些成員的改造 繼承的優(yōu)點:可以避免公共代碼的重復(fù)開發(fā),減少代碼和數(shù)據(jù)冗余。,1.2.3

14、 繼承性,類繼承關(guān)系舉例: 以上為一個多層次的類繼承關(guān)系,從繼承源上分,可以有單一繼承(如圖中大學(xué)生類對學(xué)生類的繼承)和多重繼承(如圖中在職大學(xué)生類是從大學(xué)生類和職工類多重繼承)兩種。,1.2.3 繼承性,多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計的第三大重要特征。面向?qū)ο蟪绦蛟O(shè)計的多態(tài)性指的是一種行為對應(yīng)著多種不同的實現(xiàn)。 生活中的多態(tài)性舉例: (1)發(fā)動汽車 (2)發(fā)動火車 (3)發(fā)動公民義務(wù)獻血 多態(tài)性有兩種:靜態(tài)多態(tài)性(也稱為編譯時的多態(tài)性)和動態(tài)多態(tài)性(也稱運行時的多態(tài)性)。,1.2.4 多態(tài)性,靜態(tài)多態(tài)性 :在同一個類、無繼承關(guān)系的平行類、不屬于任何類的普通函數(shù)中,同一個函數(shù)名對應(yīng)著不同的實現(xiàn)代碼。

15、通過函數(shù)重載和運算符重載實現(xiàn)靜態(tài)多態(tài)性。 動態(tài)多態(tài)性:在一般類和它的各個派生類中,同一個函數(shù)名可以對應(yīng)著不同的實現(xiàn)代碼 。需要通過繼承、虛函數(shù)、基類的指針或引用實現(xiàn)動態(tài)多態(tài)性。這些知識在第5章中將會詳細介紹。,1.2.4 多態(tài)性,多態(tài)性的意義:用同一個接口實現(xiàn)不同的操作,直接使用類來進行程序開發(fā)非常方便。 例如,為求面積,在三角形類、圓形類、正方形類、長方形類中都定義了函數(shù)getArea()。顯然,為求相應(yīng)圖形的面積,實現(xiàn)的代碼不一樣。但用戶在使用這些類的對象求面積時不必關(guān)心實現(xiàn)細節(jié),直接調(diào)用該成員函數(shù)就可以了。,1.2.4 多態(tài)性,返回,C+語言的研發(fā)始于1980年,貝爾實驗室的Bjarne

16、 Stroustrup對C語言進行改進和擴充,增加了對面向?qū)ο蟪绦蛟O(shè)計的支持。最初的成果稱為“帶類的C”,1983年正式取名為C+,在經(jīng)歷了3次修訂后,于1994年制定了ANSI C+標準的草案,以后又經(jīng)過不斷完善,成為目前的C+,C+仍在不斷地發(fā)展。C+是同時支持面向過程程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計的混合型語言,是目前應(yīng)用最為廣泛的高級程序設(shè)計語言。,1.3.1 C+語言支持面向?qū)ο蟮某绦蛟O(shè)計,面向?qū)ο蟮某绦蛟O(shè)計語言應(yīng)該具有以下幾個特點 : (1)支持對象的概念及對象所有的特點 (2)要求對象屬于類 (3)提供類的繼承機制,1.3.1 C+語言支持面向?qū)ο蟮某绦蛟O(shè)計,C+語言支持面向?qū)ο蟮木幊?/p>

17、表現(xiàn)在以下3個方面: 支持封裝性:C+語言允許使用類和對象。類是支持封裝的工具,對象是封裝的實體 。通過public定義接口其余信息封裝。 支持繼承性 :C+語言同時支持單一繼承和多重繼承 ,實現(xiàn)了抽象和共享機制。 支持多態(tài)性 :C+語言同時支持靜態(tài)多態(tài)性和動態(tài)多態(tài)性,1.3.1 C+語言支持面向?qū)ο蟮某绦蛟O(shè)計,C+語言由C語言發(fā)展而來,兼容C語言,并對C語言作了改進和擴充,既支持面向過程的程序設(shè)計,又支持面向面向的程序設(shè)計。 作為面向過程的程序設(shè)計語言,C+語言與C語言的關(guān)系可以用兩個詞概括繼承和改進。,1.3.2 C+語言與C語言的關(guān)系,C+語言繼承了C語言 : C語言是C+語言的一個子集

18、。C語言的詞法、語法和其他規(guī)則都可以用到C+語言中。 C+語言保持了C語言簡練明了的風(fēng)格,也保留了C語言面向過程的特性。 在利用C+進行面向過程的程序設(shè)計時,可以有多種方案,可以完全使用C語言風(fēng)格,但是建議使用C+語言風(fēng)格更為方便,1.3.2 C+語言與C語言的關(guān)系,C+語言改進了C語言 : C+語言雖然保留了C語言的風(fēng)格和特點,但又針對C語言的某些不足做了改進 例如:提供了更方便的輸入/輸出方法、靈活的const關(guān)鍵字的應(yīng)用、新增引用的靈活應(yīng)用、內(nèi)聯(lián)函數(shù)、函數(shù)重載、更方便的動態(tài)內(nèi)存空間空間的管理等等。 第2章將具體介紹C+在面向過程的程序設(shè)計方面對C語言的改進和擴充。,1.3.2 C+語言與

19、C語言的關(guān)系,從20世紀60年代開始,先后出現(xiàn)了Simula、Smalltalk、Object-C、Eiffel、Ada、C+和Java等面向?qū)ο蟮某绦蛟O(shè)計語言,每種語言各有其優(yōu)勢和應(yīng)用領(lǐng)域。,1.3.3 其他面向?qū)ο蟮某绦蛟O(shè)計語言,各種面向?qū)ο蟮某绦蛟O(shè)計語言簡介: Simula67語言: 20世紀60年代開發(fā),被認為是面向?qū)ο蟪绦蛟O(shè)計語言的鼻祖,它提供了對象、類、繼承的概念,提出了面向?qū)ο蟮男g(shù)語,面向?qū)ο蟪绦蛟O(shè)計的許多原始思想都來源于此語言。 Smalltalk語言:從20世紀70年代開始開發(fā),它完整體現(xiàn)了來自于Simula以及其他早期原型語言中面向?qū)ο蟮母拍?,歷經(jīng)了Smalltalk-72

20、、Smalltalk-76和Smalltalk-80幾個版本,現(xiàn)在一般用Smalltalk-80,1.3.3 其他面向?qū)ο蟮某绦蛟O(shè)計語言,各種面向?qū)ο蟮某绦蛟O(shè)計語言簡介: Object-C語言:1983年左右開發(fā),它在C語言的基礎(chǔ)上進行了擴充,通過新引入的構(gòu)造和運算符來完成類定義和消息傳遞,其語法更像Smalltalk。 Eiffel語言:從理論上講是最好的面向?qū)ο蟮某绦蛟O(shè)計語言,它除了封裝和繼承,還集成了幾個強有力的面向?qū)ο蟮奶卣?,如參?shù)化多態(tài)性、對方法實施前置條件和后置斷言等。,1.3.3 其他面向?qū)ο蟮某绦蛟O(shè)計語言,各種面向?qū)ο蟮某绦蛟O(shè)計語言簡介: Ada 語言:開發(fā)工作始于1975年,其語法嚴謹、書寫優(yōu)美、可讀性強,它提供了一系列功能來定義相關(guān)的數(shù)據(jù)類型(type)、對象(object)和操作(operation)的程序包(package),一度被美國國防部強制指定為軍用武器系統(tǒng)的唯一開發(fā)語言。 Java 語言:由SUN公司在20世紀90年代初開發(fā)的一種面向?qū)ο蟮某绦蛟O(shè)計語言,其優(yōu)點是簡單、面向?qū)ο?、不依賴于硬件結(jié)構(gòu)、可移植性強、安全性高、能最大限度地利用網(wǎng)絡(luò),因此被廣泛用于網(wǎng)絡(luò)編程。,1.3.3 其他面

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論