面向對象技術_第1頁
面向對象技術_第2頁
面向對象技術_第3頁
面向對象技術_第4頁
面向對象技術_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

面向對象技術軟件學院2本章內容3.1面向對象技術基礎3.2Java語言的面向對象特性第2頁,共28頁,2024年2月25日,星期天軟件學院33.1面向對象技術基礎第3頁,共28頁,2024年2月25日,星期天軟件學院43.1.1面向對象的基本概念面向對象的基本思想

面向對象是一種新興的程序設計方法,或者是一種新的程序設計規(guī)范(paradigm),其基本思想是使用對象、類、繼承、封裝、消息等基本概念來進行程序設計。從現(xiàn)實世界中客觀存在的事物(即對象)出發(fā)來構造軟件系統(tǒng),并且在系統(tǒng)構造中盡可能運用人類的自然思維方式。開發(fā)一個軟件是為了解決某些問題,這些問題所涉及的業(yè)務范圍稱作該軟件的問題域。其應用領域不僅僅是軟件,還有計算機體系結構和人工智能等。

第4頁,共28頁,2024年2月25日,星期天軟件學院53.1.1面向對象的基本概念1.對象的基本概念

對象是系統(tǒng)中用來描述客觀事物的一個實體,它是構成系統(tǒng)的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。主動對象是一組屬性和一組服務的封裝體,其中至少有一個服務不需要接收消息就能主動執(zhí)行(稱作主動服務)。2.類的基本概念

類是具有相同屬性和服務的一組對象的集合,它為屬于該類的所有對象提供了統(tǒng)一的抽象描述,其內部包括屬性和服務兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性說明和服務說明兩個主要部分。3.消息 消息就是向對象發(fā)出的服務請求,它應該包含下述信息:提供服務的對象標識、服務標識、輸入信息和回答信息。服務通常被稱為方法或函數(shù)。第5頁,共28頁,2024年2月25日,星期天軟件學院63.1.2面向對象的基本特征1.封裝性

封裝性就是把對象的屬性和服務結合成一個獨立的相同單位,并盡可能隱蔽對象的內部細節(jié),包含兩個含義:

把對象的全部屬性和全部服務結合在一起,形成一個不可分割的獨立單位(即對象)。

信息隱蔽,即盡可能隱蔽對象的內部細節(jié),對外形成一個邊界〔或者說形成一道屏障〕,只保留有限的對外接口使之與外部發(fā)生聯(lián)系。

封裝的原則在軟件上的反映是:要求使對象以外的部分不能隨意存取對象的內部數(shù)據(jù)(屬性),從而有效的避免了外部錯誤對它的"交叉感染",使軟件錯誤能夠局部化,大大減少查錯和排錯的難度。第6頁,共28頁,2024年2月25日,星期天軟件學院73.1.2面向對象的基本特征2.繼承性

特殊類的對象擁有其一般類的全部屬性與服務,稱作特殊類對一般類的繼承。 一個類可以是多個一般類的特殊類,它從多個一般類中繼承了屬性與服務,這稱為多繼承。 在java語言中,通常我們稱一般類為父類(superclass,超類),特殊類為子類(subclass)。3.多態(tài)性

對象的多態(tài)性是指在一般類中定義的屬性或服務被特殊類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個屬性或服務在一般類及其各個特殊類中具有不同的語義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。第7頁,共28頁,2024年2月25日,星期天軟件學院83.1.3面向對象程序設計方法

OOA-ObjectOrientedAnalysis面向對象的分析OOD-ObjectOrientedDesign面向對象的設計OOI-ObjectOrientedImplementation面向對象的實現(xiàn)第8頁,共28頁,2024年2月25日,星期天軟件學院93.2Java語言的面向對象特性第9頁,共28頁,2024年2月25日,星期天軟件學院103.2.1類類是java中的一種重要的復合數(shù)據(jù)類型,是組成java程序的基本要素。它封裝了一類對象的狀態(tài)和方法,是這一類對象的原形。一個類的實現(xiàn)包括兩個部分:類聲明和類體1.類聲明:

[public][abstract|final]classclassName[extendssuperclassName][implementsinterfaceNameList]

