面向?qū)ο蟮恼Z言程序設(shè)計(jì)_第1頁
已閱讀1頁,還剩60頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、面向?qū)ο蟮?語言程序設(shè)計(jì),Java,主講 :,,,面向?qū)ο蟮木幊碳夹g(shù),面向?qū)ο蠓椒òl(fā)展的背景,面向?qū)ο蠓椒òl(fā)展的歷史,面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn),20世紀(jì)60年代中期到70年代中期,在計(jì)算機(jī)界爆發(fā)了“軟件危機(jī)”,傳統(tǒng)的生命周期方法學(xué)的許多缺點(diǎn)暴露無疑,雖然它仍然能部分地緩解“軟件危機(jī)”。 此后,為了克服傳統(tǒng)方法學(xué)的缺點(diǎn),面向?qū)ο蠓椒▽W(xué)日益受到人們的重視,并且快速地崛起。,面向?qū)ο蠓?/p>

2、法起源于面向?qū)ο蟪绦蛟O(shè)計(jì)語言,起源于50年代人工智能的早期研究,60年代挪威計(jì)算中心開發(fā)的Simula67, 引入了類的概念和繼承機(jī)制,標(biāo)志著面 向?qū)ο蟪绦蛟O(shè)計(jì)的出現(xiàn),面向?qū)ο蠓椒ㄆ鹪从诿嫦驅(qū)ο蟪绦蛟O(shè)計(jì)語言,70年代出現(xiàn)的并發(fā)Pascal,Ada和Modula-2 等編程語言,支持?jǐn)?shù)據(jù)與操作的封裝,1972年,出現(xiàn)了Smalltalk-72,面向?qū)ο蠓椒ㄆ鹪从诿嫦驅(qū)ο蟪绦蛟O(shè)計(jì)語言,1981年問世的Small

3、talk80是第一個(gè)能夠?qū)嶋H 應(yīng)用的面向?qū)ο蟪绦蛟O(shè)計(jì)語言,80年代中期至今,出現(xiàn)了C++,Object Pascal, Java等面向?qū)ο蟪绦蛟O(shè)計(jì)語言,標(biāo)志著面向 對(duì)象程序設(shè)計(jì)的真正普及,3.1.1 面向?qū)ο蟮母拍?問題空間元素在方法空間中的表示稱為對(duì)象(也稱為實(shí)例instance),“對(duì)象”是現(xiàn)實(shí)世界的實(shí)體或概念在計(jì)算機(jī)邏輯中的抽象表示。 面向?qū)ο蟮某绦蛟O(shè)計(jì)

4、是以要解決的問題中所涉及到的各種對(duì)象為主要考慮因素。,把問題看成是相互作用的事物的集合,用屬性描述事物,對(duì)事物的操作叫做方法,事物稱為對(duì)象,屬性稱為數(shù)據(jù),對(duì)象是數(shù)據(jù)與方法的集合。OOP主要技術(shù)包括封裝、繼承、多態(tài)、覆蓋。,“對(duì)象”是面向?qū)ο蠓椒ㄖ惺褂玫淖罨镜母拍睢?在應(yīng)用領(lǐng)域中有意義的、與所要解決的問題有關(guān)系的任何事物都可以作為對(duì)象,它既可以是具體的物理實(shí)體的抽象,也可以是人為的概念,或者是任何有明確邊界和意義的東西。

5、總之,對(duì)象是對(duì)問題域中某個(gè)實(shí)體的抽象,設(shè)立某個(gè)對(duì)象就反映了軟件系統(tǒng)保存有關(guān)它的信息并且與它進(jìn)行交互的能力。,例如,一名學(xué)生、一所學(xué)校、一個(gè)窗口、一座圖書館、一本圖書、貸款、借貸······等等,都可以作為一個(gè)對(duì)象。 由于客觀世界中的實(shí)體通常都既有靜態(tài)的屬性,又有動(dòng)態(tài)的行為,因此,面向?qū)ο蠓椒ㄖ械膶?duì)象是由描述對(duì)象屬性的數(shù)據(jù)以及可以對(duì)這些數(shù)據(jù)施加的所有操作封裝在一起

