面向?qū)ο蟮木幊碳夹g(shù)對(duì)象和屬性等.ppt_第1頁(yè)
面向?qū)ο蟮木幊碳夹g(shù)對(duì)象和屬性等.ppt_第2頁(yè)
面向?qū)ο蟮木幊碳夹g(shù)對(duì)象和屬性等.ppt_第3頁(yè)
面向?qū)ο蟮木幊碳夹g(shù)對(duì)象和屬性等.ppt_第4頁(yè)
面向?qū)ο蟮木幊碳夹g(shù)對(duì)象和屬性等.ppt_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C#程序設(shè)計(jì)語(yǔ)言課程內(nèi)容,第一章:概述 第二章:C# 語(yǔ)言的基本原理 第三章:C# 中對(duì)象的創(chuàng)建 第四章:面向?qū)ο蟮木幊碳夹g(shù) 第五章:C# 編程 第六章:編寫基于 .NET 的應(yīng)用 程序 第七章:使用 ADO.NET 訪問(wèn) 數(shù)據(jù),第八章:創(chuàng)建基于 Windows 的應(yīng)用程序 第九章:在 C# 應(yīng)用程序中使 用 XML Web Service 第十章:創(chuàng)建 Web 應(yīng)用程序 十一章:應(yīng)用程序設(shè)置和 部署 十二章:進(jìn)階學(xué)習(xí)目標(biāo),面向?qū)ο蟮木幊碳夹g(shù),內(nèi)容:,設(shè)計(jì)對(duì)象 繼承性 多態(tài)性,C#,設(shè)計(jì)對(duì)象 4.1,學(xué)習(xí)完本節(jié)后,你將能夠: 在對(duì)象中封裝信息 使用屬性管理對(duì)封裝數(shù)據(jù)的訪問(wèn),封 裝 性 4.1.

2、2,將類的某些數(shù)據(jù)和操作這些數(shù)據(jù)的代碼隱藏起來(lái),這就是封裝 封裝的好處: 可以隱藏類實(shí)現(xiàn)的細(xì)節(jié) 簡(jiǎn)化用戶的使用 易于軟件的更新、修訂、維護(hù)??梢孕薷膬?nèi)部實(shí)現(xiàn),但不影響用戶的使用,訪 問(wèn) 修 飾 符,使用訪問(wèn)修飾符,可以定義應(yīng)用程序中類成員的作用域(可見性),屬 性 4.1.3,屬性是“聰明”的字段,“特殊”的方法 定義屬性類似于定義一個(gè)方法,但使用屬性時(shí)如同使用一個(gè)字段,class Cat public string name ; public int age; ,static void Main() Cat cat1 = new Cat(); cat1.age = -13; /錯(cuò)誤 ,創(chuàng) 建

3、 屬 性 4.1.3,語(yǔ)法:,public|protected 數(shù)據(jù)類型 屬性名 get /get訪問(wèn)器,獲取屬性的代碼 set /set訪問(wèn)器,設(shè)置屬性的代碼 ,創(chuàng) 建 屬 性 4.1.3,示例:,public class Cat private int age; public int Age get return age; set if (value=20) 報(bào)告出錯(cuò) else age = value; ,使 用 屬 性 4.1.3,示例:,Cat cat1 = new Cat(); cat1.Age = 1; /使用Age屬性的set訪問(wèn)器 int n = Cat.Age; /使用Age

4、屬性的get訪問(wèn)器 cat1.Age = 100; /收到錯(cuò)誤消息,屬 性 4.1.3,如果只提供了get ,沒(méi)有set ,這樣的屬性為只讀屬性 如果只提供了set ,沒(méi)有g(shù)et ,只寫屬性 優(yōu)點(diǎn): 屬性在使用時(shí)類似于類的字段,簡(jiǎn)單 屬性在實(shí)現(xiàn)時(shí)類似于方法,可以編寫代碼控制用戶對(duì)數(shù)據(jù)的存、取,增加安全性檢查 可以設(shè)置只讀或只寫屬性,練 習(xí),參見教材P101頁(yè)4.1.4 課堂練習(xí),10 分鐘,編寫和使用屬性 4.1.4,面向?qū)ο蟮木幊碳夹g(shù),內(nèi)容:,設(shè)計(jì)對(duì)象 繼承性 多態(tài)性,C#,繼 承 性 4.2,定義基類 創(chuàng)建派生類 創(chuàng)建密封類,繼 承 4.2.1,“A” is a kind of “B”,貓

