chapter01面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁(yè)
chapter01面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁(yè)
chapter01面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁(yè)
chapter01面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁(yè)
chapter01面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(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章

面向?qū)ο蟪绦蛟O(shè)計(jì)導(dǎo)論本章提供背景性、補(bǔ)充性的材料。讓大家看清面向?qū)ο蟪绦蛟O(shè)計(jì)方法的完整面貌,在沒(méi)有理解大背景之前就去編寫面向?qū)ο蟮某绦?,?huì)有點(diǎn)不舒服。因此會(huì)對(duì)許多概念進(jìn)行介紹。本章內(nèi)容比較C和JAVA的不同面向?qū)ο蟮奶卣?封裝與信息隱藏

繼承

多態(tài)性

JAVA其他特征JAVA技術(shù)及應(yīng)用領(lǐng)域?yàn)槭裁床皇荂++1.1C和JAVA的不同C是面向過(guò)程,java是面向?qū)ο蟆ntmax(intnum1,intnum2){if(num1>num2)returnnum1;elsereturnnum2;}1.1C和JAVA的不同面向?qū)ο笃鋵?shí)是現(xiàn)實(shí)世界模型的自然延伸?,F(xiàn)實(shí)世界是由一個(gè)一個(gè)對(duì)象組成;對(duì)象之間通過(guò)消息(請(qǐng)求和服務(wù))相互協(xié)作,完成系統(tǒng)的功能.1.1C和JAVA的不同C和java應(yīng)用的范圍不同c主要應(yīng)用在比較底層的一些東西,比如操作系統(tǒng),驅(qū)動(dòng)程序,嵌入式開發(fā)。

java應(yīng)用比較表層,主要在網(wǎng)絡(luò),企業(yè)級(jí)應(yīng)用ERP,大型信息系統(tǒng)等。

學(xué)習(xí)c和java沒(méi)有任何沖突,學(xué)好了c和java幾乎可以解決計(jì)算機(jī)所有的問(wèn)題。抽象化的過(guò)程所有的編程語(yǔ)言都提供抽象。匯編語(yǔ)言是對(duì)計(jì)算機(jī)的抽象,隨后許多語(yǔ)言(例如FORTRAON,BASIC和C)是對(duì)匯編語(yǔ)言的抽象,但是這是一種初級(jí)的抽象。仍然要求你從計(jì)算機(jī)的角度,而不是從待解決的問(wèn)題的角度來(lái)考慮。另外一種建立機(jī)器模型的方式,就是建立待解決問(wèn)題的模型。LISP和PROLOG抽象化過(guò)程面向?qū)ο蠓ǜM(jìn)一步,提供各式各樣的工具,讓程序員能在問(wèn)題空間表述各種元素。這樣程序員就不會(huì)被被限制在特殊問(wèn)題上了。我們將問(wèn)題空間的元素同它在解決空間的表述稱為“對(duì)象”。面向?qū)ο蠓椒ǖ奶卣魅f(wàn)物皆對(duì)象。理論上可以將待解決問(wèn)題總的所有觀念性組成都變成程序中的對(duì)象。程序就是一組互相之間傳遞消息,告訴對(duì)方該干什么的對(duì)象。消息是調(diào)用專署某個(gè)對(duì)象的方法的請(qǐng)求。每個(gè)對(duì)象都利用別的對(duì)象來(lái)組建它自己的記憶??梢酝ㄟ^(guò)將已有的對(duì)象打成一個(gè)包,來(lái)創(chuàng)建新的對(duì)象。面向?qū)ο蠓椒ǖ奶卣鲗?duì)象都有類型。任何對(duì)象都是某個(gè)類的實(shí)例。所有屬于同一類型的對(duì)象都能接受相同的信息。每個(gè)對(duì)象都有接口Lightlt=newLight();lt.on();接口(interface)規(guī)范了你能夠?qū)?duì)象發(fā)出的請(qǐng)求。不過(guò)還要有程序代碼來(lái)滿足這些請(qǐng)求。這些程序代碼加上被隱藏的數(shù)據(jù),構(gòu)成了實(shí)現(xiàn)(implementation)被隱藏的實(shí)現(xiàn)細(xì)節(jié)java使用三個(gè)關(guān)鍵字來(lái)設(shè)定class的訪問(wèn)權(quán)限:public、private、protected。Public定義后,每個(gè)任都可以使用Private除了類型開發(fā)者可以在該類型的memberfunctions中使用,沒(méi)有任何人可以使用。Protected和private相似,不過(guò)class的繼承者可以訪問(wèn)protectedmembers,確無(wú)法訪問(wèn)privatememberJava缺省的是friendly訪問(wèn)權(quán)限,在同一個(gè)package中可以訪問(wèn)其他的calsses重復(fù)運(yùn)用實(shí)現(xiàn)代碼程序代碼的重復(fù)運(yùn)用,是面向?qū)ο蟪绦蛟O(shè)計(jì)最大的優(yōu)點(diǎn)之一。重復(fù)運(yùn)用某個(gè)class最簡(jiǎn)單的方式就是直接使用其產(chǎn)生的對(duì)象。此外也可以把某個(gè)class對(duì)象置于另一個(gè)class內(nèi)。繼承:重復(fù)運(yùn)用接口當(dāng)你繼承既有的類型時(shí),便創(chuàng)造了新的類型,后者不僅可以包含前者所有的成員(但是private成員會(huì)被隱藏起來(lái),而且無(wú)法訪問(wèn)),更重要的是它同時(shí)也復(fù)制了基類的接口。繼承:重復(fù)運(yùn)用接口繼承:在已有類(父類或超類)的基礎(chǔ)上派生出新的類(子類),新的類能夠吸收已有類的屬性和行為,并擴(kuò)展新的能力。改變繼承來(lái)的方法定義一個(gè)幾何圖形類Shape,它具有“畫圖”行為,用draw()表示。但具體畫什么圖并不確定;