6、構(gòu)成的統(tǒng)一體。,封裝是指把對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié),只保留有限的對(duì)外接口是之與外部發(fā)生聯(lián)系。 封裝的思想是將對(duì)象內(nèi)部的信息進(jìn)行屏蔽,人們只能通過對(duì)象界面上的允許操作對(duì)對(duì)象進(jìn)行動(dòng)作,改變對(duì)象的屬性及狀態(tài)。,對(duì)象的封裝使我們不必關(guān)心諸如對(duì)象行為是如何實(shí)現(xiàn)的這樣一些細(xì)節(jié);同時(shí),實(shí)現(xiàn)了模塊化和信息隱藏,這樣保證了程序的可移植性和安全性,也有利于對(duì)復(fù)雜對(duì)象的管理。,,界面,對(duì)象的形象表示,

7、操作1,操作2,操作3,,,,,,,,,,,,狀態(tài)S,操作1,2,3的實(shí)現(xiàn),“類”就是對(duì)具有相同數(shù)據(jù)和相同操作的一組相似對(duì)象的定義,也就是說,類是對(duì)具有相同屬性和行為的一個(gè)或多個(gè)對(duì)象的描述,通常在這種描述中也包括對(duì)怎樣創(chuàng)建該類的新對(duì)象的說明。 通過類的定義可以實(shí)現(xiàn)代碼的復(fù)用。我們不用去描述每一個(gè)對(duì)象,而是通過創(chuàng)建類的一個(gè)實(shí)例來創(chuàng)建該類的一個(gè)對(duì)象,這樣大大簡(jiǎn)化了軟件的設(shè)計(jì)。,實(shí)例就是由某個(gè)特定的類所描述的一個(gè)具體對(duì)象ne

8、w。 方法就是對(duì)象所能執(zhí)行的操作,方法描述了對(duì)象執(zhí)行操作的算法,響應(yīng)消息的方法。 屬性就是類中所定義的數(shù)據(jù),它是對(duì)客觀世界試題所具有的性質(zhì)的抽象。,消息就是要求某個(gè)對(duì)象執(zhí)行在定義它的那個(gè)類中所定義的某個(gè)操作的規(guī)格說明。通常,消息由下述三部分組成: ?消息的接收者 ?接收對(duì)象應(yīng)采用的方法 ?方法所需要的參數(shù),例如,Mycircle是一個(gè)半徑4cm、圓心

9、位于(100,200)的Circle類的對(duì)象,也就是Circle類的一個(gè)實(shí)例,當(dāng)要求它以綠色在屏幕上顯示自己時(shí),在C++語言中應(yīng)該向它發(fā)出下列消息:Mycircle.Show(GREEN);Mycircle是消息的接收者;Show是接收對(duì)象應(yīng)采用的方法;GREEN是方法所需要的參數(shù)。當(dāng)Mycircle接收到這個(gè)消息后,將執(zhí)行Circle類中所定義的Show操作。,封裝是指把對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,盡可能隱藏對(duì)象的

10、內(nèi)部細(xì)節(jié),只保留有限的對(duì)外接口是之與外部發(fā)生聯(lián)系。 封裝的思想是將對(duì)象內(nèi)部的信息進(jìn)行屏蔽,人們只能通過對(duì)象界面上的允許操作對(duì)對(duì)象進(jìn)行動(dòng)作,改變對(duì)象的屬性及狀態(tài)。 對(duì)象的封裝使我們不必關(guān)心諸如對(duì)象行為是如何實(shí)現(xiàn)的這樣一些細(xì)節(jié);同時(shí),實(shí)現(xiàn)了模塊化和信息隱藏,這樣保證了程序的可移植性和安全性,也有利于對(duì)復(fù)雜對(duì)象的管理。,廣義地說,繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)的定義它們。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,