{……}

其中,修飾符public,abstract,final說明了類的屬性,className為類名,superclassName為類的父類的名字,interfaceNameList為類所實現(xiàn)的接口列表。第10頁,共28頁,2024年2月25日,星期天軟件學院113.2.1類2.類體

類體定義如下:

classclassName

{[public|protected|private][static]

[final][transient][volatile]type

variableName;

//成員變量

[public|protected|private][static]

[final|abstract][native][synchronized]

returnTypemethodName([paramList])[throwsexceptionList]

{statements}

//成員方法

}

第11頁,共28頁,2024年2月25日,星期天軟件學院123.2.1類3.成員變量

成員變量的聲明方式如下:

[public|protected|private][static]

[final][transient][volatile]type

variableName;

//成員變量

其中,

static:靜態(tài)變量(類變量);相對于實例變量

final:常量

transient:暫時性變量,用于對象存檔,用于對象的串行化,見對象的串行化一節(jié)

volatile:貢獻變量,用于并發(fā)線程的共享

第12頁,共28頁,2024年2月25日,星期天軟件學院133.2.1類4.成員方法

方法的實現(xiàn)包括兩部分內容:方法聲明和方法體。

[public|protected|private][static]

[final

|abstract][native][synchronized]

returnTypemethodName([paramList])

[throwsexceptionList]

//方法聲明

{statements}

//方法體

方法聲明中的限定詞的含義:

static:類方法,可通過類名直接調用

abstract:抽象方法,沒有方法體

final:方法不能被重寫

native:集成其它語言的代碼

synchronized:控制多個并發(fā)線程的訪問第13頁,共28頁,2024年2月25日,星期天軟件學院143.2.1類

方法聲明

方法聲明包括方法名、返回類型和外部參數(shù)。其中參數(shù)的類型可以是簡單數(shù)據(jù)類型,也可以是復合數(shù)據(jù)類型(又稱引用數(shù)據(jù)類型)。

對于簡單數(shù)據(jù)類型來說,java實現(xiàn)的是值傳遞,方法接收參數(shù)的值,但不能改變這些參數(shù)的值。如果要改變參數(shù)的值,則用引用數(shù)據(jù)類型,因為引用數(shù)據(jù)類型傳遞給方法的是數(shù)據(jù)在內存中的地址,方法中對數(shù)據(jù)的操作可以改變數(shù)據(jù)的值。

例3-1說明了簡單數(shù)據(jù)類型與引用數(shù)據(jù)的區(qū)別。第14頁,共28頁,2024年2月25日,星期天軟件學院15【例3-1】

importjava.io.*;

publicclassPassTest{

floatptValue;

publicstaticvoidmain(Stringargs[]){

intval;

PassTestpt=newPassTest();

val=11;

System.out.println("OriginalIntValueis:"+val);

pt.changeInt(val);

//值參數(shù)

System.out.println("IntValueafterChangeis:"+val);/*值參數(shù)值的修改,沒有影響值參數(shù)的值*/

pt.ptValue=101f;

System.out.println("OriginalptValueis:"+pt.ptValue);

pt.changeObjValue(pt);//引用類型的參數(shù)

System.out.println("ptValueafterChangeis:"+pt.ptValue);/*引用參數(shù)值的修改,改變了引用參數(shù)的值*/

}

publicvoidchangeInt(intvalue){

value=55;

//在方法內部對值參數(shù)進行了修改

}

publicvoidchangeObjValue(PassTestref){

ref.ptValue=99f;

//在方法內部對引用參數(shù)進行了修改

}

}第15頁,共28頁,2024年2月25日,星期天軟件學院163.2.1類

方法體

方法體是對方法的實現(xiàn),它包括局部變量的聲明以及所有合法的Java指令。方法體中聲明的局部變量的作用域在該方法內部。若局部變量與類的成員變量同名,則類的成員變量被隱藏。

為了區(qū)別參數(shù)和類的成員變量,我們必須使用this。this-----用在一個方法中引用當前對象,它的值是調用該方法的對象。返回值須與返回類型一致,或者完全相同,或是其子類。當返回類型是接口時,返回值必須實現(xiàn)該接口。第16頁,共28頁,2024年2月25日,星期天軟件學院173.2.1類5.方法重載