定義Shape類的一些子類如Circle圓和Rectangle矩形。

在子類中“畫圖”的具體行為draw()可重新定義為:圓類中draw()畫圓;矩形類中draw()畫矩形。

定義:Shapes;//s作為引用變量可指向Circle圓類的對(duì)象,也可指向Rectangle矩形類的對(duì)象。執(zhí)行代碼:s.draw();

//s調(diào)用draw()方法,s指向?qū)ο蟛煌瑫?huì)

畫出不同的圖形(圓或矩形)JAVA其他特征上面我們介紹了OOP的幾個(gè)最基本特征,既封裝、繼承和多態(tài)。下面我們繼續(xù)介紹一些問(wèn)題,他們的重要性不亞于上述幾點(diǎn)。對(duì)象的創(chuàng)建,使用和生命周期對(duì)象的生成和毀滅,C++認(rèn)為效率是最重要的,將對(duì)象置于stack或靜態(tài)存儲(chǔ)區(qū)中,于是程序編寫是便要決定對(duì)象的存儲(chǔ)空間和壽命第二種方法是從一塊名為heap的內(nèi)存中去動(dòng)態(tài)的產(chǎn)生對(duì)象Java使用了第二種方法,當(dāng)要產(chǎn)生對(duì)象時(shí)就用new來(lái)動(dòng)態(tài)的產(chǎn)生對(duì)象的實(shí)體。對(duì)象的壽命,

