

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、《面向?qū)ο蟮某绦蛟O(shè)計》,任課教師:朱小龍 聯(lián)系方式:lonxz@126.comQQ:296189288 實驗時間:星期五上午第一大節(jié) (4-12雙周) 實驗地點:210 參考書目:《C++面向?qū)ο蟪绦蛟O(shè)計教程習(xí)題解答與上機(jī)教程》陳維興主編 清華大學(xué)出版社,面向?qū)ο?面向?qū)ο?object-oriented , OO)是當(dāng)前計算機(jī)界關(guān)心的重點,它是90年代軟件開發(fā)方法的
2、主流。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā),擴(kuò)展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。,起初,“面向?qū)ο蟆笔菍V冈诔绦蛟O(shè)計中采用封裝、繼承、抽象等設(shè)計方法,軟件設(shè)計開發(fā),,Problem Space,Business Process,Computer System,,Descriptions of problem (Human: 需求分析),Na
3、tural Language,Descriptions of solution (Human: 程序設(shè)計),Programming Language,Execution of program,Solution Space,A Gap between languages,傳統(tǒng)的面向過程程序設(shè)計,使用C語言 設(shè)計一個銀行帳戶管理系統(tǒng):程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法,面向過程程序設(shè)計,過程與數(shù)據(jù)分離.分析與實施之間需要概念轉(zhuǎn)換.設(shè)
4、計模型與實現(xiàn)之間距離較遠(yuǎn).過程難于重用程序擴(kuò)展維護(hù)難度大.,第1章 面向?qū)ο蟪绦蛟O(shè)計概述,本章的重點:面向?qū)ο蟪绦蛟O(shè)計的概念面向?qū)ο蟪绦蛟O(shè)計的重要特性本章的難點:繼承的理解多態(tài)性的理解重載的理解,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計,面向?qū)ο蟪绦蛟O(shè)計 Object-Oriented Programming 是一種新的程序設(shè)計范型(paradigm)20世紀(jì)90年代程序設(shè)計的主流技術(shù),,,1.1 什么是面向
5、對象程序設(shè)計1.1.1 一種新的程序設(shè)計范型,程序設(shè)計范型傳統(tǒng)的面向過程程序設(shè)計范型程序= 過程 + 調(diào)用面向過程性語言,如:C、Pascal、Fortran、Ada等,設(shè)計程序的規(guī)范、模型和風(fēng)格 它是一類程序設(shè)計語言的基礎(chǔ),1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.1 一種新的程序設(shè)計范型,其他范型:函數(shù)式(LISP)模塊程序(Modula)邏輯式(PROLOG)進(jìn)程式、類型系統(tǒng)、事件、數(shù)據(jù)流等面向?qū)ο蟪绦蛟O(shè)計范型程
6、序= 對象 + 消息,面向?qū)ο蟪绦蛑饕Y(jié)構(gòu)特點,(1)程序一般由類的定義和類的使用兩部分組成;(2)程序中的一切操作都是通過向?qū)ο蟀l(fā)送消息來實現(xiàn)的,對象接收到消息后,啟動有關(guān)方法完成相應(yīng)的操作。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,表中各對象都是現(xiàn)實世界中一個客觀實體,其特性是:每一個對象均有一個名字;用屬性(或稱狀態(tài))描述對象的某些特征;通過一組操作來描述對象的各種行為。,對象實例,觀察WI
7、NDOWS下窗口的命令按鈕:每個命令按鈕都有一個名字,如:“確定”、“取消”;每個按鈕都有一些屬性,如:“長、高、顏色等”;對每個按鈕均可實現(xiàn)一些操作,如:“改變焦點、單擊、雙擊、按回車鍵等”,,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,1.對象Object現(xiàn)實世界中的一個實體,其特性是:(1)每一個對象必須有一個名字區(qū)別于其它對象;(2)用屬性(或叫狀態(tài))來描述它的某些特征:(3)有一組操作
8、,每組操作決定對象的一種行為。(4)對象行為可分兩類:作用自身;作用其他對象,在面向?qū)ο蟪绦蛟O(shè)計中,對象是描述其屬性的數(shù)據(jù)以及對這些數(shù)據(jù)施加的一組操作封裝在一起構(gòu)成的統(tǒng)一體。課堂討論: 列舉日常生活中的一些對象,說說它們的屬性和行為。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,,數(shù)據(jù),操作代碼,對象,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,2. 類 Class“類”
9、是對一組具有共同的屬性特征和行為特征的對象的抽象。類和對象之間的關(guān)系是抽象相具體的關(guān)系。類是對多個對象進(jìn)行綜合抽象的結(jié)果。又是類的個體實物,一個對象是類的一個實例。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,在面向?qū)ο蟪绦蛟O(shè)計中,類是具有相同的數(shù)據(jù)和相同的操作(函數(shù))的一組對象的集合數(shù)據(jù)成員成員函數(shù),類,對象,先聲明類,由類生成其對象,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概
10、念,3. 消息與方法現(xiàn)實生活中的對象不是孤立存在的實體,它們存在著各種各樣的聯(lián)系。在面向?qū)ο蟪绦蛟O(shè)計中,對象之間也需要聯(lián)系,稱為對象的交互。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,3. 消息與方法面向?qū)ο蟪绦蛟O(shè)計技術(shù)必須提供一種機(jī)制,允許一個對象與另一個對象的交互。這種機(jī)制叫消息傳遞。一個對象向另一個對象發(fā)出的請求稱為“消息”,消息具有三個性質(zhì)(1)同一個對象可以接收不同形式的多個消息,做
11、出不同的響應(yīng);(2)相同形式的消息可以傳遞給不同的對象,所做出的響應(yīng)可以是不同的:(3)消息的發(fā)送可以不考慮具體的接受者,對象可以響應(yīng)消息,也可以不響應(yīng)。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.2 面向?qū)ο蟪绦蛟O(shè)計的基本概念,對象所能實現(xiàn)的行為(操作),在程序設(shè)計方法中稱為方法,通過調(diào)用相應(yīng)的函數(shù)來實現(xiàn)。方法包括:界面 和 方法體 消息和方法的關(guān)系:對象
12、根據(jù)接受到的消息,調(diào)用相應(yīng)的方法;反過來,有了方法,對象才能響應(yīng)相應(yīng)的消息。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,1. 抽象 2. 封裝3. 繼承4. 多態(tài),1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,1. 抽象將有關(guān)事物的共性歸納、集中的過程。通過特定的實例(對象)抽取共同性質(zhì)后形成概念的過程。數(shù)據(jù)抽象代碼抽象(行為抽象),1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1
13、.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,“學(xué)生”對象,先對一些學(xué)生實例進(jìn)行分析,確定他們的共同特性或主要特性(姓名、性別、年齡、專業(yè)等),忽略不同點或次要的引不起興趣的那些特性(長相差異、性格差異等)。根據(jù)程序需要,抽象出學(xué)生管理中的對象共同的行為,如:數(shù)據(jù)錄入、修改、輸出等。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,2、封裝把某個事物包裹起來,使外界不知道該事物的具體內(nèi)容。在面向?qū)ο蟪绦蛟O(shè)計中,封裝
14、是指把數(shù)據(jù)和實現(xiàn)操作的代碼集中起來放在對象內(nèi)部,并盡可能隱蔽對象的內(nèi)部細(xì)節(jié)。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,封裝實例 洗衣機(jī)對象,,,接口1,,接口2,,接口3,操作代碼1,操作代碼2,操作代碼3,數(shù)據(jù),1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,封裝具有兩方面含義:將有關(guān)數(shù)據(jù)和操作代碼封裝在一個對象中,各個對象相對獨立、互不
15、干擾;對象中某些數(shù)據(jù)和操作代碼對外隱蔽,即隱蔽其內(nèi)部細(xì)節(jié),只留下少量接口,以便與外界聯(lián)系,接受外界消息。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,3、繼承以面向?qū)ο蟪绦蛟O(shè)計的觀點來看.繼承所表達(dá)的是對象類之間相關(guān)的關(guān)系。這種關(guān)系使得某類對象可以繼承另外一類對象的特征和能力。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,若類之間具有繼承關(guān)系,則它們之間具有下列幾個特性:
16、(1)類間具有共享特征(包括數(shù)據(jù)和程序代碼的共享) (2)類間具有差別或新增部分(包括非共享的數(shù)據(jù)和程序代碼) (3)類間具有層次結(jié)構(gòu)。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,假設(shè)有兩個類A和B,若類B繼承類A,則屬于類B中的對象具有類A的一切特征(包括數(shù)據(jù)同性和操作),這時,我們稱被繼承類A為基類或父類或超類;而稱繼承類B為類A的派生類或子類。同時,我們還可以說,類B是從類A中派生出來的。,1.
17、1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,A,B,,base,derived,如果類B從類A派生出來.而類C又是從類B派生出來的,就構(gòu)成了類的層次。這樣,我們又有了直接基類和間接基類的概念。類A是類B的直接基類,是類C的間接基類。類C不但繼承它的直接基類的所有特性,還繼承它的所有間接基類的特征。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,A,B,,base,derived,C,deri
18、ved,,如果類B是類A的派生類,那么,在構(gòu)造類B的時候.我們不必重新描述A的所有特征,只需讓它繼承類A的特征,然后描述與基類A不同的那些特性。也就是說,類B的特征由繼承來的和新添加的兩部分特征構(gòu)成。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,面向?qū)ο蟪绦蛟O(shè)計為什么要提供繼承機(jī)制?也就是說,繼承的作用是什么? 其一.避免公用代碼的重復(fù)開發(fā),減少代碼和數(shù)據(jù)冗余; 其二.通過增強(qiáng)一致性來減少模塊間的接口和界
19、面。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,繼承分類繼承源上分,繼承分為單繼承和多繼承。 1、單繼承是指每個派生類只直接繼承了一個基類的特征。動物鏈就是一個單繼承的實例。 2、多繼承是指多個基類派生出一個派生類的繼承關(guān)系,多繼承的派生類直接繼承了不止一個基類的特征。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,4、多態(tài)面向?qū)ο蟮亩鄳B(tài)性是指不同的對象在接收到相同
20、的消息時產(chǎn)生的多種不同的行為方式C++語言支持兩種多態(tài)性,即編譯時的多態(tài)態(tài)性和運行時的多態(tài)性。編譯時的多態(tài)性是通過重載來實現(xiàn)的,運行時的多態(tài)性多態(tài)性是通過虛函數(shù)來實現(xiàn)的。,1.1 什么是面向?qū)ο蟪绦蛟O(shè)計1.1.3 面向?qū)ο蟪绦蛟O(shè)計的基本特征,1.2 為什么要使用面向?qū)ο蟪绦蛟O(shè)計,1.2.1 傳統(tǒng)程序設(shè)計方法的局限性 (1)傳統(tǒng)程序設(shè)計開發(fā)軟件的生產(chǎn)效率低下 (2)傳統(tǒng)程序設(shè)計難以應(yīng)付日益龐大的信息量和多樣的信息類型 (3)傳
21、統(tǒng)的程序設(shè)計難以適應(yīng)各種新環(huán)境,1.2.2 面向?qū)ο蟪绦蛟O(shè)計的主要優(yōu)點,(1) 可提高程序的重用性 (2) 可控制程序的復(fù)雜性 (3) 可改善程序的可維護(hù)性(4) 能夠更好地支持大型程序設(shè)計 (5) 增強(qiáng)了計算機(jī)處理信息的范圍 (6) 能很好地適應(yīng)新的硬件環(huán)境,1.3 面向?qū)ο蟪绦蛟O(shè)計的語言,1.3.1 面向?qū)ο蟪绦蛟O(shè)計語言的發(fā)展概況,Smalltalk,20世紀(jì)70年代,Eiffel,SELF,C++,純面向?qū)ο?/p>
22、,混合型,Objective-C,Object Pascal,1.3.2 幾種典型的面向?qū)ο蟪绦蛟O(shè)計語言,1. Smalltalk語言2. Simula語言3. C++語言 4. Java語言5. C# 語言,第一代語言的顯著特征是對數(shù)學(xué)表達(dá)式有很強(qiáng)的運算處理能力,其代表是50年代開發(fā)的FORTRAN語言和60年代開發(fā)的Algol60。FORTRAN是第一個具有劃時代意義的程序設(shè)計語言,許多重要的程序設(shè)計語言
23、概念,如變量、數(shù)組、控制結(jié)構(gòu)等被引入到程序設(shè)計語言中。 在Algol60中人們提出了塊結(jié)構(gòu)的概念,塊與塊之間對變量實施隔離,即在一個塊中的變量可以與其它塊中的變量同名而不產(chǎn)生混淆,這是程序設(shè)計語言中第一次嘗試為數(shù)據(jù)提供保護(hù)和封裝。,程序設(shè)計語言的歷史演變介紹,第二代語言的重點是如何有效地表達(dá)算法,其代表是Pascal和c。Pascal是第一個提出結(jié)構(gòu)化程序設(shè)計的語言,但由于不適合推廣到實用領(lǐng)域而成為比較理想的教學(xué)語言。70年代開發(fā)
24、的c語言提供了豐富的數(shù)據(jù)結(jié)構(gòu)和運算符,具有結(jié)構(gòu)化的控制語句,用函數(shù)作為程序模塊以實現(xiàn)程序的模塊化,是面向過程程序設(shè)計的理想語言。,程序設(shè)計語言的歷史演變介紹,第三代語言是引入了抽象數(shù)據(jù)類型的程序設(shè)計語言,例如AdaAda語言包含一些常見的程序控制流,并具有定義新的類型、函數(shù)和子例程的能力。Ada被認(rèn)為是基于對象的語言,因為它雖然支持抽象數(shù)據(jù)類型、函數(shù)和運算符重載以及多態(tài)性等面向?qū)ο蟮臋C(jī)制。 但不支持繼承。Ada語言中具有面向?qū)ο蟮臉?gòu)
25、造,程序設(shè)計語言的歷史演變介紹,第四代語言就是面向?qū)ο蟪绦蛟O(shè)計的語言了。這類語言包括:Smalltalk、 Object-C、Eiffel以及C++等。,程序設(shè)計語言的歷史演變介紹,提到面向?qū)ο蟪绦蛟O(shè)計語言.必須提到60年代開發(fā)的Simula 67,因為它被公認(rèn)為是面向?qū)ο笳Z言的鼻祖。它提供丁對象、類,以及繼承的概念,奠定了面向?qū)ο笳Z言的基礎(chǔ).并提出了面向?qū)ο蟮男g(shù)語。它的主要用途是進(jìn)行仿真建模。 在70年代和80
26、年代這一時期,來自于Simula和其它早期的原型語言中的面向?qū)ο蟮母拍钤赟malltalk語言中得到了完整的體現(xiàn)。Smalltalk是當(dāng)今最有影響的面向?qū)ο笳Z言之一。Smalltalk語言包括了Simu1a的面向?qū)ο蟮拇鳎鐚ο蟆㈩?、繼承等,而且數(shù)據(jù)封裝更嚴(yán)格。Smalltalk從70年代開始開發(fā),經(jīng)歷了smalltalk—72、Smalltalk—76和smalltalk 80幾個版本,現(xiàn)在我們一般用Smalltalk 80。,Ob
27、ject-C是在1983年前后開發(fā)的.它是對C進(jìn)行擴(kuò)充以后形成的面向?qū)ο蟮恼Z言,但它的語法更像Smalltalk。0bject-C并不像C++那樣通過擴(kuò)充已有的c語言的語法來提供面向?qū)ο蟮闹С?,而是完全依賴于新引入的?gòu)造和運算符來完成類定義和消息,Eiffel是除C++之外,另一個商業(yè)上有潛力的面向?qū)ο蟮恼Z言,除了封裝和繼承,還集成了幾個強(qiáng)有力的面向?qū)ο蟮拇?,如參?shù)化多態(tài)性、對方法實施前置條件和后置斷言等。從理論上說,Eiffel是
28、最好的面向?qū)ο蟮某绦蛟O(shè)計語言。C++是對傳統(tǒng)C語言進(jìn)行面向?qū)ο蟮臄U(kuò)充,是在c語言的基礎(chǔ)上增加了對面向?qū)ο蟪绦蛟O(shè)計的支持,是在80年代早期由貝爾實驗室設(shè)計的。C++又被稱為混合型語言.因為它可以支持傳統(tǒng)的程序設(shè)計方法,又支持面向?qū)ο蟪绦蛟O(shè)計方法,有豐富的應(yīng)用基礎(chǔ)和開發(fā)環(huán)境的支持,因而得到廣泛的使用。,C# 與 .net,2001年6月 微軟公司發(fā)布C# 用于對抗Java語言 歐洲計算機(jī)制造商協(xié)會(ECMA)已于2001年10月13
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 面向?qū)ο蟮某绦蛟O(shè)計
- 面向?qū)ο蟪绦蛟O(shè)計實驗
- 實驗 面向?qū)ο蟪绦蛟O(shè)計
- 《面向?qū)ο蟪绦蛟O(shè)計》 考試
- 《面向?qū)ο蟪绦蛟O(shè)計(java)》
- 面向?qū)ο蟪绦蛟O(shè)計報告
- 面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)
- 面向?qū)ο蟪绦蛟O(shè)計的概念
- 課題面向?qū)ο蟮某绦蛟O(shè)計
- 面向?qū)ο蟮恼Z言程序設(shè)計
- 面向?qū)ο蟪绦蛟O(shè)計理論
- 一面向?qū)ο蟪绦蛟O(shè)計
- 面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)下
- 面向?qū)ο蠓椒俺绦蛟O(shè)計
- c++面向?qū)ο蟪绦蛟O(shè)計
- java面向?qū)ο蟪绦蛟O(shè)計教案
- 《面向?qū)ο蟪绦蛟O(shè)計》輔導(dǎo)四
- [0837]作業(yè)《面向?qū)ο蟪绦蛟O(shè)計》
- 面向?qū)ο蟪绦蛟O(shè)計異常處理
- 【課程設(shè)計】面向?qū)ο蟪绦蛟O(shè)計
評論
0/150
提交評論