5、是一只動(dòng)物,阿土仔是一個(gè)人 “A” is a kind of “B”,說(shuō)明B是A的一個(gè)父類,A是B的子類(基類/派生類) 子類無(wú)條件的接收父類具有的特性,包括屬性和方法,這就叫做繼承 繼承允許把公共的屬性和方法包含在基類中得到重用,此外,子類還可以添加自己的特性 利用繼承,可以以現(xiàn)有的類為基礎(chǔ),創(chuàng)建出新的類,實(shí)現(xiàn)了代碼的重用,繼 承 4.2.1,繼承描述了“是什么種類” ( is a kind of)的關(guān)系 派生類從基類繼承屬性和方法,實(shí)現(xiàn)了代碼重用 派生類變得更專門化 在C#中只支持單一繼承,即每個(gè)子類只能有一個(gè)父類,父類,子類,動(dòng)物,派 生 類 4.2.2,示例: 動(dòng)物園需要管理3種動(dòng)物,

6、羚羊,獅子,大象,public class Antelope public bool IsSleeping; public void Sleep() public void Eat() public class Lion public bool IsSleeping; public void Sleep() public void Eat() public void StalkPrey() public class Elephant public bool IsSleeping; public void Sleep() public void Eat() public int CarrayCa

7、pacity; ,public class Animal public bool IsSleeping; public void Sleep() public void Eat() public class Antelope: Animal public class Lion : Animal public void StalkPrey() public class Elephant:Animal public int CarrayCapacity; ,派 生 類 4.2.2,示例:,public class Animal protected bool IsSleeping; public v

8、oid Sleep() public void Eat() public class Lion : Animal public void StalkPrey() . Lion adoptedLion = new Lion(); adoptedLion.StalkPrey(); adoptedLion.Eat();,base 關(guān)鍵字 4.2.3,base 指代一個(gè)對(duì)象的父類/基類 當(dāng)子類中的成員與父類成員重名是,父類的成員被隱藏 base 的作用: 點(diǎn)取父類中被子類隱藏了的成員變量 點(diǎn)取被子類覆蓋了的方法 作為方法名表示父類的構(gòu)造函數(shù),public Animal public void meth

9、od1() public class Lion : Animal /將父類的同名方法隱藏 public void method1() public Lion() this.method1(); base.method1(); ,密 封 類 4.2.4,使用sealed關(guān)鍵字聲明密封類 密封類不允許其他類繼承該類 密封的方法不允許被覆蓋 如果你的類不希望被別人繼承、修改,為安全起見,把它們定義為sealed吧!,public sealed class MyClass / class members ,練 習(xí),參見教材P108頁(yè)4.2.5 課堂練習(xí),10 分鐘,創(chuàng)建派生類 4.2.5,面向?qū)ο蟮木?/p>

10、程技術(shù),內(nèi)容:,設(shè)計(jì)對(duì)象 繼承性 多態(tài)性,C#,多 態(tài) 4.3,通過(guò)在基類中使用虛方法來(lái)實(shí)現(xiàn)多態(tài)性 創(chuàng)建和使用抽象類,多 態(tài) 性 4.3.1,具有多種不同的形態(tài),這種能力稱為多態(tài)性 子類繼承了父類的特性,但子類在某些細(xì)節(jié)上各不相同,多種多樣,如何做到這一點(diǎn)呢?,Animal 對(duì)象,Elephant,Cat,Mouse,行為,Eat Grass,Eat Mouse,Eat Cheese,被調(diào)用的 方法,Eat (),Eat (),Eat (),編 寫 虛 方 法 4.3.2,如果希望某個(gè)方法的實(shí)現(xiàn)能夠在子類中進(jìn)一步得到改進(jìn),那么將方法定義為虛方法 使用virtual關(guān)鍵字定義虛方法 這樣子類就可