c++必須自行編寫代碼來(lái)摧毀對(duì)象,這樣會(huì)產(chǎn)生內(nèi)存泄漏Java使用了所謂的“垃圾回收器機(jī)制”,當(dāng)對(duì)象不在被使用的時(shí)候會(huì)被自動(dòng)察覺(jué)并消滅。Collection和迭代器(iterator)如果你不知道將用到多少個(gè)對(duì)象,或者不知道該對(duì)象該存活多久,才能解決某個(gè)問(wèn)題,那么你同樣無(wú)法知道該如何存儲(chǔ)這些對(duì)象。解決方法對(duì)于大多數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)問(wèn)題:產(chǎn)生另一種類型的對(duì)象,這個(gè)新類型對(duì)象存儲(chǔ)著一些reference,代表其他對(duì)象。通過(guò)array完成同樣的事情。Java使用第一個(gè)方法,這個(gè)新類型稱為容器,這個(gè)新式對(duì)象會(huì)適當(dāng)擴(kuò)展自己的容量,以便容納你置入的所有的對(duì)象,你不需要知道將來(lái)會(huì)置入多少個(gè)對(duì)象于容器中,只要產(chǎn)生容器,它就會(huì)自行料理細(xì)節(jié)。Collection和迭代器(iterator)Java提供了許多不同的容器來(lái)符合各類需求。例如vertor(arraylist,linkedlist,set,queues,hashtables、trees等。迭代器用戶可以通過(guò)迭代器操作或者比較一組元素,迭代器的作用就是用來(lái)選擇容器中的元素,并將這些元素呈現(xiàn)給迭代器使用者??蓪ⅰ比萜鲗?shí)現(xiàn)細(xì)節(jié)”和”對(duì)容器進(jìn)行訪問(wèn)動(dòng)作之程序代碼”分離開來(lái)。單根繼承體系1.單根繼承體系中的所有對(duì)象都有共通接口,所以最終它們都屬于相同的type。2.單根繼承體系保證所有對(duì)象都擁有某些功能。3.單根繼承體系也使垃圾回收器的實(shí)現(xiàn)更加容易。4.由于所有的對(duì)象保證會(huì)有執(zhí)行期型別信息(RTTI)所以我們不會(huì)因?yàn)闊o(wú)法判斷對(duì)象的確切型別而陷入動(dòng)纏不得的僵局。異常處理:面對(duì)錯(cuò)誤的產(chǎn)生異常處理機(jī)制將錯(cuò)誤處理問(wèn)題直接內(nèi)嵌于程序語(yǔ)言中,有時(shí)甚至直接內(nèi)嵌于操作系統(tǒng)中。所謂異常(exception)是一種對(duì)象,可在錯(cuò)誤發(fā)生點(diǎn)被拋出(throw),并在適當(dāng)?shù)某粤Τ绦蛑斜徊蹲?。多線程將問(wèn)題切割為多個(gè)可獨(dú)立執(zhí)行的片斷,便能夠讓整個(gè)程序更具反應(yīng)力。這些”可獨(dú)立執(zhí)行的片斷”便是所謂的線程(threads),而上述這種觀念便被成為”多線程”持久性對(duì)象生成之后,只要你還需要它,它就會(huì)持續(xù)存在。但是一旦程序結(jié)束,它就不再有生存環(huán)境了。持久性就是讓對(duì)象可以在程序非執(zhí)行狀態(tài)下依舊存在,依舊保有其信息。Java提供了”輕量級(jí)持久性”,可以輕松將對(duì)象存儲(chǔ)于磁盤,并于日后取出,但是還是要自己調(diào)用存儲(chǔ)、取回動(dòng)作。1.2類與對(duì)象面向?qū)ο蟪绦蛟O(shè)計(jì):將客觀事物(或?qū)嶓w)看作具有屬性和行為(或稱服務(wù))的對(duì)象(object),通過(guò)抽象找出同一類對(duì)象的共同屬性(靜態(tài)特征)和行為(動(dòng)態(tài)特征),而形成類(class)的概念。程序的執(zhí)行,表現(xiàn)為一組對(duì)象之間的交互通信。對(duì)象之間通過(guò)公共接口進(jìn)行通信,從而完成系統(tǒng)功能。類是相同對(duì)象的集合的描述。例如,類Human就是現(xiàn)實(shí)世界中人(對(duì)象)的集合,我、你、他都是Human的對(duì)象。分析類Human的所有對(duì)象——人,得到對(duì)象的共同的數(shù)據(jù)屬性和行為,如下所示:數(shù)據(jù)屬性:編號(hào)、姓名、年齡,…

