版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、面向?qū)ο蟮?語言程序設(shè)計,Java,主講 :,,,面向?qū)ο蟮木幊碳夹g(shù),面向?qū)ο蠓椒òl(fā)展的背景,面向?qū)ο蠓椒òl(fā)展的歷史,面向?qū)ο蟪绦蛟O(shè)計的特點,20世紀60年代中期到70年代中期,在計算機界爆發(fā)了“軟件危機”,傳統(tǒng)的生命周期方法學(xué)的許多缺點暴露無疑,雖然它仍然能部分地緩解“軟件危機”。 此后,為了克服傳統(tǒng)方法學(xué)的缺點,面向?qū)ο蠓椒▽W(xué)日益受到人們的重視,并且快速地崛起。,面向?qū)ο蠓?/p>
2、法起源于面向?qū)ο蟪绦蛟O(shè)計語言,起源于50年代人工智能的早期研究,60年代挪威計算中心開發(fā)的Simula67, 引入了類的概念和繼承機制,標志著面 向?qū)ο蟪绦蛟O(shè)計的出現(xiàn),面向?qū)ο蠓椒ㄆ鹪从诿嫦驅(qū)ο蟪绦蛟O(shè)計語言,70年代出現(xiàn)的并發(fā)Pascal,Ada和Modula-2 等編程語言,支持數(shù)據(jù)與操作的封裝,1972年,出現(xiàn)了Smalltalk-72,面向?qū)ο蠓椒ㄆ鹪从诿嫦驅(qū)ο蟪绦蛟O(shè)計語言,1981年問世的Small
3、talk80是第一個能夠?qū)嶋H 應(yīng)用的面向?qū)ο蟪绦蛟O(shè)計語言,80年代中期至今,出現(xiàn)了C++,Object Pascal, Java等面向?qū)ο蟪绦蛟O(shè)計語言,標志著面向 對象程序設(shè)計的真正普及,3.1.1 面向?qū)ο蟮母拍?問題空間元素在方法空間中的表示稱為對象(也稱為實例instance),“對象”是現(xiàn)實世界的實體或概念在計算機邏輯中的抽象表示。 面向?qū)ο蟮某绦蛟O(shè)計
4、是以要解決的問題中所涉及到的各種對象為主要考慮因素。,把問題看成是相互作用的事物的集合,用屬性描述事物,對事物的操作叫做方法,事物稱為對象,屬性稱為數(shù)據(jù),對象是數(shù)據(jù)與方法的集合。OOP主要技術(shù)包括封裝、繼承、多態(tài)、覆蓋。,“對象”是面向?qū)ο蠓椒ㄖ惺褂玫淖罨镜母拍睢?在應(yīng)用領(lǐng)域中有意義的、與所要解決的問題有關(guān)系的任何事物都可以作為對象,它既可以是具體的物理實體的抽象,也可以是人為的概念,或者是任何有明確邊界和意義的東西。
5、總之,對象是對問題域中某個實體的抽象,設(shè)立某個對象就反映了軟件系統(tǒng)保存有關(guān)它的信息并且與它進行交互的能力。,例如,一名學(xué)生、一所學(xué)校、一個窗口、一座圖書館、一本圖書、貸款、借貸······等等,都可以作為一個對象。 由于客觀世界中的實體通常都既有靜態(tài)的屬性,又有動態(tài)的行為,因此,面向?qū)ο蠓椒ㄖ械膶ο笫怯擅枋鰧ο髮傩缘臄?shù)據(jù)以及可以對這些數(shù)據(jù)施加的所有操作封裝在一起
6、構(gòu)成的統(tǒng)一體。,封裝是指把對象的屬性和行為結(jié)合成一個獨立的系統(tǒng)單位,盡可能隱藏對象的內(nèi)部細節(jié),只保留有限的對外接口是之與外部發(fā)生聯(lián)系。 封裝的思想是將對象內(nèi)部的信息進行屏蔽,人們只能通過對象界面上的允許操作對對象進行動作,改變對象的屬性及狀態(tài)。,對象的封裝使我們不必關(guān)心諸如對象行為是如何實現(xiàn)的這樣一些細節(jié);同時,實現(xiàn)了模塊化和信息隱藏,這樣保證了程序的可移植性和安全性,也有利于對復(fù)雜對象的管理。,,界面,對象的形象表示,
7、操作1,操作2,操作3,,,,,,,,,,,,狀態(tài)S,操作1,2,3的實現(xiàn),“類”就是對具有相同數(shù)據(jù)和相同操作的一組相似對象的定義,也就是說,類是對具有相同屬性和行為的一個或多個對象的描述,通常在這種描述中也包括對怎樣創(chuàng)建該類的新對象的說明。 通過類的定義可以實現(xiàn)代碼的復(fù)用。我們不用去描述每一個對象,而是通過創(chuàng)建類的一個實例來創(chuàng)建該類的一個對象,這樣大大簡化了軟件的設(shè)計。,實例就是由某個特定的類所描述的一個具體對象ne
8、w。 方法就是對象所能執(zhí)行的操作,方法描述了對象執(zhí)行操作的算法,響應(yīng)消息的方法。 屬性就是類中所定義的數(shù)據(jù),它是對客觀世界試題所具有的性質(zhì)的抽象。,消息就是要求某個對象執(zhí)行在定義它的那個類中所定義的某個操作的規(guī)格說明。通常,消息由下述三部分組成: ?消息的接收者 ?接收對象應(yīng)采用的方法 ?方法所需要的參數(shù),例如,Mycircle是一個半徑4cm、圓心
9、位于(100,200)的Circle類的對象,也就是Circle類的一個實例,當(dāng)要求它以綠色在屏幕上顯示自己時,在C++語言中應(yīng)該向它發(fā)出下列消息:Mycircle.Show(GREEN);Mycircle是消息的接收者;Show是接收對象應(yīng)采用的方法;GREEN是方法所需要的參數(shù)。當(dāng)Mycircle接收到這個消息后,將執(zhí)行Circle類中所定義的Show操作。,封裝是指把對象的屬性和行為結(jié)合成一個獨立的系統(tǒng)單位,盡可能隱藏對象的
10、內(nèi)部細節(jié),只保留有限的對外接口是之與外部發(fā)生聯(lián)系。 封裝的思想是將對象內(nèi)部的信息進行屏蔽,人們只能通過對象界面上的允許操作對對象進行動作,改變對象的屬性及狀態(tài)。 對象的封裝使我們不必關(guān)心諸如對象行為是如何實現(xiàn)的這樣一些細節(jié);同時,實現(xiàn)了模塊化和信息隱藏,這樣保證了程序的可移植性和安全性,也有利于對復(fù)雜對象的管理。,廣義地說,繼承是指能夠直接獲得已有的性質(zhì)和特征,而不必重復(fù)的定義它們。在面向?qū)ο蟪绦蛟O(shè)計中,
11、繼承是子類自動地共享基類(父類)中定義的屬性和方法的機制。 面向?qū)ο蟪绦蛟O(shè)計的許多強有力的功能和突出的優(yōu)點,都來源于把類組成一個層次結(jié)構(gòu)的系統(tǒng)(類等級):一個類的上層可以有父類,下層可以有子類。這種層次結(jié)構(gòu)系統(tǒng)的一個重要性質(zhì)是繼承性,一個類直接繼承其父類的全部描述(數(shù)據(jù)和操作)。,鳥:全身有羽毛,后肢能行走,有翅膀能飛的一種動物。 鸝li:(黃鶯ying)羽毛黃色,從眼邊到頭后部有黑色斑紋,叫的聲音很好
12、聽的一種鳥。 鸝li:(黃鶯ying)羽毛黃色,從眼邊到頭后部有黑色斑紋,叫的聲音很好聽的一種全身有羽毛,后肢能行走,有翅膀能飛的動物。,實現(xiàn)繼承機制的原理:,,A的操作,,A的變量,類A,,,a1(類A的實例),類A,類A的實例變量,,,,,,,類B(A的子類),b1(類B的實例),從A繼承的特性,B的操作,B的變量,類B,從A繼承的實例變量,類B的實例變量,,,,,,,,繼承具有傳遞性,如果類C繼承類B,類B繼承類
13、A,則類C繼承類A。因此,一個類實際上繼承了它所在的類等級中在它上層的全部基類的所有描述,也就是說,屬于某類的對象除了具有該類所描述的性質(zhì)外,還具有類等級中該類上層全部基類描述的一切性質(zhì)。 當(dāng)一個類只允許有一個父類時,類的繼承是單一繼承;當(dāng)允許一個類有多個父類時,類的繼承是多重繼承。,在一般類中定義的屬性或方法被子類繼承以后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。 同一個屬性或方法在一般類及其各個子類
14、中具有不同的語義。,在OOP中,子類可以把父類的方法重新定義,使之具有新的功能,而方法名,參數(shù)、返回類型與父類相同。 這種技術(shù)稱為方法覆蓋(override)或者重寫(rewrite )。,修飾符 class 類名 [extends 父類名] [implements 接口名]{ 類型 成員變量; …… 修飾符 類型 成員方法 (參數(shù)列表) {
15、 類型 局部變量; 方法體; …… }},1.訪問控制符 public:公共類,說明這是一個公共類,可以被其它任何類引用和調(diào)用 不寫訪問控制符,表示類只能被本包的其它類訪問。,2.抽象類abstract 以abstract作為關(guān)鍵字,如果有的話,應(yīng)該放在訪問控制符后面,表示這個類是個抽象類。 抽象類不能直接產(chǎn)生
16、實例化一個對象,它只能被繼承。,2.抽象類abstract 抽象類是指包含至少一個抽象方法的類,并且抽象類不能被實例化,抽象類由修飾詞abstract聲明。 抽象方法是指有訪問修飾詞(public、private..)、返回值類型(int、void..)、方法名和參數(shù)列表,而無方法體且無包容方法體的花括號的方法。 如果類中有抽象方法,那么類必須聲明為抽象類,包含有抽象方法的類不能實例化。,抽象類只能由其它
17、類繼承使用,自己不能產(chǎn)生出對象實體。子類在繼承抽象類時,必須重寫其父類的抽象方法,給出具體的定義。 抽象類的作用是: (1)將許多類共享的數(shù)據(jù)和方法組成一個類,但不提供一個完整的實現(xiàn)。 (2)強迫子類實現(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)該放在訪問控制符后面,表示這個類是個最終類,也就是說最終類不能被繼承,不能再派生出其它子類。 String 就是個 final 類。,1.類的屬性 聲明類的屬性為簡單變量的格式是: [修飾符] 變量類型 變量名[=初值] 修飾符包括訪問控制修飾符、靜態(tài)修飾符static、
19、最終說明符final。,1.類的屬性 private:私有,此成員只能在類的內(nèi)部使用 default:也可以不寫訪問控制符,成員可被本包的其它類訪問。 protected:被保護,成員可被本包的所有類訪問,也可以被聲明它的類和派生的子類訪問(家庭成員)。 public:公共,成員可被所有類訪問。,2.方法聲明類的方法的格式是:[修飾符] 返回值類型 方法名(形式參數(shù)列表) [throws 異常名列表]{
20、 ……………..},2.方法 方法的修飾符很多,包括訪問控制符、靜態(tài)修飾符 static、抽象方法修飾符abstract、最終方法 final、同步修飾符synchronized、本地修飾符native。,3.方法的覆蓋 類層次結(jié)構(gòu)中,如果子類中的一個方法與父類中的方法有相同的方法名并具有相同數(shù)量和類型的參數(shù)列表,則稱子類中的方法覆蓋了父類中的方法。 通過 子類引用
21、覆蓋方法時,總是引用子類定義的方法,而父類中定義的方法被隱藏。,3.方法的覆蓋 在子類中,若要使用父類中被隱藏的方法,可以使用super關(guān)鍵字。,Page 59 例3-2 OverrideDemo.java,3.方法的重載 在Java類中可以創(chuàng)建名字相同,但是參數(shù)不同和返回值不同的幾個方法,這就是方法重(zhong\)載。Java系統(tǒng)通過參數(shù)和返回值來分辨具體是哪一個方法,Page 60
22、 例3-3 OverLoadDemo.java,在現(xiàn)實世界中類與它描述的對象有很明顯地區(qū)別,類是一個概念,而實際對象是一個實體。如某一個機械零件圖是一個類,按照設(shè)計圖加工制造的零件就是該類描述的一個對象。 類是對象的原型(抽象模型),對象是具有類指定特性和方法的實體,由類得到對象的過程稱為類的實例化。正如按同一機械零件圖可以造出很多相似的零件一樣,由同一類也可以生成許多對象。,對象和現(xiàn)實生活中的事物一樣,有它的產(chǎn)生、發(fā)展和消
23、亡的過程,在Java中稱之為對象的創(chuàng)建、使用和釋放,這一過程稱為對象的生命周期。,對象實例化的格式是:類型 對象名=new 類型([參數(shù)列表]); 其中,“類型”表示對象的類型,必須是復(fù)合類型,包括類、字符串等,“對象名”是一個合法的標識符?!皡?shù)列表”要根據(jù)類的形式參數(shù)確定,與之匹配。,public class Person { String name; int age;
24、 float salary; public void work ( ) { System.out.println("I'm a engineer!"); } } 生成一個對象 li 的方法是: Person li = new Person( );,1. 引用對象的屬性(變量) 類的成員(包括成員屬
25、性和成員方法)必須要在產(chǎn)生對象即實例化后才能被引用,引用的方法是: 對象名.成員 Person li = new Person( );li . name = "Li ming";new Person( ) . name = " Li ming ";,2.引用對象的方法 格式: 對象引用 . 方法名 ( [參數(shù)列表] )
26、;,Page 62 例3-4 TestPerson . java,1.基本數(shù)據(jù)類型的參數(shù)傳遞 基本類型的變量作為實參傳遞,并不能改變這個變量的值 。 方法中的形式參數(shù)相當(dāng)于局部變量,方法調(diào)用結(jié)束后自行釋放,不會影響到主程序中的同名變量 。,Page 63 例3-5 PassValue . java,2.引用變量的參數(shù)傳遞 引用數(shù)據(jù)類型的參數(shù)調(diào)用可以改
27、變對象的內(nèi)容 。,Page 63 例3-6 PassRef . java,Java運行時系統(tǒng)通過垃圾收集器周期性地釋放無用對象所占的內(nèi)存,以完成對象的清除 。 Java的垃圾收集器自動掃描對象的動態(tài)內(nèi)存空間,對正在使用的對象加上標記,將所有引用的對象作為垃圾收集起來并釋放 。,3.3.1 構(gòu)造方法的定義 構(gòu)造方法的特征: 具有與類相同的名稱 不含返回類型 不能在方法中用ret
28、urn語句返回一個值 在類實例化時,它會由系統(tǒng)自動調(diào)用,Page 64 例3-7 TestPerson. java,一個類的構(gòu)造方法可以有多個,而且還可以進行重載。,Page 65 例3-8 TestPerson. java,構(gòu)造方法總結(jié): 一個類的構(gòu)造方法可以有多個,而且還可以進行重載。 每個類至少有一個構(gòu)造方法,如果用戶沒有定義,系統(tǒng)自動產(chǎn)生一個默認
29、構(gòu)造方法,沒有參數(shù),也沒有方法體。 用戶可以定義構(gòu)造方法,如果定義了構(gòu)造方法,則系統(tǒng)不再提供默認構(gòu)造方法。 構(gòu)造方法一般是public的,不可定義為private的。,3.4.1 this this在方法體用來指向引用當(dāng)前正在執(zhí)行方法的那個對象實例 。 以例 3-8 舉例 s ? name person(String s
30、) { name = s; //s實際是代表名字的參數(shù) },3.4.1 this this(參數(shù)表),這個構(gòu)造函數(shù)就會調(diào)用同一個類的另一個相同的構(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 兩個類來封裝對字符串的各種操作。都是 final類,不能被其它類所繼承。String : 內(nèi)容不能變StringBuffer : 內(nèi)容可以改變,String s = " Hello Java World ! ";StringBuffer s = new StringBuffer("Hello&q
32、uot;) ;,StringBuffer.toString( ) -----> String Java提供了連接運算符 + ,可將其它各類型的數(shù)據(jù)轉(zhuǎn)換為字符串,并連接形成新的字符串,+運算是通過StringBuffer類和它的append方法實現(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)航標題,另一部分是結(jié)構(gòu)圖 1.導(dǎo)航欄導(dǎo)航欄包括Search、General Info、 API & Language、Guide to Fe
35、atures、Tool Docs、Demos/Tutorials共6個項目,2.JAVA平臺結(jié)構(gòu)JAVA平臺結(jié)構(gòu)由7部分組成,每一部分又包括若干鏈接對象 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等.壓縮文件請下載最新的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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《面向?qū)ο蟪绦蛟O(shè)計》
- 面向?qū)ο蟮某绦蛟O(shè)計
- 第10章面向?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è)計
- java語言與面向?qū)ο蟪绦蛟O(shè)計課后習(xí)題答案
- 第1章java語言與面向?qū)ο蟮某绦蛟O(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)四
評論
0/150
提交評論