11、以改進(jìn)從父類繼承下來(lái)的Eat方法了,public class Animal public virtual void Eat() Console.WriteLine(Eat something); ,編 寫 虛 方 法 4.3.2,如果希望改進(jìn)父類的某個(gè)虛方法,使用override關(guān)鍵字覆蓋父類的方法,提供自己的實(shí)現(xiàn)就可以了 當(dāng)覆蓋虛方法時(shí),覆蓋的方法必須與被覆蓋的方法具有相同的方法簽名 這樣子類就可以有與眾不同的Eat方法了,public class Cat : Animal public override void Eat() Console.WriteLine(Eat mouse !);

12、,虛 方 法 的調(diào) 用 4.3.2,當(dāng)調(diào)用某個(gè)虛方法時(shí),運(yùn)行時(shí)會(huì)根據(jù)具體對(duì)象的類型,動(dòng)態(tài)決定調(diào)用哪個(gè)方法。,public class Animal public virtual void Eat() Console.WriteLine(Eat something); public class Cat : Animal public override void Eat() Console.WriteLine(Eat mouse !); Animal myCat = new Cat(); myCat.Eat(); / 輸出:Eat mouse !,多 態(tài) 的 實(shí) 現(xiàn) 4.3.2,動(dòng)物飼養(yǎng)員 pub

13、lic class AnimalTrainer public void FeedAnimal(Animal a) a.Eat(); static void Main() Elephant myElephant = new Elephant(); Cat myCat = new Cat(); Mouse myMouse = new Mouse(); AnimalTrainer marry = new AnimalTrainer(); marry.FeedAnimal(myElephant); /Eat Grass marry.FeedAnimal(myCat); /Eat Mouse marry

14、.FeedAnimal(myMouse); /Eat Cheese ,抽象方法 只有方法聲明,但沒(méi)有方法實(shí)現(xiàn),是一個(gè)空方法 抽象的方法隱式為虛方法,必須被覆蓋 抽象類: 包含了抽象方法的類必須聲明為抽象類 只能被繼承,但不能創(chuàng)建一個(gè)抽象類的對(duì)象實(shí)例 使用abstract關(guān)鍵字定義抽象類和抽象方法 如果你的某個(gè)類的方法不知道該如何實(shí)現(xiàn),實(shí)現(xiàn)的細(xì)節(jié)是由子類決定的,那么把它定義成abstract吧!,抽象方法和抽象類 4.3.3,class Shape public string name ; public double GetArea() ? ? ? ,抽象方法和抽象類 4.3.3,思考題: 為什

15、么使用抽象方法 定義一個(gè)shape類,表示各種幾何圖形,方法getArea( )用來(lái)計(jì)算圖形的面積,該如何實(shí)現(xiàn)這個(gè)方法呢?,?,三角形,正方形,圓形,不同的幾何圖形面積的計(jì)算公式不同,顯然在這里沒(méi)法實(shí)現(xiàn),class 圓形 :Shape public override double GetArea ( ) area = R2 ; ,class 三角形 :Shape public override double GetArea ( ) area = (底 * 高)/2 ; ,abstract class Shape public abstract double GetArea();/沒(méi)有方法體 ,抽象方法和抽象類 4.3.3,解決辦法:定義為abstract,讓各個(gè)子類自己去實(shí)現(xiàn)吧。,?,練 習(xí),參見教材P115頁(yè)4.3.4 課堂練習(xí),10 分鐘,使用多態(tài)性 4.3.4,面向?qū)ο缶幊虄?yōu)點(diǎn) 4.1.1,簡(jiǎn)易性 對(duì)象反映了現(xiàn)實(shí)世界的元素,使程序更容易設(shè)計(jì) 封裝性 隱藏了重要的數(shù)據(jù)和實(shí)現(xiàn)細(xì)節(jié),易于代碼維護(hù),更安全 繼承性 實(shí)現(xiàn)了代碼重用,提高了開發(fā)效率 多態(tài)性 實(shí)現(xiàn)了現(xiàn)實(shí)世界對(duì)象的多樣

溫馨提示

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

評(píng)論

0/150

提交評(píng)論