面向對象的程序設計_第1頁
已閱讀1頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、《面向對象的程序設計》,任課教師:朱小龍 聯(lián)系方式:lonxz@126.comQQ:296189288 實驗時間:星期五上午第一大節(jié) (4-12雙周) 實驗地點:210 參考書目:《C++面向對象程序設計教程習題解答與上機教程》陳維興主編 清華大學出版社,面向對象,面向對象(object-oriented , OO)是當前計算機界關心的重點,它是90年代軟件開發(fā)方法的

2、主流。面向對象的概念和應用已超越了程序設計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應用結構、應用平臺、分布式系統(tǒng)、網(wǎng)絡管理結構、CAD技術、人工智能等領域。,起初,“面向對象”是專指在程序設計中采用封裝、繼承、抽象等設計方法,軟件設計開發(fā),,Problem Space,Business Process,Computer System,,Descriptions of problem (Human: 需求分析),Na

3、tural Language,Descriptions of solution (Human: 程序設計),Programming Language,Execution of program,Solution Space,A Gap between languages,傳統(tǒng)的面向過程程序設計,使用C語言 設計一個銀行帳戶管理系統(tǒng):程序 = 數(shù)據(jù)結構 + 算法,面向過程程序設計,過程與數(shù)據(jù)分離.分析與實施之間需要概念轉換.設

4、計模型與實現(xiàn)之間距離較遠.過程難于重用程序擴展維護難度大.,第1章 面向對象程序設計概述,本章的重點:面向對象程序設計的概念面向對象程序設計的重要特性本章的難點:繼承的理解多態(tài)性的理解重載的理解,1.1 什么是面向對象程序設計,面向對象程序設計 Object-Oriented Programming 是一種新的程序設計范型(paradigm)20世紀90年代程序設計的主流技術,,,1.1 什么是面向

5、對象程序設計1.1.1 一種新的程序設計范型,程序設計范型傳統(tǒng)的面向過程程序設計范型程序= 過程 + 調用面向過程性語言,如:C、Pascal、Fortran、Ada等,設計程序的規(guī)范、模型和風格 它是一類程序設計語言的基礎,1.1 什么是面向對象程序設計1.1.1 一種新的程序設計范型,其他范型:函數(shù)式(LISP)模塊程序(Modula)邏輯式(PROLOG)進程式、類型系統(tǒng)、事件、數(shù)據(jù)流等面向對象程序設計范型程

6、序= 對象 + 消息,面向對象程序主要結構特點,(1)程序一般由類的定義和類的使用兩部分組成;(2)程序中的一切操作都是通過向對象發(fā)送消息來實現(xiàn)的,對象接收到消息后,啟動有關方法完成相應的操作。,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,表中各對象都是現(xiàn)實世界中一個客觀實體,其特性是:每一個對象均有一個名字;用屬性(或稱狀態(tài))描述對象的某些特征;通過一組操作來描述對象的各種行為。,對象實例,觀察WI

7、NDOWS下窗口的命令按鈕:每個命令按鈕都有一個名字,如:“確定”、“取消”;每個按鈕都有一些屬性,如:“長、高、顏色等”;對每個按鈕均可實現(xiàn)一些操作,如:“改變焦點、單擊、雙擊、按回車鍵等”,,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,1.對象Object現(xiàn)實世界中的一個實體,其特性是:(1)每一個對象必須有一個名字區(qū)別于其它對象;(2)用屬性(或叫狀態(tài))來描述它的某些特征:(3)有一組操作

8、,每組操作決定對象的一種行為。(4)對象行為可分兩類:作用自身;作用其他對象,在面向對象程序設計中,對象是描述其屬性的數(shù)據(jù)以及對這些數(shù)據(jù)施加的一組操作封裝在一起構成的統(tǒng)一體。課堂討論: 列舉日常生活中的一些對象,說說它們的屬性和行為。,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,,數(shù)據(jù),操作代碼,對象,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,2. 類 Class“類”

9、是對一組具有共同的屬性特征和行為特征的對象的抽象。類和對象之間的關系是抽象相具體的關系。類是對多個對象進行綜合抽象的結果。又是類的個體實物,一個對象是類的一個實例。,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,在面向對象程序設計中,類是具有相同的數(shù)據(jù)和相同的操作(函數(shù))的一組對象的集合數(shù)據(jù)成員成員函數(shù),類,對象,先聲明類,由類生成其對象,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概

10、念,3. 消息與方法現(xiàn)實生活中的對象不是孤立存在的實體,它們存在著各種各樣的聯(lián)系。在面向對象程序設計中,對象之間也需要聯(lián)系,稱為對象的交互。,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,3. 消息與方法面向對象程序設計技術必須提供一種機制,允許一個對象與另一個對象的交互。這種機制叫消息傳遞。一個對象向另一個對象發(fā)出的請求稱為“消息”,消息具有三個性質(1)同一個對象可以接收不同形式的多個消息,做

