C# 3.0面向?qū)ο缶幊倘?面向?qū)ο?ppt_第1頁
C# 3.0面向?qū)ο缶幊倘?面向?qū)ο?ppt_第2頁
C# 3.0面向?qū)ο缶幊倘?面向?qū)ο?ppt_第3頁
C# 3.0面向?qū)ο缶幊倘?面向?qū)ο?ppt_第4頁
C# 3.0面向?qū)ο缶幊倘?面向?qū)ο?ppt_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3講 面向?qū)ο?本章學(xué)習(xí)目標: 了解什么是軟件開發(fā)方法 理解面向?qū)ο蟮幕靖拍睿簩ο蟆㈩?、對象的屬性、關(guān)系等 了解面向?qū)ο笏枷胨婕暗能浖_發(fā)的3個方面 理解什么是抽象以及如何將現(xiàn)實世界中的實體抽象成類和對象 理解什么是封裝以及如何進行有效的封裝 創(chuàng)建和使用類 理解類成員的概念,并能夠自定義合適的類成員,目標,理解面向?qū)ο?面向?qū)ο蟮母拍?面向?qū)ο蟪绦蛟O(shè)計 小結(jié) 實驗 習(xí)題,面向?qū)ο蟾攀?面向?qū)ο?Object Oriented)是當(dāng)前計算機界關(guān)心的重點 面向?qū)ο蟮姆治觯∣OA,Object Oriented Analysis) 面向?qū)ο蟮脑O(shè)計(OOD,Object Oriented Des

2、ign) 面向?qū)ο缶幊?(OOP,Object Oriented Programming) 面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計和軟件開發(fā),擴展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。,傳統(tǒng)開發(fā)方法存在問題,軟件重用性差 軟件可維護性差 開發(fā)出的軟件不能滿足用戶需要 用結(jié)構(gòu)化方法開發(fā)的軟件,其穩(wěn)定性、可修改性和可重用性都比較差,這是因為結(jié)構(gòu)化方法的本質(zhì)是功能分解,從代表目標系統(tǒng)整體功能的單個處理著手,自頂向下不斷把復(fù)雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現(xiàn)的子處理功能為止,然后用相應(yīng)的工具來

3、描述各個最低層的處理。因此,結(jié)構(gòu)化方法是圍繞實現(xiàn)處理功能的“過程”來構(gòu)造系統(tǒng)的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對于基于過程的設(shè)計來說是災(zāi)難性的。用這種方法設(shè)計出來的系統(tǒng)結(jié)構(gòu)常常是不穩(wěn)定的 ,用戶需求的變化往往造成系統(tǒng)結(jié)構(gòu)的較大變化,從而需要花費很大代價才能實現(xiàn)這種變化。,面向?qū)ο蟮幕靖拍?對象對象是人們要進行研究的任何事物,從最簡單的整數(shù)到復(fù)雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計劃或事件。 對象的狀態(tài)和行為對象具有狀態(tài),一個對象用數(shù)據(jù)值來描述它的狀態(tài)。 對象還有操作,用于改變對象的狀態(tài),對象及其操作就是對象的行為。對象實現(xiàn)了數(shù)據(jù)和操作的

4、結(jié)合,使數(shù)據(jù)和操作封裝于對象的統(tǒng)一體中。 類具有相同或相似性質(zhì)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。類具有屬性,它是對象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來描述類的屬性。類具有操作,它是對象的行為的抽象,用操作名和實現(xiàn)該操作的方法來描述。,面向?qū)ο蟮幕靖拍?類的結(jié)構(gòu)在客觀世界中有若干類,這些類之間有一定的結(jié)構(gòu)關(guān)系。通常有兩種主要的結(jié)構(gòu)關(guān)系,即一般-具體結(jié)構(gòu)關(guān)系,整體-部分結(jié)構(gòu)關(guān)系。 一般具體結(jié)構(gòu)稱為分類結(jié)構(gòu),也可以說是“或”關(guān)系,或者是“is a”關(guān)系。 整體部分結(jié)構(gòu)稱為組裝結(jié)構(gòu),它們之間的關(guān)系是一種“與”關(guān)系,或者是“has a”關(guān)系。 消息和方法對象

5、之間進行通信的結(jié)構(gòu)叫做消息。在對象的操作中,當(dāng)一個消息發(fā)送給某個對象時,消息包含接收對象去執(zhí)行某種操作的信息。發(fā)送一條消息至少要包括說明接受消息的對象名、發(fā)送給該對象的消息名(即對象名、方法名)。一般還要對參數(shù)加以說明,參數(shù)可以是認識該消息的對象所知道的變量名,或者是所有對象都知道的全局變量名。,類與對象抽象和實例,理解面向?qū)ο?什么是面向?qū)ο螅繛槭裁葱枰嫦驅(qū)ο竽??要解決這些問題,我們首先看一個簡單的例子。,面向?qū)ο笏枷肴绱丝紤]: 場景中所有角色抽象起來總共有兩類:加水器和水箱 水箱空,觸發(fā)加水器加水 水箱的體積決定加水器加多少水 將加水器和水箱具體化成1號、2號、3號裝置,理解面向?qū)ο螅ɡm(xù)