11、繼承是子類自動(dòng)地共享基類(父類)中定義的屬性和方法的機(jī)制。 面向?qū)ο蟪绦蛟O(shè)計(jì)的許多強(qiáng)有力的功能和突出的優(yōu)點(diǎn),都來源于把類組成一個(gè)層次結(jié)構(gòu)的系統(tǒng)(類等級(jí)):一個(gè)類的上層可以有父類,下層可以有子類。這種層次結(jié)構(gòu)系統(tǒng)的一個(gè)重要性質(zhì)是繼承性,一個(gè)類直接繼承其父類的全部描述(數(shù)據(jù)和操作)。,鳥:全身有羽毛,后肢能行走,有翅膀能飛的一種動(dòng)物。 鸝li:(黃鶯ying)羽毛黃色,從眼邊到頭后部有黑色斑紋,叫的聲音很好

12、聽的一種鳥。 鸝li:(黃鶯ying)羽毛黃色,從眼邊到頭后部有黑色斑紋,叫的聲音很好聽的一種全身有羽毛,后肢能行走,有翅膀能飛的動(dòng)物。,實(shí)現(xiàn)繼承機(jī)制的原理:,,A的操作,,A的變量,類A,,,a1(類A的實(shí)例),類A,類A的實(shí)例變量,,,,,,,類B(A的子類),b1(類B的實(shí)例),從A繼承的特性,B的操作,B的變量,類B,從A繼承的實(shí)例變量,類B的實(shí)例變量,,,,,,,,繼承具有傳遞性,如果類C繼承類B,類B繼承類

13、A,則類C繼承類A。因此,一個(gè)類實(shí)際上繼承了它所在的類等級(jí)中在它上層的全部基類的所有描述,也就是說,屬于某類的對(duì)象除了具有該類所描述的性質(zhì)外,還具有類等級(jí)中該類上層全部基類描述的一切性質(zhì)。 當(dāng)一個(gè)類只允許有一個(gè)父類時(shí),類的繼承是單一繼承;當(dāng)允許一個(gè)類有多個(gè)父類時(shí),類的繼承是多重繼承。,在一般類中定義的屬性或方法被子類繼承以后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。 同一個(gè)屬性或方法在一般類及其各個(gè)子類

14、中具有不同的語義。,在OOP中,子類可以把父類的方法重新定義,使之具有新的功能,而方法名,參數(shù)、返回類型與父類相同。 這種技術(shù)稱為方法覆蓋(override)或者重寫(rewrite )。,修飾符 class 類名 [extends 父類名] [implements 接口名]{ 類型 成員變量; …… 修飾符 類型 成員方法 (參數(shù)列表) {

15、 類型 局部變量; 方法體; …… }},1.訪問控制符 public:公共類,說明這是一個(gè)公共類,可以被其它任何類引用和調(diào)用 不寫訪問控制符,表示類只能被本包的其它類訪問。,2.抽象類abstract 以abstract作為關(guān)鍵字,如果有的話,應(yīng)該放在訪問控制符后面,表示這個(gè)類是個(gè)抽象類。 抽象類不能直接產(chǎn)生

16、實(shí)例化一個(gè)對(duì)象,它只能被繼承。,2.抽象類abstract 抽象類是指包含至少一個(gè)抽象方法的類,并且抽象類不能被實(shí)例化,抽象類由修飾詞abstract聲明。 抽象方法是指有訪問修飾詞(public、private..)、返回值類型(int、void..)、方法名和參數(shù)列表,而無方法體且無包容方法體的花括號(hào)的方法。 如果類中有抽象方法,那么類必須聲明為抽象類,包含有抽象方法的類不能實(shí)例化。,抽象類只能由其它

17、類繼承使用,自己不能產(chǎn)生出對(duì)象實(shí)體。子類在繼承抽象類時(shí),必須重寫其父類的抽象方法,給出具體的定義。 抽象類的作用是: (1)將許多類共享的數(shù)據(jù)和方法組成一個(gè)類,但不提供一個(gè)完整的實(shí)現(xiàn)。 (2)強(qiáng)迫子類實(shí)現(xiàn)特定的方法。 Java規(guī)定,構(gòu)造方法、靜態(tài)方法和私有方法不能成為抽象方法。,abstract class A { int a; int b; int max(int a , i

18、nt b);},3.最終類final 以 final 作為關(guān)鍵字,如果有的話,應(yīng)該放在訪問控制符后面,表示這個(gè)類是個(gè)最終類,也就是說最終類不能被繼承,不能再派生出其它子類。 String 就是個(gè) final 類。,1.類的屬性 聲明類的屬性為簡(jiǎn)單變量的格式是: [修飾符] 變量類型 變量名[=初值] 修飾符包括訪問控制修飾符、靜態(tài)修飾符static、