11、出不同的響應;(2)相同形式的消息可以傳遞給不同的對象,所做出的響應可以是不同的:(3)消息的發(fā)送可以不考慮具體的接受者,對象可以響應消息,也可以不響應。,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,1.1 什么是面向對象程序設計1.1.2 面向對象程序設計的基本概念,對象所能實現(xiàn)的行為(操作),在程序設計方法中稱為方法,通過調用相應的函數(shù)來實現(xiàn)。方法包括:界面 和 方法體 消息和方法的關系:對象

12、根據(jù)接受到的消息,調用相應的方法;反過來,有了方法,對象才能響應相應的消息。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,1. 抽象 2. 封裝3. 繼承4. 多態(tài),1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,1. 抽象將有關事物的共性歸納、集中的過程。通過特定的實例(對象)抽取共同性質后形成概念的過程。數(shù)據(jù)抽象代碼抽象(行為抽象),1.1 什么是面向對象程序設計1.1

13、.3 面向對象程序設計的基本特征,“學生”對象,先對一些學生實例進行分析,確定他們的共同特性或主要特性(姓名、性別、年齡、專業(yè)等),忽略不同點或次要的引不起興趣的那些特性(長相差異、性格差異等)。根據(jù)程序需要,抽象出學生管理中的對象共同的行為,如:數(shù)據(jù)錄入、修改、輸出等。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,2、封裝把某個事物包裹起來,使外界不知道該事物的具體內容。在面向對象程序設計中,封裝

14、是指把數(shù)據(jù)和實現(xiàn)操作的代碼集中起來放在對象內部,并盡可能隱蔽對象的內部細節(jié)。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,封裝實例 洗衣機對象,,,接口1,,接口2,,接口3,操作代碼1,操作代碼2,操作代碼3,數(shù)據(jù),1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,封裝具有兩方面含義:將有關數(shù)據(jù)和操作代碼封裝在一個對象中,各個對象相對獨立、互不

15、干擾;對象中某些數(shù)據(jù)和操作代碼對外隱蔽,即隱蔽其內部細節(jié),只留下少量接口,以便與外界聯(lián)系,接受外界消息。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,3、繼承以面向對象程序設計的觀點來看.繼承所表達的是對象類之間相關的關系。這種關系使得某類對象可以繼承另外一類對象的特征和能力。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,若類之間具有繼承關系,則它們之間具有下列幾個特性:

16、(1)類間具有共享特征(包括數(shù)據(jù)和程序代碼的共享) (2)類間具有差別或新增部分(包括非共享的數(shù)據(jù)和程序代碼) (3)類間具有層次結構。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,假設有兩個類A和B,若類B繼承類A,則屬于類B中的對象具有類A的一切特征(包括數(shù)據(jù)同性和操作),這時,我們稱被繼承類A為基類或父類或超類;而稱繼承類B為類A的派生類或子類。同時,我們還可以說,類B是從類A中派生出來的。,1.

17、1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,A,B,,base,derived,如果類B從類A派生出來.而類C又是從類B派生出來的,就構成了類的層次。這樣,我們又有了直接基類和間接基類的概念。類A是類B的直接基類,是類C的間接基類。類C不但繼承它的直接基類的所有特性,還繼承它的所有間接基類的特征。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,A,B,,base,derived,C,deri

18、ved,,如果類B是類A的派生類,那么,在構造類B的時候.我們不必重新描述A的所有特征,只需讓它繼承類A的特征,然后描述與基類A不同的那些特性。也就是說,類B的特征由繼承來的和新添加的兩部分特征構成。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,面向對象程序設計為什么要提供繼承機制?也就是說,繼承的作用是什么? 其一.避免公用代碼的重復開發(fā),減少代碼和數(shù)據(jù)冗余; 其二.通過增強一致性來減少模塊間的接口和界