方法重載是指多個方法享有相同的名字,但是這些方法的參數(shù)必須不同,或者是參數(shù)的個數(shù)不同,或者是參數(shù)類型不同。返回類型不能用來區(qū)分重載的方法。

參數(shù)類型的區(qū)分度一定要足夠,例如不能是同一簡單類型的參數(shù),如int與long。編譯器會根據(jù)參數(shù)的個數(shù)和類型來決定當前所使用的方法。6.構造方法

構造方法是一個特殊的方法。Java中的每個類都有構造方法,用來初始化該類的一個對象。

構造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型。

重載經常用于構造方法。

構造方法只能由new運算符調用3.2.2對象

類實例化可生成對象,對象通過消息傳遞來進行交互。消息傳遞即激活指定的某個對象的方法以改變其狀態(tài)或讓它產生一定的行為。一個對象的生命周期包括三個階段:生成、使用和消除。對象的清除

當不存在對一個對象的引用時,該對象成為一個無用對象。Java的垃圾收集器自動掃描對象的動態(tài)內存區(qū),把沒有引用的對象作為垃圾收集起來并釋放。System.gc();

System.exit();//terminatethecurrentJVM

當系統(tǒng)內存用盡或調用System.gc()要求垃圾回收時,垃圾回收線程與系統(tǒng)同步運行。第17頁,共28頁,2024年2月25日,星期天軟件學院183.2.3面向對象特性java語言中有三個典型的面向對象的特性:封裝性、繼承性和多態(tài)性。

1.封裝性

java語言中,對象就是對一組變量和相關方法的封裝,其中變量表明了對象的狀態(tài),方法表明了對象具有的行為。通過對象的封裝,實現(xiàn)了模塊化和信息隱藏。通過對類的成員施以一定的訪問權限,實現(xiàn)了類中成員的信息隱藏。

java類中的限定詞

java語言中有四種不同的限定詞,提供了四種不同的訪問權限。

1)private

類中限定為private的成員,只能被這個類本身訪問。

如果一個類的構造方法聲明為private,則其它類不能生成該類的一個實例。

2)default

類中不加任何訪問權限限定的成員屬于缺省的(default)訪問狀態(tài):friend,可以被這個類本身和同一個包中的類所訪問。第18頁,共28頁,2024年2月25日,星期天軟件學院193.2.3面向對象特性3)protected

類中限定為protected的成員,可以被這個類本身、它的子類(包括同一個包中以及不同包中的子類)和同一個包中的所有其他的類訪問。

4)public

類中限定為public的成員,可以被所有的類訪問。

【表3-1】

java中類的限定詞的作用范圍比較同一個類同一個包不同包的子類不同包非子類private*

default**

protected***

public****

第19頁,共28頁,2024年2月25日,星期天軟件學院203.2.3面向對象特性2.繼承性

通過繼承實現(xiàn)代碼復用。Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。繼承而得到的類稱為子類,被繼承的類稱為父類。子類不能繼承父類中訪問權限為private的成員變量和方法。子類可以重寫父類的方法,及命名與父類同名的成員變量。但Java不支持多重繼承,即一個類從多個超類派生的能力。

成員變量的隱藏和方法的重寫

子類通過隱藏父類的成員變量和重寫父類的方法,可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。第20頁,共28頁,2024年2月25日,星期天軟件學院213.2.3面向對象特性例如:

classSuperClass{

intx;…

voidsetX(){x=0;}…

}

classSubClassextendsSuperClass{

intx;

//隱藏了父類的變量x

voidsetX(){//重寫了父類的方法setX()

x=5;}….

}

注意:子類中重寫的方法和父類中被重寫的方法要具有相同的名字,相同的參數(shù)表和相同的返回類型,只是函數(shù)體不同。第21頁,共28頁,2024年2月25日,星期天軟件學院223.2.3面向對象特性

super

java中通過super來實現(xiàn)對父類成員的訪問,super用來引用當前對象的父類。Super的使用有三種情況:

1)訪問父類被隱藏的成員變量,如:

super.variable;

2)調用父類中被重寫的方法,如:

super.Method([paramlist]);

3)調用父類的構造函數(shù),如:

super([paramlist]);

第22頁,共28頁,2024年2月25日,星期天軟件學院23【例3-5】

importjava.io.*;

classSuperClass{

intx;

SuperClass(){

x=3;

System.out.println("inSuperClass:x="+x);

}

voiddoSomething(){

System.out.println("inSuperClass.doSomething()");

}

}

classSubClassextendsSuperClass{

intx;

SubClass(){

super();

//調用父類的構造方法

x=5;

//super()要放在方法中的第一句

System.out.println("inSubClass:x="+x);

}

voiddoSomething(){

super.doSomething();//調用父類的方法

System.out.println("inSubClass.doSomething()");

System.out.println("super.x="+super.x+"sub.x="+x);

}

}

publicclassInheritance{

publicstaticvoidmain(Stringargs[]){

SubClasssubC=newSubClass();

subC.doSomething();

}

}

第23頁,共28頁,2024年2月25日,星期天軟件學院243.2.3面向對象特性3.多態(tài)性

在java語言中,多態(tài)性體現(xiàn)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性(編譯時多態(tài))和方法重寫實現(xiàn)的動態(tài)多態(tài)性(運行時多態(tài))。

1)編譯時多態(tài)

在編譯階段,具體調用哪個被重載的方法,編譯器會根據(jù)參數(shù)的不同來靜態(tài)確定調用相應的方法。

2)運行時多態(tài)

由于子類繼承了父類所有的屬性(私有的除外),所以子類對象可以作為父類對象使用。程序中凡是使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調用子類的方法。

重寫方法的調用原則:java運行時系統(tǒng)根據(jù)調用該方法的實例,來決定調用哪個方法。對子類的一個實例,如果子類重寫了父類的方法,則運行時系統(tǒng)調用子類的方法;如果子類繼承了父類的方法(未重寫),則運行時系統(tǒng)調用父類的方法。

在例3-6中,父類對象a引用的是子類的實例,所以,java運行時調用子類B的callme方法。第24頁,共28頁,2024年2月25日,星期天軟件學院25【例3-6】

importjava.io.*;

classA{

voidcallme(){

System.out.println("InsideA'scallme()method");

}

}

classBextendsA{

voidcallme(){

System.out.println("InsideB'scallme()Method");

}

}

publicclassDispatch{

publicstaticvoidmain(Stringargs[]){

Aa=newB();

a.callme();

}

}

方法重寫時應遵循的原則:

1)改寫后的方法不能比被重寫的方法有更嚴格的訪問權限(可以相同)。

2)改寫后的方法不能比重寫的方法產生更多的例外。第25頁,共28頁,2024年2月25日,星期天軟件學院263.2.3面向對象特性4.其它

final關鍵字

final關鍵字可以修飾類、類的成員變量和成員方法,但final的作用不同。

1)final修飾成員變量:

final修飾變量,則成為常量,例如

finaltypevariableName;

修飾成員變量時,定義時同時給出初始值,且以后不能被修改,而修飾局部變量時不做要求。

2)final修飾成員方法:

final修飾方法,則該方法不能被子類重寫

finalreturnTypemethodName(paramList){...}

3)final類:

final修飾類,則類不能被繼承

finalclassfinalClassName{...}第26頁,共28頁,2024年2月25日,星期天軟件學院273.2.3面向對象特性

實例成員和類成員用static關鍵字可以聲明類變量和類方法,其格式如下:statictypeclassVar;staticreturnTypeclassMethod({paramlist}){

…}如果在聲明時不用static關鍵字修飾,則聲明為實例變量和實例方法。1)實例變量和類變量每個對象的實例變量都分配內存,通過該對象來訪問這些實例變量,不同的實例變量是不同的。類變量僅在生成第一個對象時分配內存,所有實例對象共享同一個類變量,每個實例對象對類變量的改變都會影響到其它的實例對象。類變量可通過類名直接訪問,無需先生成一

溫馨提示

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

評論

0/150

提交評論