行為:吃飯、走路、跳舞,…抽象是對(duì)具體對(duì)象進(jìn)行概括,抽象出這一類對(duì)象的公共性質(zhì)并加以描述的過(guò)程。先注意問(wèn)題的本質(zhì)及描述,其次是實(shí)現(xiàn)過(guò)程或細(xì)節(jié)。1.2類與對(duì)象(續(xù))定義Human類:classHuman{intno;Stringname;intage;…voideat(){…}

…}Human被稱作類名。no,name,age被稱作域(fields)或變量,eat()被稱作方法(methods),它們都是類的成員。1.2類與對(duì)象(續(xù))在面向?qū)ο蟮木幊陶Z(yǔ)言中,類是一個(gè)數(shù)據(jù)類型對(duì)象是類的實(shí)例(instance)。引用變量:具有類類型的變量被稱作對(duì)象引用(objectreference)。例如,Humanp1=newHuman(1,“張三”,20,…);p1被稱作對(duì)象引用變量,newHuman(1,”張三“,20,…)被稱作Human的對(duì)象。對(duì)象對(duì)象:是用來(lái)描述現(xiàn)實(shí)世界中實(shí)際存在的事物的實(shí)體,它是用來(lái)構(gòu)成系統(tǒng)的一個(gè)單位。對(duì)象由一組屬性和一組行為(操作或服務(wù))構(gòu)成。對(duì)象具有固定的對(duì)外接口.一組屬性和操作的集合.對(duì)象之間通過(guò)公共接口進(jìn)行通信.對(duì)象的狀態(tài):對(duì)象的屬性值表示了它所處于的狀態(tài);對(duì)象的操作是用來(lái)改變對(duì)象狀態(tài)。1.3封裝與信息隱藏封裝(Encapsulation)是面向?qū)ο蠓椒ǖ闹匾瓌t。就是把對(duì)象的屬性和操作(或服務(wù))結(jié)合為一個(gè)獨(dú)立的整體(系統(tǒng)單位),并盡可能隱藏對(duì)象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。封裝有兩個(gè)含義:其一,把對(duì)象的全部屬性和全部服務(wù)結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位—類。其二,“信息隱蔽”,盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外界形成一個(gè)邊界,只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。1.3封裝與信息隱藏(續(xù))Java語(yǔ)言中,定義類時(shí)通過(guò)大括號(hào){}封裝了類的成員:域(fields)和方法(methods),使用private和public等關(guān)鍵字來(lái)控制對(duì)類的成員的訪問(wèn),其中private修飾的成員是隱藏的,而public修飾的成員則定義了類對(duì)外的公共接口。類作為一個(gè)抽象的數(shù)據(jù)類型允許用戶從底層實(shí)現(xiàn)細(xì)節(jié)中抽象出來(lái),提供給用戶的是在公共接口上的上層操作。這是抽象性的含義。1.4繼承Inheritance繼承:在已有類(父類或超類)的基礎(chǔ)上派生出新的類(子類),新的類能夠吸收已有類的屬性和行為,并擴(kuò)展新的能力。繼承機(jī)制中,往往從一組類中抽象出公共屬性放在父類。繼承支持著軟件代碼的復(fù)用,是提高軟件開發(fā)效率的重要因素之一。

繼承的例子

例如,給定類Car、Motocycle和Truck,我們把它們的公共屬性放在一個(gè)稱為Vehicle的公共父類中。VehicalCarMotocycleTruck繼承的例子蘋果梨西瓜水果繼承的例子CircleRectangleShape1.4繼承(續(xù))Java中繼承的一個(gè)例子:給定一個(gè)Window類,通過(guò)繼承擴(kuò)展它而得到一個(gè)子類MenuWin。classWin{…

//Win的成員定義}classMenuWinextendsWin{…

//MenuWin新增加成員的定義}1.4繼承(續(xù))繼承分為:單繼承是指一個(gè)子類最多只能有一個(gè)父類。多繼承是一個(gè)子類可有二個(gè)以上的父類。由于多繼承會(huì)帶來(lái)二義性,在實(shí)際應(yīng)用中應(yīng)盡量使用單繼承。Java語(yǔ)言中的類只支持單繼承,而接口支持多繼承。如何設(shè)計(jì)繼承并完成繼承層次是面向?qū)ο笤O(shè)計(jì)和編程的核心問(wèn)題。繼承是多態(tài)性的前提條件。objectWinDialogWin單繼承,injavaClass1Class4Class2Class3多繼承,inC++單繼承與多繼承例子1.5多態(tài)性多態(tài)性(Polymorphism):指在超類中定義的屬性或行為,被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在超類及其各個(gè)子類中具有不同的語(yǔ)義。1.5多態(tài)性(續(xù))例如:定義一個(gè)幾何圖形類Shape,它具有“畫圖”行為,用draw()表示。但具體畫什么圖并不確定;定義Shape類的一些子類如Circle圓和Rectangle矩形。在子類中“畫圖”的具體行為draw()可重新定義為:圓類中draw()畫圓;矩形類中draw()畫矩形。定義:Shapes;

//s作為引用變量可指向Circle圓類的對(duì)象,也可指向Rectangle矩形類的對(duì)象。執(zhí)行代碼:

s.draw();//s調(diào)用draw()方法,s指向?qū)ο蟛煌瑫?huì)畫出不同的圖形(圓或矩形)

本節(jié)小結(jié)面向?qū)ο蠓椒ǖ娘@著特性封裝性、抽象性、繼承性和多態(tài)性將面向?qū)ο笤O(shè)計(jì)方法應(yīng)用于程序的開發(fā)工具和開發(fā)過(guò)程中,不僅可以加快開發(fā)的速度,還可極大地增強(qiáng)程序的可維護(hù)性和可擴(kuò)展性,提高代碼重用率。1.6面向?qū)ο蟮慕:蚒ML統(tǒng)一建模語(yǔ)言(UnifiedModelingLangua

溫馨提示

  • 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)論