版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第二章 面向?qū)ο蠹夹g(shù),朱輝, 計(jì)算機(jī)學(xué)院網(wǎng)絡(luò)工程,2#410,本章關(guān)鍵字,OO方法(Object-Oriented Method,面向?qū)ο蟮姆椒?: 是一種把面向?qū)ο蟮乃枷霊?yīng)用于軟件開發(fā)過程中,指導(dǎo)開發(fā)活動(dòng)的系統(tǒng)方法,是建立在“對(duì)象”概念基礎(chǔ)上的方法學(xué)。 類: 使用抽象語言對(duì)客觀事物的描述, 包括了客觀事物的屬性和建立在屬性上的行為。,第二章 面向?qū)ο蠹夹g(shù),面向?qū)ο蠡A(chǔ) JAVA和面向?qū)ο?2.1 面向?qū)ο蠡A(chǔ),面向?qū)ο?Object Oriented,OO)是當(dāng)前計(jì)算機(jī)界關(guān)心的重點(diǎn),它是90年代軟件開發(fā)方法的主流。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開發(fā),擴(kuò)展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)
2、、交互式界面、應(yīng)用結(jié)構(gòu)、應(yīng)用平臺(tái)、分布式系統(tǒng)、網(wǎng)絡(luò)管理結(jié)構(gòu)、CAD技術(shù)、人工智能等領(lǐng)域。,OO介紹,起初,“面向?qū)ο蟆笔菍V冈诔绦蛟O(shè)計(jì)中采用封裝、繼承、抽象等設(shè)計(jì)方法。 面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開發(fā)的各個(gè)方面。如,面向?qū)ο蟮姆治觯∣OA,Object Oriented Analysis),面向?qū)ο蟮脑O(shè)計(jì)(OOD,Object Oriented Design)、以及我們經(jīng)常說的面向?qū)ο蟮木幊虒?shí)現(xiàn)(OOP,Object Oriented Programming)。,傳統(tǒng)開發(fā)方法存在問題,1.軟件重用性差; 2.軟件可維護(hù)性差; 3.開發(fā)出的軟件不能滿足用戶多變需要。,面向?qū)ο蟮幕靖拍?對(duì)象O
3、bject,對(duì)象:對(duì)象是人們要進(jìn)行研究的任何事物,從最簡(jiǎn)單的整數(shù)到復(fù)雜的飛機(jī)等均可看作對(duì)象,它不僅能表示具體的事物,還能表示抽象的規(guī)則、計(jì)劃或事件。 對(duì)象的狀態(tài)和行為:對(duì)象具有狀態(tài),對(duì)象用數(shù)據(jù)值來描述它的狀態(tài)。對(duì)象還有操作,用于改變對(duì)象的狀態(tài),對(duì)象及其操作就是對(duì)象的行為。對(duì)象實(shí)現(xiàn)了數(shù)據(jù)和操作的結(jié)合,使數(shù)據(jù)和操作封裝于對(duì)象的統(tǒng)一體中。,面向?qū)ο蟮幕靖拍?類class,類:具有相同或相似性質(zhì)的對(duì)象的抽象就是類。因此,對(duì)象的抽象是類,類的具體化就是對(duì)象,也可以說類的實(shí)例是對(duì)象。 類具有屬性,它是對(duì)象的狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來描述類的屬性。類具有操作,它是對(duì)象的行為的抽象,用操作名和實(shí)現(xiàn)該操作的方法
4、來描述。,面向?qū)ο蟮幕靖拍睿ɡm(xù)),類的結(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)系。,面向?qū)ο蟮幕靖拍睿ɡm(xù)),消息:對(duì)象之間進(jìn)行通信的結(jié)構(gòu)叫做消息。 在對(duì)象的操作中,當(dāng)一個(gè)消息發(fā)送給某個(gè)對(duì)象時(shí),消息包含接收對(duì)象去執(zhí)行某種操作的信息。 發(fā)送一條消息至少要包括說明接受消息的對(duì)象名、發(fā)送給該對(duì)象的消息名(即對(duì)象名、方法名)。一般還要對(duì)參數(shù)加以說明,參數(shù)可以是認(rèn)識(shí)
5、該消息的對(duì)象所知道的變量名,或者是所有對(duì)象都知道的全局變量名。,面向?qū)ο缶幊痰奶攸c(diǎn),封裝性(Encapsulation): 對(duì)象將數(shù)據(jù)和處理數(shù)據(jù)的操作結(jié)合在一起構(gòu)成一個(gè)整體. 對(duì)象的使用者只能看見對(duì)象的外部特性, 而看不到內(nèi)部實(shí)際構(gòu)造. 從而減少了程序之間的依賴, 降低程序的復(fù)雜度, 便于修改, 提高了可靠性; 繼承性(Inheriance): 類之間實(shí)現(xiàn)層次化結(jié)構(gòu), 上層為父類, 下層為子類. 子類可以繼承父類的變量和方法, 即靈活有提高效率;,面向?qū)ο缶幊痰奶攸c(diǎn)(續(xù)),多態(tài)性(Ploymorphism): 對(duì)象的方法通過參數(shù)傳遞. Java通過覆蓋和重載實(shí)現(xiàn)多態(tài)性,通過方法的重載, 一個(gè)類
6、中可以有多個(gè)具有相同名字的方法,通過傳送給它們不同個(gè)數(shù)和不同類型的參數(shù)來決定使用哪種方法. 通過覆蓋,子類可以重新實(shí)現(xiàn)父類的方法, 具有自己的特征; 通信相關(guān)性: 一個(gè)對(duì)象包含多個(gè)方法(行為), 類之間的通信實(shí)現(xiàn)了消息的傳遞. 其三要素: 信息接收對(duì)象; 接收對(duì)象使用什么方法; 該方法的參數(shù)。,2.2 Java和面向?qū)ο?Java是面向?qū)ο箢愓Z言, 不是純面向?qū)ο笳Z言, 原因”存在簡(jiǎn)單數(shù)據(jù)類型,例如:int, float”。 類class包括了:成員變量和成員方法; 繼承extends關(guān)系:?jiǎn)卫^承; 采用implments實(shí)現(xiàn)多接口interface。,Java中的對(duì)象基本概念,對(duì)象objec
7、t: 是把數(shù)據(jù)及其相關(guān)的操作封裝在一起所構(gòu)成的實(shí)體, 對(duì)象的數(shù)據(jù)稱為”成員變量”, 對(duì)象的操作被封裝在函數(shù)中, 稱為對(duì)象的”成員函數(shù)”或”方法”. 類class: 基于對(duì)象之上的抽象概念, 類本質(zhì)上被認(rèn)為是對(duì)象的描述, 是創(chuàng)建對(duì)象的”模板” 對(duì)象實(shí)例instance: 是對(duì)象的另一種名稱, 創(chuàng)建某個(gè)對(duì)象實(shí)例實(shí)際上就是定義一個(gè)該類的變量 方法method: 類的專門函數(shù), 是對(duì)對(duì)象實(shí)例數(shù)據(jù)的操作.,類class的概念,類class是Java程序的基本模塊,由成員屬性和成員方法組成,方法定義了與被封裝的屬性進(jìn)行交互的方式。 類通過定義包含屬性以及方法,增加代碼的可重用性。,類的結(jié)構(gòu),類的結(jié)構(gòu)分為兩
8、個(gè)部分: 類的聲明, 類體 class className classBody 類體是類的主體, 包含變量說明和方法. 在類中通常是先列出成員變量, 然后是成員方法. 成員變量必須放于類體中, 且不被包含在方法中。,類的聲明,格式: modifier class class_name extends parent_class implements interface /class description 關(guān)鍵字:class extends implements 類只能實(shí)現(xiàn)單繼承, 多接口,abstract:表示為一個(gè)抽象類, 其不含有代碼方法, 需要在以后的子類中重載實(shí)現(xiàn), 這中類不能實(shí)例化,
9、 但可以繼承. 其子類必須實(shí)例化abstract方法, 或自己也是abstract. final:聲明該類不能被繼承,即沒有子類。例如:String字符串和Array數(shù)組類 class className:關(guān)鍵字class告訴編譯器表示類的聲明以及類名是className。 extends superClassName:extends 語句繼承superClassName為該類的父類。,聲明類,類修飾符modifier,類聲明中的修飾符決定了類在程序中被處理的方式。在聲明類的時(shí)候, 可以是單個(gè)修飾符或者合法的組合. public 聲明類是公有的, 可以被任何對(duì)象存取, 可以被任何類所繼承. 在
10、一個(gè)java源文件中, 只有一個(gè)public型的類聲明 final表示該類不能被繼承, 空修飾符, 為默認(rèn)方式, 即不使用以上任何一種修飾符. 修飾符組合 public final class bar合法 abstract final class bar非法,自定義類,class myDate public static void main(String args) System.out.println(“Hello World.”); 該類只包含主方法,即main(String args) public final class myDate 正確 abstract final class m
11、yDate 錯(cuò)誤,類的繼承概念,Java通過子類實(shí)現(xiàn)繼承。繼承指的是某個(gè)對(duì)象所屬的類在層次結(jié)構(gòu)中占一定的位置,具有上一層次對(duì)象的某些屬性。 在Java中,所有的類都是通過直接或間接地繼承java.lang.Object類得到的。,在類的繼承過程中,被繼承的類為父類或超類,繼承得到的類為子類。 父類包括所有直接或間接被繼承的類。子類繼承父類的狀態(tài)和行為,也可以修改父類的狀態(tài)或重寫父類的行為(方法),同時(shí)也可以再添加新的狀態(tài)和行為(方法)。 需要注意的是,Java與C+不同,不支持多重繼承。同時(shí),為了使繼承更為靈活和完善,Java支持最終類和抽象類的概念。,類的繼承概念,所謂的最終類,同數(shù)結(jié)構(gòu)中的
12、樹葉節(jié)點(diǎn)一樣,就是不允許對(duì)它進(jìn)行擴(kuò)展的類,也就是說不可以有該類的子類。實(shí)際使用過程中,可以在定義類時(shí)用關(guān)鍵字final對(duì)它加以說明。 引入最終類的好處是為了提高系統(tǒng)安全性,因?yàn)槿绻兄匾男畔⒌念愒试S繼承的話,就可能被不懷好意的攻擊者加以利用,從而重要的數(shù)據(jù)就可能被非法修改或泄密。為了防止這些情況發(fā)生,可以將那些重要的類說明為最終類,避免非安全事件的發(fā)生。,類的繼承概念,Java中,類層次的另一個(gè)概念就是抽象類,它與最終類相對(duì),需要子類繼承完善。在類的說明中我們已討論過,這里不再詳細(xì)說明,只是有幾點(diǎn)注意事項(xiàng)希望讀者留意: 構(gòu)造方法不能定義為抽象方法。 最終方法不能說明為抽象方法。 static
13、和private修飾符不能用于抽象方法。 不能重載父類中的抽象方法。,類的繼承概念,成員屬性,成員屬性即類的屬性,成員屬性用于描述該類的參數(shù),有變量和常量。其包含在類中,而不包含在方法中?!景诜椒ㄖ凶兞渴蔷植孔兞俊?成員屬性,類的成員屬性格式為 Modifier type variableName; 在定義中變量的修飾符Modifier控制變量的類型 變量的訪問權(quán)限public, private, protected 是否為靜態(tài)變量static, 如果這樣定義, 說明該變量被從此類創(chuàng)建的所有對(duì)象共享使用, 而且不需要實(shí)例化,直接使用. 是否為常量final,訪問控制權(quán)限表,3個(gè)特殊的系統(tǒng)變
14、量,this指本類 super指直接的父類 null表示為空數(shù)據(jù) String studentName = new String(“李明”); studentName = null;,構(gòu)造方法和析構(gòu)方法,每個(gè)類中都有一個(gè)特殊的方法, 稱為構(gòu)造方法. 該方法的功能是對(duì)從這個(gè)類新創(chuàng)建的對(duì)象分配內(nèi)存空間和進(jìn)行初始化. 所以每次創(chuàng)建對(duì)象, 系統(tǒng)自動(dòng)調(diào)用相應(yīng)類的構(gòu)造方法 構(gòu)造方法的名稱與類的名稱相同, 只能有入口參數(shù), 沒有返回值. 實(shí)際上其名字為init, 由編譯器隱含提供. 一個(gè)類中常常有多個(gè)構(gòu)造方法, 通過不同的入口參數(shù)進(jìn)行區(qū)分. 不同的構(gòu)造方法可以創(chuàng)建不同的對(duì)象. 這種稱為構(gòu)造方法重載 其中一個(gè)
15、構(gòu)造方法不帶入口參數(shù), 稱為默認(rèn)的構(gòu)造方法.,構(gòu)造方法舉例,構(gòu)造方法舉例,例如, 標(biāo)準(zhǔn)的Rectangle public Rectangle(); public Rectangle(int value, int value); publie Rectangle(int value, int value, int value); 構(gòu)造方法沒有返回值public void Rectangle();是錯(cuò)誤的; 如果類并沒有定義構(gòu)造方法, 這個(gè)時(shí)候系統(tǒng)自動(dòng)提供一個(gè)默認(rèn)的構(gòu)造方法。,析構(gòu)方法,和構(gòu)造方法對(duì)應(yīng), 在類中存在一個(gè)析構(gòu)方法finalize. 當(dāng)對(duì)象無用需要銷毀, 編譯器自動(dòng)調(diào)用對(duì)象的final
16、ize方法. 析構(gòu)方法完成一些善后工作, 如關(guān)閉文件等, 不能執(zhí)行用戶操作或與其他對(duì)象的交互. class Rectangle finalize() / do some cleanup job 因?yàn)镴ava是自動(dòng)銷毀對(duì)象和回收內(nèi)存, 所以在類中一般不寫析構(gòu)方法.,方法定義,方法的定義 modifier return_value method_name(parameter_list) method_body; ,方法修飾符,方法重載ovreload,重載是Java的一種多態(tài)性的表現(xiàn); 重載指可以定義多個(gè)具有相同名字的方法, 但是參數(shù)列表不同, 即參數(shù)個(gè)數(shù)或者參數(shù)類型不同; 當(dāng)方法被調(diào)用的時(shí)候,
17、根據(jù)參數(shù)來決定使用哪個(gè)方法.; 例如: void getInput(int x) void getInput(float x) void getInput(int x, int y),是否為重載的判斷方法,在同一個(gè)類的多個(gè)方法; 這些方法具有相同的方法名稱; 方法中的參數(shù)個(gè)數(shù)或者類型不同; 方法的返回值不能單獨(dú)作為方法重載的判斷條件。,方法覆蓋,方法覆蓋和方法重載不同, 都屬于多態(tài)性; 方法覆蓋指子類中可以定義一個(gè)和父類中某個(gè)方法相同名的方法; 這樣子類中使用新的自己定義的方法, 如果需要調(diào)用父類的方法則使用super.method_name。,是否為覆蓋的判斷方法,只存在于有繼承關(guān)系的父類和
18、子類中方法; 方法都具有相同的方法名稱; 方法中的參數(shù)個(gè)數(shù)以及類型相同; 方法的返回值也必須是相同的。,Java在運(yùn)算符中的多態(tài)性,“+” 可以作為 數(shù)值類運(yùn)算符和字符串連接符 “-”可以作為 數(shù)值類運(yùn)算符和取反操作符 “.”可以進(jìn)行 屬性運(yùn)算和方法運(yùn)算,主方法main,在Java的Application應(yīng)用程序中, 必須含有一個(gè)可以被外界所直接調(diào)用的類(主類), 該主類中必須含有main方法, 整個(gè)應(yīng)用程序就是從該方法開始執(zhí)行的. 在Java的Application應(yīng)用程序中,一般只有一個(gè)main方法. 如果存在多個(gè), 則最前面的main有效 格式: public static void m
19、ain(String args),Java中,類層次的另一個(gè)概念就是抽象類,它與最終類相對(duì),需要子類繼承完善。在類的說明中我們已討論過,這里不再詳細(xì)說明,只是有幾點(diǎn)注意事項(xiàng)希望讀者留意: 構(gòu)造方法不能定義為抽象方法。 最終方法不能說明為抽象方法。 static和private修飾符不能用于抽象方法。 不能重載父類中的抽象方法。,抽象abstract類,接口interface的格式,格式為: modifer interface interface_name extends father_interface 關(guān)鍵字:interface extends 接口可以實(shí)現(xiàn)多繼承,不能實(shí)現(xiàn)接口,final修飾符,final修飾類表示該類為最終類, 不能被繼承 final Horse extends Animal final修飾變量, 說明該變量為常量 final int MaxMonth = 12; final修飾方法, 表明該方法不能被覆蓋 final bollean GetSwitchState() ,對(duì)象設(shè)計(jì)舉例,消息實(shí)體,對(duì)象設(shè)計(jì)舉例(1),要求設(shè)計(jì)一個(gè)對(duì)網(wǎng)絡(luò)
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉儲(chǔ)公司貨架安全管理制度
- 北京2025年北京市農(nóng)林科學(xué)院高層次人才引進(jìn)34人筆試歷年參考題庫附帶答案詳解
- 內(nèi)江四川內(nèi)江市市中區(qū)精神病醫(yī)院招聘員額專業(yè)技術(shù)人員13人筆試歷年參考題庫附帶答案詳解
- 佛山2025年廣東佛山市南海區(qū)里水鎮(zhèn)社區(qū)衛(wèi)生服務(wù)中心醫(yī)務(wù)人員招聘2人筆試歷年參考題庫附帶答案詳解
- 樂山四川樂山馬邊縣赴成都師范學(xué)院招聘2025年國(guó)家“優(yōu)師”畢業(yè)生6人筆試歷年參考題庫附帶答案詳解
- 東莞2025年廣東東莞市文聯(lián)自主招聘聘用人員筆試歷年參考題庫附帶答案詳解
- 贛州市人力資源有限公司公開招聘勞務(wù)派遣制工作人員筆試參考題庫附帶答案詳解(3卷)
- 2026國(guó)家能源投資集團(tuán)高校畢業(yè)生統(tǒng)招6400人(廣東80人)筆試參考題庫附帶答案詳解(3卷)
- 2025黑龍江大興安嶺林業(yè)集團(tuán)公司“綠色通道”引進(jìn)人才40人筆試歷年參考題庫附帶答案詳解
- 2026福建水投集團(tuán)明溪水務(wù)有限公司招聘1人筆試參考題庫附帶答案詳解
- 2026年年長(zhǎng)租公寓市場(chǎng)分析
- 生態(tài)環(huán)境監(jiān)測(cè)數(shù)據(jù)分析報(bào)告
- 2025年下半年四川成都溫江興蓉西城市運(yùn)營(yíng)集團(tuán)有限公司第二次招聘人力資源部副部長(zhǎng)等崗位5人考試參考試題及答案解析
- 煤炭裝卸施工方案(3篇)
- 安徽省蚌埠市2024-2025學(xué)年高二上學(xué)期期末考試 物理 含解析
- 八年級(jí)歷史上冊(cè)小論文觀點(diǎn)及范文
- 重慶康德卷2025-2026學(xué)年高一數(shù)學(xué)第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 浙江省杭州市蕭山區(qū)2024-2025學(xué)年六年級(jí)上學(xué)期語文期末試卷(含答案)
- 設(shè)備隱患排查培訓(xùn)
- 2025至2030磷酸二氫鈉行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 國(guó)家事業(yè)單位招聘2025中國(guó)農(nóng)業(yè)科學(xué)院植物保護(hù)研究所招聘12人筆試歷年參考題庫附帶答案詳解
評(píng)論
0/150
提交評(píng)論