19、面。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,繼承分類繼承源上分,繼承分為單繼承和多繼承。 1、單繼承是指每個派生類只直接繼承了一個基類的特征。動物鏈就是一個單繼承的實例。 2、多繼承是指多個基類派生出一個派生類的繼承關系,多繼承的派生類直接繼承了不止一個基類的特征。,1.1 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,4、多態(tài)面向對象的多態(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 什么是面向對象程序設計1.1.3 面向對象程序設計的基本特征,1.2 為什么要使用面向對象程序設計,1.2.1 傳統(tǒng)程序設計方法的局限性 (1)傳統(tǒng)程序設計開發(fā)軟件的生產(chǎn)效率低下 (2)傳統(tǒng)程序設計難以應付日益龐大的信息量和多樣的信息類型 (3)傳

21、統(tǒng)的程序設計難以適應各種新環(huán)境,1.2.2 面向對象程序設計的主要優(yōu)點,(1) 可提高程序的重用性 (2) 可控制程序的復雜性 (3) 可改善程序的可維護性(4) 能夠更好地支持大型程序設計 (5) 增強了計算機處理信息的范圍 (6) 能很好地適應新的硬件環(huán)境,1.3 面向對象程序設計的語言,1.3.1 面向對象程序設計語言的發(fā)展概況,Smalltalk,20世紀70年代,Eiffel,SELF,C++,純面向對象

22、,混合型,Objective-C,Object Pascal,1.3.2 幾種典型的面向對象程序設計語言,1. Smalltalk語言2. Simula語言3. C++語言 4. Java語言5. C# 語言,第一代語言的顯著特征是對數(shù)學表達式有很強的運算處理能力,其代表是50年代開發(fā)的FORTRAN語言和60年代開發(fā)的Algol60。FORTRAN是第一個具有劃時代意義的程序設計語言,許多重要的程序設計語言

23、概念,如變量、數(shù)組、控制結構等被引入到程序設計語言中。 在Algol60中人們提出了塊結構的概念,塊與塊之間對變量實施隔離,即在一個塊中的變量可以與其它塊中的變量同名而不產(chǎn)生混淆,這是程序設計語言中第一次嘗試為數(shù)據(jù)提供保護和封裝。,程序設計語言的歷史演變介紹,第二代語言的重點是如何有效地表達算法,其代表是Pascal和c。Pascal是第一個提出結構化程序設計的語言,但由于不適合推廣到實用領域而成為比較理想的教學語言。70年代開發(fā)

24、的c語言提供了豐富的數(shù)據(jù)結構和運算符,具有結構化的控制語句,用函數(shù)作為程序模塊以實現(xiàn)程序的模塊化,是面向過程程序設計的理想語言。,程序設計語言的歷史演變介紹,第三代語言是引入了抽象數(shù)據(jù)類型的程序設計語言,例如AdaAda語言包含一些常見的程序控制流,并具有定義新的類型、函數(shù)和子例程的能力。Ada被認為是基于對象的語言,因為它雖然支持抽象數(shù)據(jù)類型、函數(shù)和運算符重載以及多態(tài)性等面向對象的機制。 但不支持繼承。Ada語言中具有面向對象的構

25、造,程序設計語言的歷史演變介紹,第四代語言就是面向對象程序設計的語言了。這類語言包括:Smalltalk、 Object-C、Eiffel以及C++等。,程序設計語言的歷史演變介紹,提到面向對象程序設計語言.必須提到60年代開發(fā)的Simula 67,因為它被公認為是面向對象語言的鼻祖。它提供丁對象、類,以及繼承的概念,奠定了面向對象語言的基礎.并提出了面向對象的術語。它的主要用途是進行仿真建模。 在70年代和80

26、年代這一時期,來自于Simula和其它早期的原型語言中的面向對象的概念在Smalltalk語言中得到了完整的體現(xiàn)。Smalltalk是當今最有影響的面向對象語言之一。Smalltalk語言包括了Simu1a的面向對象的待征.如對象、類、繼承等,而且數(shù)據(jù)封裝更嚴格。Smalltalk從70年代開始開發(fā),經(jīng)歷了smalltalk—72、Smalltalk—76和smalltalk 80幾個版本,現(xiàn)在我們一般用Smalltalk 80。,Ob

27、ject-C是在1983年前后開發(fā)的.它是對C進行擴充以后形成的面向對象的語言,但它的語法更像Smalltalk。0bject-C并不像C++那樣通過擴充已有的c語言的語法來提供面向對象的支持,而是完全依賴于新引入的構造和運算符來完成類定義和消息,Eiffel是除C++之外,另一個商業(yè)上有潛力的面向對象的語言,除了封裝和繼承,還集成了幾個強有力的面向對象的待征,如參數(shù)化多態(tài)性、對方法實施前置條件和后置斷言等。從理論上說,Eiffel是

28、最好的面向對象的程序設計語言。C++是對傳統(tǒng)C語言進行面向對象的擴充,是在c語言的基礎上增加了對面向對象程序設計的支持,是在80年代早期由貝爾實驗室設計的。C++又被稱為混合型語言.因為它可以支持傳統(tǒng)的程序設計方法,又支持面向對象程序設計方法,有豐富的應用基礎和開發(fā)環(huán)境的支持,因而得到廣泛的使用。,C# 與 .net,2001年6月 微軟公司發(fā)布C# 用于對抗Java語言 歐洲計算機制造商協(xié)會(ECMA)已于2001年10月13

溫馨提示

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

評論

0/150

提交評論