19、最終說明符final。,1.類的屬性 private:私有,此成員只能在類的內(nèi)部使用 default:也可以不寫訪問控制符,成員可被本包的其它類訪問。 protected:被保護(hù),成員可被本包的所有類訪問,也可以被聲明它的類和派生的子類訪問(家庭成員)。 public:公共,成員可被所有類訪問。,2.方法聲明類的方法的格式是:[修飾符] 返回值類型 方法名(形式參數(shù)列表) [throws 異常名列表]{

20、 ……………..},2.方法 方法的修飾符很多,包括訪問控制符、靜態(tài)修飾符 static、抽象方法修飾符abstract、最終方法 final、同步修飾符synchronized、本地修飾符native。,3.方法的覆蓋 類層次結(jié)構(gòu)中,如果子類中的一個(gè)方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,則稱子類中的方法覆蓋了父類中的方法。 通過 子類引用

21、覆蓋方法時(shí),總是引用子類定義的方法,而父類中定義的方法被隱藏。,3.方法的覆蓋 在子類中,若要使用父類中被隱藏的方法,可以使用super關(guān)鍵字。,Page 59 例3-2 OverrideDemo.java,3.方法的重載 在Java類中可以創(chuàng)建名字相同,但是參數(shù)不同和返回值不同的幾個(gè)方法,這就是方法重(zhong\)載。Java系統(tǒng)通過參數(shù)和返回值來分辨具體是哪一個(gè)方法,Page 60

22、 例3-3 OverLoadDemo.java,在現(xiàn)實(shí)世界中類與它描述的對(duì)象有很明顯地區(qū)別,類是一個(gè)概念,而實(shí)際對(duì)象是一個(gè)實(shí)體。如某一個(gè)機(jī)械零件圖是一個(gè)類,按照設(shè)計(jì)圖加工制造的零件就是該類描述的一個(gè)對(duì)象。 類是對(duì)象的原型(抽象模型),對(duì)象是具有類指定特性和方法的實(shí)體,由類得到對(duì)象的過程稱為類的實(shí)例化。正如按同一機(jī)械零件圖可以造出很多相似的零件一樣,由同一類也可以生成許多對(duì)象。,對(duì)象和現(xiàn)實(shí)生活中的事物一樣,有它的產(chǎn)生、發(fā)展和消

23、亡的過程,在Java中稱之為對(duì)象的創(chuàng)建、使用和釋放,這一過程稱為對(duì)象的生命周期。,對(duì)象實(shí)例化的格式是:類型 對(duì)象名=new 類型([參數(shù)列表]); 其中,“類型”表示對(duì)象的類型,必須是復(fù)合類型,包括類、字符串等,“對(duì)象名”是一個(gè)合法的標(biāo)識(shí)符。“參數(shù)列表”要根據(jù)類的形式參數(shù)確定,與之匹配。,public class Person { String name; int age;

24、 float salary; public void work ( ) { System.out.println("I'm a engineer!"); } } 生成一個(gè)對(duì)象 li 的方法是: Person li = new Person( );,1. 引用對(duì)象的屬性(變量) 類的成員(包括成員屬

25、性和成員方法)必須要在產(chǎn)生對(duì)象即實(shí)例化后才能被引用,引用的方法是: 對(duì)象名.成員 Person li = new Person( );li . name = "Li ming";new Person( ) . name = " Li ming ";,2.引用對(duì)象的方法 格式: 對(duì)象引用 . 方法名 ( [參數(shù)列表] )

26、;,Page 62 例3-4 TestPerson . java,1.基本數(shù)據(jù)類型的參數(shù)傳遞 基本類型的變量作為實(shí)參傳遞,并不能改變這個(gè)變量的值 。 方法中的形式參數(shù)相當(dāng)于局部變量,方法調(diào)用結(jié)束后自行釋放,不會(huì)影響到主程序中的同名變量 。,Page 63 例3-5 PassValue . java,2.引用變量的參數(shù)傳遞 引用數(shù)據(jù)類型的參數(shù)調(diào)用可以改