6、),加水類,水箱,加水方法,“水箱空”事件,放水方法,用面向?qū)ο蟮某绦驅(qū)崿F(xiàn): 類:抽象出水箱類和加水器類。 屬性:定義水箱類的屬性“體積” 。 方法:定義加水器類的“放水”方法 。 事件:定義“水箱空”事件 。 對象:將水箱類實例化成“1號水箱”對象并設(shè)定其“體積”屬性,加水器類實例化成“1號加水器”對象。其他裝置依此類推。 完成場景 。,理解面向?qū)ο螅ɡm(xù)),理解面向?qū)ο?面向?qū)ο蟮母拍?面向?qū)ο蟪绦蛟O(shè)計 小結(jié) 實驗 習(xí)題,面向?qū)ο蟮幕靖拍睿?面向?qū)ο蟮母拍?對象的屬性 對象的關(guān)系 類的實現(xiàn),面向?qū)ο蟮幕靖拍?對象的屬性,對象的主要屬性包括狀態(tài)和行為 。,1. 對象的狀態(tài)又稱為對象的靜態(tài)屬

7、性,主要指對象內(nèi)部所包含的各種信息。,2. 行為是對象的第二個屬性,有時候又稱為對象的操作,主要表示對象的動態(tài)屬性。,對象的關(guān)系,對象的關(guān)系概括為三類:包含、繼承、關(guān)聯(lián)。,包含 :當(dāng)對象A是對象B的屬性時,稱對象B包 含對象A。,繼承 :當(dāng)對象A是對象B的特例時,就說對象A繼承了對象B。,關(guān)聯(lián) :當(dāng)對象A的引用是對象B的屬性時,稱對象A和對象B之間是關(guān)聯(lián)關(guān)系。,類的實現(xiàn),在開發(fā)過程中,類的實現(xiàn)是核心問題。,在以面向?qū)ο箫L(fēng)格所編寫的系統(tǒng)中,所有的數(shù)據(jù)都 被封裝在類的實例中。,理解面向?qū)ο?面向?qū)ο蟮母拍?面向?qū)ο蟪绦蛟O(shè)計 小結(jié) 實驗 習(xí)題,抽象 封裝 類 類成員 委托,面向?qū)ο蟪绦蛟O(shè)計,抽象,軟

8、件開發(fā)使用的抽象主要有兩類:過程抽象和數(shù)據(jù)抽象。,過程抽象將整個系統(tǒng)的功能劃分為若干部分,數(shù)據(jù)抽象把系統(tǒng)中需要處理的數(shù)據(jù)和對這些數(shù)據(jù)的操作結(jié)合在一起,封裝,2.目的:封裝的主要目的是達到接口和實現(xiàn)的分離。,1.定義: 封裝是指使用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作包裝在一起。,聲明類 創(chuàng)建對象 自定義類,類,聲明類,類是 C# 中功能最為強大的數(shù)據(jù)類型。 類是使用 class 關(guān)鍵字來定義的,語法如下: 訪問級別 class 類名 /字段、屬性、方法、事件等 ,創(chuàng)建對象,通過使用 new 關(guān)鍵字,后跟對象所基于的類的名稱,可以創(chuàng)建對象,如下所示: Customer object1 = new

9、Customer();,自定義類,自定義一個類,該類包含一個字段、一個方法和一個稱為構(gòu)造函數(shù)的特殊方法: public class Person public string name; public Person() name = unknown; public void SetName(string newName) name = newName; ,字段 屬性 事件 索引器 方法,類成員,字段,在類塊中聲明字段的方式如下: 字段的訪問級別 字段的類型 字段的名稱,“字段”是包含在類或結(jié)構(gòu)中的對象或值。字段使類和結(jié)構(gòu)可以封裝數(shù)據(jù)。,屬性,事件,索引器,索引器就是一類特殊的屬性,方法,什么是方

10、法 方法的聲明 方法返回值 方法參數(shù) 構(gòu)造函數(shù) Main 方法 變量作用范圍 方法重載 結(jié)構(gòu)方法,方法(續(xù)),(1) 什么是方法,方法(續(xù)),方法(續(xù)),如果想得到方法的返回信息(也就是說在聲明方法的時候,返回值類型不為void),那么必須在方法內(nèi)部編寫一條返回語句??梢允褂藐P(guān)鍵字return后面跟一個表達式、變量或者對象來完成返回語句的編寫。,(3) 方法的返回值,方法(續(xù)),(4) 方法的參數(shù) 當(dāng)引用類型作為參數(shù)傳遞給方法的時候,方法將會直接操作該引用所指向的那個數(shù)據(jù)。作為參數(shù)的數(shù)據(jù)會因為方法的內(nèi)部操作產(chǎn)生變化。具體區(qū)別可以參考下圖:,方法(續(xù)),值類型 變量,變量 副本,值類型參數(shù),傳遞

