版權(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)有理解大背景之前就去編寫(xiě)面向?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)程序,嵌入式開(kāi)發(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)題空間的元素同它在解決空間的表述稱(chēng)為“對(duì)象”。面向?qū)ο蠓椒ǖ奶卣魅f(wàn)物皆對(duì)象。理論上可以將待解決問(wèn)題總的所有觀念性組成都變成程序中的對(duì)象。程序就是一組互相之間傳遞消息,告訴對(duì)方該干什么的對(duì)象。消息是調(diào)用專(zhuān)署某個(gè)對(duì)象的方法的請(qǐng)求。每個(gè)對(duì)象都利用別的對(duì)象來(lái)組建它自己的記憶。可以通過(guò)將已有的對(duì)象打成一個(gè)包,來(lái)創(chuàng)建新的對(duì)象。面向?qū)ο蠓椒ǖ奶卣鲗?duì)象都有類(lèi)型。任何對(duì)象都是某個(gè)類(lèi)的實(shí)例。所有屬于同一類(lèi)型的對(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除了類(lèi)型開(kāi)發(fā)者可以在該類(lèi)型的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)你繼承既有的類(lèi)型時(shí),便創(chuàng)造了新的類(lèi)型,后者不僅可以包含前者所有的成員(但是private成員會(huì)被隱藏起來(lái),而且無(wú)法訪問(wèn)),更重要的是它同時(shí)也復(fù)制了基類(lèi)的接口。繼承:重復(fù)運(yùn)用接口繼承:在已有類(lèi)(父類(lèi)或超類(lèi))的基礎(chǔ)上派生出新的類(lèi)(子類(lèi)),新的類(lèi)能夠吸收已有類(lèi)的屬性和行為,并擴(kuò)展新的能力。改變繼承來(lái)的方法定義一個(gè)幾何圖形類(lèi)Shape,它具有“畫(huà)圖”行為,用draw()表示。但具體畫(huà)什么圖并不確定;
定義Shape類(lèi)的一些子類(lèi)如Circle圓和Rectangle矩形。
在子類(lèi)中“畫(huà)圖”的具體行為draw()可重新定義為:圓類(lèi)中draw()畫(huà)圓;矩形類(lèi)中draw()畫(huà)矩形。
定義:Shapes;//s作為引用變量可指向Circle圓類(lèi)的對(duì)象,也可指向Rectangle矩形類(lèi)的對(duì)象。執(zhí)行代碼:s.draw();
//s調(diào)用draw()方法,s指向?qū)ο蟛煌瑫?huì)
畫(huà)出不同的圖形(圓或矩形)JAVA其他特征上面我們介紹了OOP的幾個(gè)最基本特征,既封裝、繼承和多態(tài)。下面我們繼續(xù)介紹一些問(wèn)題,他們的重要性不亞于上述幾點(diǎn)。對(duì)象的創(chuàng)建,使用和生命周期對(duì)象的生成和毀滅,C++認(rèn)為效率是最重要的,將對(duì)象置于stack或靜態(tài)存儲(chǔ)區(qū)中,于是程序編寫(xiě)是便要決定對(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++必須自行編寫(xiě)代碼來(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)生另一種類(lèi)型的對(duì)象,這個(gè)新類(lèi)型對(duì)象存儲(chǔ)著一些reference,代表其他對(duì)象。通過(guò)array完成同樣的事情。Java使用第一個(gè)方法,這個(gè)新類(lèi)型稱(chēng)為容器,這個(gè)新式對(duì)象會(huì)適當(dāng)擴(kuò)展自己的容量,以便容納你置入的所有的對(duì)象,你不需要知道將來(lái)會(huì)置入多少個(gè)對(duì)象于容器中,只要產(chǎn)生容器,它就會(huì)自行料理細(xì)節(jié)。Collection和迭代器(iterator)Java提供了許多不同的容器來(lái)符合各類(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)作之程序代碼”分離開(kāi)來(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ù)某粤Τ绦蛑斜徊蹲健6嗑€程將問(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ǔ)于磁盤(pán),并于日后取出,但是還是要自己調(diào)用存儲(chǔ)、取回動(dòng)作。1.2類(lèi)與對(duì)象面向?qū)ο蟪绦蛟O(shè)計(jì):將客觀事物(或?qū)嶓w)看作具有屬性和行為(或稱(chēng)服務(wù))的對(duì)象(object),通過(guò)抽象找出同一類(lèi)對(duì)象的共同屬性(靜態(tài)特征)和行為(動(dòng)態(tài)特征),而形成類(lèi)(class)的概念。程序的執(zhí)行,表現(xiàn)為一組對(duì)象之間的交互通信。對(duì)象之間通過(guò)公共接口進(jìn)行通信,從而完成系統(tǒng)功能。類(lèi)是相同對(duì)象的集合的描述。例如,類(lèi)Human就是現(xiàn)實(shí)世界中人(對(duì)象)的集合,我、你、他都是Human的對(duì)象。分析類(lèi)Human的所有對(duì)象——人,得到對(duì)象的共同的數(shù)據(jù)屬性和行為,如下所示:數(shù)據(jù)屬性:編號(hào)、姓名、年齡,…
行為:吃飯、走路、跳舞,…抽象是對(duì)具體對(duì)象進(jìn)行概括,抽象出這一類(lèi)對(duì)象的公共性質(zhì)并加以描述的過(guò)程。先注意問(wèn)題的本質(zhì)及描述,其次是實(shí)現(xiàn)過(guò)程或細(xì)節(jié)。1.2類(lèi)與對(duì)象(續(xù))定義Human類(lèi):classHuman{intno;Stringname;intage;…voideat(){…}
…}Human被稱(chēng)作類(lèi)名。no,name,age被稱(chēng)作域(fields)或變量,eat()被稱(chēng)作方法(methods),它們都是類(lèi)的成員。1.2類(lèi)與對(duì)象(續(xù))在面向?qū)ο蟮木幊陶Z(yǔ)言中,類(lèi)是一個(gè)數(shù)據(jù)類(lèi)型對(duì)象是類(lèi)的實(shí)例(instance)。引用變量:具有類(lèi)類(lèi)型的變量被稱(chēng)作對(duì)象引用(objectreference)。例如,Humanp1=newHuman(1,“張三”,20,…);p1被稱(chēng)作對(duì)象引用變量,newHuman(1,”張三“,20,…)被稱(chēng)作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ú)立單位—類(lèi)。其二,“信息隱蔽”,盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外界形成一個(gè)邊界,只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。1.3封裝與信息隱藏(續(xù))Java語(yǔ)言中,定義類(lèi)時(shí)通過(guò)大括號(hào){}封裝了類(lèi)的成員:域(fields)和方法(methods),使用private和public等關(guān)鍵字來(lái)控制對(duì)類(lèi)的成員的訪問(wèn),其中private修飾的成員是隱藏的,而public修飾的成員則定義了類(lèi)對(duì)外的公共接口。類(lèi)作為一個(gè)抽象的數(shù)據(jù)類(lèi)型允許用戶從底層實(shí)現(xiàn)細(xì)節(jié)中抽象出來(lái),提供給用戶的是在公共接口上的上層操作。這是抽象性的含義。1.4繼承Inheritance繼承:在已有類(lèi)(父類(lèi)或超類(lèi))的基礎(chǔ)上派生出新的類(lèi)(子類(lèi)),新的類(lèi)能夠吸收已有類(lèi)的屬性和行為,并擴(kuò)展新的能力。繼承機(jī)制中,往往從一組類(lèi)中抽象出公共屬性放在父類(lèi)。繼承支持著軟件代碼的復(fù)用,是提高軟件開(kāi)發(fā)效率的重要因素之一。
繼承的例子
例如,給定類(lèi)Car、Motocycle和Truck,我們把它們的公共屬性放在一個(gè)稱(chēng)為Vehicle的公共父類(lèi)中。VehicalCarMotocycleTruck繼承的例子蘋(píng)果梨西瓜水果繼承的例子CircleRectangleShape1.4繼承(續(xù))Java中繼承的一個(gè)例子:給定一個(gè)Window類(lèi),通過(guò)繼承擴(kuò)展它而得到一個(gè)子類(lèi)MenuWin。classWin{…
//Win的成員定義}classMenuWinextendsWin{…
//MenuWin新增加成員的定義}1.4繼承(續(xù))繼承分為:單繼承是指一個(gè)子類(lèi)最多只能有一個(gè)父類(lèi)。多繼承是一個(gè)子類(lèi)可有二個(gè)以上的父類(lèi)。由于多繼承會(huì)帶來(lái)二義性,在實(shí)際應(yīng)用中應(yīng)盡量使用單繼承。Java語(yǔ)言中的類(lèi)只支持單繼承,而接口支持多繼承。如何設(shè)計(jì)繼承并完成繼承層次是面向?qū)ο笤O(shè)計(jì)和編程的核心問(wèn)題。繼承是多態(tài)性的前提條件。objectWinDialogWin單繼承,injavaClass1Class4Class2Class3多繼承,inC++單繼承與多繼承例子1.5多態(tài)性多態(tài)性(Polymorphism):指在超類(lèi)中定義的屬性或行為,被子類(lèi)繼承之后,可以具有不同的數(shù)據(jù)類(lèi)型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在超類(lèi)及其各個(gè)子類(lèi)中具有不同的語(yǔ)義。1.5多態(tài)性(續(xù))例如:定義一個(gè)幾何圖形類(lèi)Shape,它具有“畫(huà)圖”行為,用draw()表示。但具體畫(huà)什么圖并不確定;定義Shape類(lèi)的一些子類(lèi)如Circle圓和Rectangle矩形。在子類(lèi)中“畫(huà)圖”的具體行為draw()可重新定義為:圓類(lèi)中draw()畫(huà)圓;矩形類(lèi)中draw()畫(huà)矩形。定義:Shapes;
//s作為引用變量可指向Circle圓類(lèi)的對(duì)象,也可指向Rectangle矩形類(lèi)的對(duì)象。執(zhí)行代碼:
s.draw();//s調(diào)用draw()方法,s指向?qū)ο蟛煌瑫?huì)畫(huà)出不同的圖形(圓或矩形)
本節(jié)小結(jié)面向?qū)ο蠓椒ǖ娘@著特性封裝性、抽象性、繼承性和多態(tài)性將面向?qū)ο笤O(shè)計(jì)方法應(yīng)用于程序的開(kāi)發(fā)工具和開(kāi)發(fā)過(guò)程中,不僅可以加快開(kāi)發(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教研成果成果轉(zhuǎn)化
- 裝修設(shè)計(jì)師的工作總結(jié)
- 房地產(chǎn)行業(yè)設(shè)計(jì)師工作總結(jié)
- 2024年爬山安全教案
- 2024年計(jì)算機(jī)應(yīng)屆生簡(jiǎn)歷
- 農(nóng)田租賃協(xié)議書(shū)(2篇)
- 2024年苯噻草胺項(xiàng)目營(yíng)銷(xiāo)方案
- 《贛州市國(guó)家稅務(wù)局》課件
- 烏魯木齊市實(shí)驗(yàn)學(xué)校2023-2024學(xué)年高三上學(xué)期1月月考政治試題(解析版)
- 甘肅省部分學(xué)校2025屆高三上學(xué)期第一次聯(lián)考(期末)歷史試卷(含答案解析)
- 《蘇寧電器的內(nèi)部控制與評(píng)價(jià)研究》18000字(論文)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專(zhuān)業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之12:“6策劃-6.1應(yīng)對(duì)風(fēng)險(xiǎn)和機(jī)遇的措施”(雷澤佳編制-2025B0)
- 《IT企業(yè)介紹》課件
- 2024年研究生考試考研思想政治理論(101)試卷及解答參考
- 年終獎(jiǎng)發(fā)放通知范文
- 油田員工勞動(dòng)合同范例
- 質(zhì)量安全總監(jiān)和質(zhì)量安全員考核獎(jiǎng)懲制度
- Unit 5 Music Listening and Talking 說(shuō)課稿-2023-2024學(xué)年高一英語(yǔ)人教版(2019)必修第二冊(cè)
- 車(chē)間主任個(gè)人年終總結(jié)
- 2024年甘肅省公務(wù)員錄用考試《行測(cè)》試題及答案解析
- 消防工程技術(shù)專(zhuān)業(yè)畢業(yè)實(shí)習(xí)報(bào)告范文
評(píng)論
0/150
提交評(píng)論