27、變對(duì)象的內(nèi)容 。,Page 63 例3-6 PassRef . java,Java運(yùn)行時(shí)系統(tǒng)通過垃圾收集器周期性地釋放無用對(duì)象所占的內(nèi)存,以完成對(duì)象的清除 。 Java的垃圾收集器自動(dòng)掃描對(duì)象的動(dòng)態(tài)內(nèi)存空間,對(duì)正在使用的對(duì)象加上標(biāo)記,將所有引用的對(duì)象作為垃圾收集起來并釋放 。,3.3.1 構(gòu)造方法的定義 構(gòu)造方法的特征: 具有與類相同的名稱 不含返回類型 不能在方法中用ret

28、urn語句返回一個(gè)值 在類實(shí)例化時(shí),它會(huì)由系統(tǒng)自動(dòng)調(diào)用,Page 64 例3-7 TestPerson. java,一個(gè)類的構(gòu)造方法可以有多個(gè),而且還可以進(jìn)行重載。,Page 65 例3-8 TestPerson. java,構(gòu)造方法總結(jié): 一個(gè)類的構(gòu)造方法可以有多個(gè),而且還可以進(jìn)行重載。 每個(gè)類至少有一個(gè)構(gòu)造方法,如果用戶沒有定義,系統(tǒng)自動(dòng)產(chǎn)生一個(gè)默認(rèn)

29、構(gòu)造方法,沒有參數(shù),也沒有方法體。 用戶可以定義構(gòu)造方法,如果定義了構(gòu)造方法,則系統(tǒng)不再提供默認(rèn)構(gòu)造方法。 構(gòu)造方法一般是public的,不可定義為private的。,3.4.1 this this在方法體用來指向引用當(dāng)前正在執(zhí)行方法的那個(gè)對(duì)象實(shí)例 。 以例 3-8 舉例 s ? name person(String s

30、) { name = s; //s實(shí)際是代表名字的參數(shù) },3.4.1 this this(參數(shù)表),這個(gè)構(gòu)造函數(shù)就會(huì)調(diào)用同一個(gè)類的另一個(gè)相同的構(gòu)造函數(shù) 。 Page 68 UserInfo.java,3.4.2 super 如果想要使用父類的構(gòu)造函數(shù)則應(yīng)當(dāng)使用super(參數(shù)列表)的形式。,Page 68

31、 City. java,Java 提供了String 和 StringBuffer 兩個(gè)類來封裝對(duì)字符串的各種操作。都是 final類,不能被其它類所繼承。String : 內(nèi)容不能變StringBuffer : 內(nèi)容可以改變,String s = " Hello Java World ! ";StringBuffer s = new StringBuffer("Hello&q

32、uot;) ;,StringBuffer.toString( ) -----> String Java提供了連接運(yùn)算符 + ,可將其它各類型的數(shù)據(jù)轉(zhuǎn)換為字符串,并連接形成新的字符串,+運(yùn)算是通過StringBuffer類和它的append方法實(shí)現(xiàn)的。 String s = "a"+4+"c"; String s = new

33、 StringBuffer().append("a").append(4).append("c").toString( );,1.length() 2.charAt(int n) 3.toLowerCase() 4.toUpperCase() 5.subString(int beginIndex) subString(int beginIndex,int endIndex)

34、 s1 ="Computer"; s2 = s1.subString(2,5); // mpu6.replace(char oldChar,char newChar),3.7.1 html格式的JDK文檔 主界面由兩大部分組成:一部分是導(dǎo)航標(biāo)題,另一部分是結(jié)構(gòu)圖 1.導(dǎo)航欄導(dǎo)航欄包括Search、General Info、 API & Language、Guide to Fe

35、atures、Tool Docs、Demos/Tutorials共6個(gè)項(xiàng)目,2.JAVA平臺(tái)結(jié)構(gòu)JAVA平臺(tái)結(jié)構(gòu)由7部分組成,每一部分又包括若干鏈接對(duì)象 Development Tools&APIS ,Development Technologies ,User Interface Toolskit ,Integration APIS ,Core APIS ,Java Virtual Machine ,Platforms,c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論