11、該變量的引用地址,以便方法能索引到變量,變量 副本,值類型參數(shù),變量 副本,值類型參數(shù),值類型 變量,變量 副本,值類型參數(shù),值類型 變量,變量 副本,值類型參數(shù),值類型參數(shù),變量 副本,值類型參數(shù),變量 副本,值類型參數(shù),值類型 變量,變量 副本,值類型參數(shù),方法 (續(xù)),(5) 構(gòu)造函數(shù)的一些特殊的性質(zhì) : 構(gòu)造函數(shù)的名字必須與類同名 構(gòu)造函數(shù)沒有返回類型,它可以帶參數(shù),也可以不帶參數(shù) 聲明類對象時,系統(tǒng)自動調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)不能被顯式調(diào)用,方法 (續(xù)),(5) 構(gòu)造函數(shù)(續(xù)) 構(gòu)造函數(shù)可以重載,從而提供初始化類對象的不同方法 若在聲明時未定義構(gòu)造函數(shù),系統(tǒng)會自動生成默認的構(gòu)造函數(shù),此

12、時構(gòu)造函數(shù)的函數(shù)體為空,6. Main()方法 Main()方法是程序的入口點,程序控制在該方法中開始和結(jié)束 該方法在類或結(jié)構(gòu)的內(nèi)部聲明。它必須是靜態(tài)方法,而不應(yīng)是公共方法 它可以具有 void 或 int 返回類型 聲明 Main()方法時既可以使用參數(shù),也可以不使用參數(shù) 參數(shù)可以作為從零開始索引的命令行參數(shù)來讀取 與 C 和 C+ 不同,程序的名稱不會被當(dāng)做第一個命令行參數(shù),方法 (續(xù)),(7) 變量的作用域 變量的作用域是指變量在程序中能夠被識別的范圍。 局部變量 在C#中,在方法內(nèi)部創(chuàng)建的變量只能在方法內(nèi)部使用,所以這種變量對于方法而言是局部的,被稱為“局部變量”(Local Vari

13、able)。,方法 (續(xù)),(7) 變量的作用域 變量的作用域是指變量在程序中能夠被識別的范圍 全局變量 與局部變量相對的,還有一個概念全局變量(Global Variable),由任何位于方法外的語句來聲明和初始化(分配內(nèi)存等資源)。所有在物理上位于全局變量聲明之后的程序代碼都可以調(diào)用并使用它。,方法 (續(xù)),方法 (續(xù)),(8) 方法重載 在C# 中,同一個類中的兩個或兩個以上的方法可以有同一個名字,只要它們的參數(shù)聲明不同即可。在這種情況下,該方法就被稱為重載,這個過程稱為方法重載。,方法 (續(xù)),(9) 結(jié)構(gòu)方法 結(jié)構(gòu)是值類型,而類是引用類型 向方法傳遞結(jié)構(gòu)時,結(jié)構(gòu)是通過傳值方式傳遞的,

14、而不是作為引用傳遞的 與類不同,結(jié)構(gòu)的實例化可以不使用 new 運算符,方法 (續(xù)),(9) 結(jié)構(gòu)方法(續(xù)) 結(jié)構(gòu)可以聲明構(gòu)造函數(shù),但它們必須帶參數(shù) 一個結(jié)構(gòu)不能從另一個結(jié)構(gòu)或類繼承,而且不能作為一個類的基類 結(jié)構(gòu)可以實現(xiàn)接口 在結(jié)構(gòu)中初始化實例字段是錯誤的,理解委托 多播委托,委托,委托類似于 C+的函數(shù)指針,但它是類型安全的 委托允許將方法作為參數(shù)進行傳遞 委托可用于定義回調(diào)方法 委托可以連接在一起,例如,可以對一個事件調(diào)用多個方法 方法無需與委托簽名精確匹配 C# 2.0 版引入了匿名方法的概念,理解委托,委托具有以下特點:,多播委托,理解面向?qū)ο?面向?qū)ο蟮母拍?面向?qū)ο蟪绦蛟O(shè)計 小結(jié) 實驗 習(xí)題,本章主要介紹了面向?qū)ο蟮幕靖拍睿嫦驅(qū)ο笠猿橄蠛头庋b的方式將事物劃分成類,用對象實例化的操作來解決問題。,小結(jié),理解面向?qū)ο?面向?qū)ο蟮母拍?面向?qū)ο蟪绦蛟O(shè)計 小結(jié) 實驗 習(xí)題,實驗,參照實驗手冊,并在教師指導(dǎo)下完成實驗報告。,理解面向?qū)ο?面向?qū)ο蟮母拍?面向?qū)ο蟪绦蛟O(shè)計 小結(jié) 實驗 習(xí)題,習(xí)題,1.填空題 (1)聲明為_的類成員,只能為定義這些成員的類的方法所訪問。 (2)關(guān)鍵字_表示一個類的定義。 (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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論