版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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ì)方法的完整面貌,在沒有理解大背景之前就去編寫面向?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是面向過程,java是面向?qū)ο?。intmax(intnum1,intnum2){if(num1>num2)returnnum1;elsereturnnum2;}1.1C和JAVA的不同面向?qū)ο笃鋵?shí)是現(xiàn)實(shí)世界模型的自然延伸?,F(xiàn)實(shí)世界是由一個(gè)一個(gè)對(duì)象組成;對(duì)象之間通過消息(請(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沒有任何沖突,學(xué)好了c和java幾乎可以解決計(jì)算機(jī)所有的問題。抽象化的過程所有的編程語言都提供抽象。匯編語言是對(duì)計(jì)算機(jī)的抽象,隨后許多語言(例如FORTRAON,BASIC和C)是對(duì)匯編語言的抽象,但是這是一種初級(jí)的抽象。仍然要求你從計(jì)算機(jī)的角度,而不是從待解決的問題的角度來考慮。另外一種建立機(jī)器模型的方式,就是建立待解決問題的模型。LISP和PROLOG抽象化過程面向?qū)ο蠓ǜM(jìn)一步,提供各式各樣的工具,讓程序員能在問題空間表述各種元素。這樣程序員就不會(huì)被被限制在特殊問題上了。我們將問題空間的元素同它在解決空間的表述稱為“對(duì)象”。面向?qū)ο蠓椒ǖ奶卣魅f物皆對(duì)象。理論上可以將待解決問題總的所有觀念性組成都變成程序中的對(duì)象。程序就是一組互相之間傳遞消息,告訴對(duì)方該干什么的對(duì)象。消息是調(diào)用專署某個(gè)對(duì)象的方法的請(qǐng)求。每個(gè)對(duì)象都利用別的對(duì)象來組建它自己的記憶??梢酝ㄟ^將已有的對(duì)象打成一個(gè)包,來創(chuàng)建新的對(duì)象。面向?qū)ο蠓椒ǖ奶卣鲗?duì)象都有類型。任何對(duì)象都是某個(gè)類的實(shí)例。所有屬于同一類型的對(duì)象都能接受相同的信息。每個(gè)對(duì)象都有接口Lightlt=newLight();lt.on();接口(interface)規(guī)范了你能夠?qū)?duì)象發(fā)出的請(qǐng)求。不過還要有程序代碼來滿足這些請(qǐng)求。這些程序代碼加上被隱藏的數(shù)據(jù),構(gòu)成了實(shí)現(xiàn)(implementation)被隱藏的實(shí)現(xiàn)細(xì)節(jié)java使用三個(gè)關(guān)鍵字來設(shè)定class的訪問權(quán)限:public、private、protected。Public定義后,每個(gè)任都可以使用Private除了類型開發(fā)者可以在該類型的memberfunctions中使用,沒有任何人可以使用。Protected和private相似,不過class的繼承者可以訪問protectedmembers,確無法訪問privatememberJava缺省的是friendly訪問權(quán)限,在同一個(gè)package中可以訪問其他的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ì)被隱藏起來,而且無法訪問),更重要的是它同時(shí)也復(fù)制了基類的接口。繼承:重復(fù)運(yùn)用接口繼承:在已有類(父類或超類)的基礎(chǔ)上派生出新的類(子類),新的類能夠吸收已有類的屬性和行為,并擴(kuò)展新的能力。改變繼承來的方法定義一個(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ù)介紹一些問題,他們的重要性不亞于上述幾點(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來動(dòng)態(tài)的產(chǎn)生對(duì)象的實(shí)體。對(duì)象的壽命,
c++必須自行編寫代碼來摧毀對(duì)象,這樣會(huì)產(chǎn)生內(nèi)存泄漏Java使用了所謂的“垃圾回收器機(jī)制”,當(dāng)對(duì)象不在被使用的時(shí)候會(huì)被自動(dòng)察覺并消滅。Collection和迭代器(iterator)如果你不知道將用到多少個(gè)對(duì)象,或者不知道該對(duì)象該存活多久,才能解決某個(gè)問題,那么你同樣無法知道該如何存儲(chǔ)這些對(duì)象。解決方法對(duì)于大多數(shù)面向?qū)ο蟪绦蛟O(shè)計(jì)問題:產(chǎn)生另一種類型的對(duì)象,這個(gè)新類型對(duì)象存儲(chǔ)著一些reference,代表其他對(duì)象。通過array完成同樣的事情。Java使用第一個(gè)方法,這個(gè)新類型稱為容器,這個(gè)新式對(duì)象會(huì)適當(dāng)擴(kuò)展自己的容量,以便容納你置入的所有的對(duì)象,你不需要知道將來會(huì)置入多少個(gè)對(duì)象于容器中,只要產(chǎn)生容器,它就會(huì)自行料理細(xì)節(jié)。Collection和迭代器(iterator)Java提供了許多不同的容器來符合各類需求。例如vertor(arraylist,linkedlist,set,queues,hashtables、trees等。迭代器用戶可以通過迭代器操作或者比較一組元素,迭代器的作用就是用來選擇容器中的元素,并將這些元素呈現(xiàn)給迭代器使用者??蓪ⅰ比萜鲗?shí)現(xiàn)細(xì)節(jié)”和”對(duì)容器進(jìn)行訪問動(dòng)作之程序代碼”分離開來。單根繼承體系1.單根繼承體系中的所有對(duì)象都有共通接口,所以最終它們都屬于相同的type。2.單根繼承體系保證所有對(duì)象都擁有某些功能。3.單根繼承體系也使垃圾回收器的實(shí)現(xiàn)更加容易。4.由于所有的對(duì)象保證會(huì)有執(zhí)行期型別信息(RTTI)所以我們不會(huì)因?yàn)闊o法判斷對(duì)象的確切型別而陷入動(dòng)纏不得的僵局。異常處理:面對(duì)錯(cuò)誤的產(chǎn)生異常處理機(jī)制將錯(cuò)誤處理問題直接內(nèi)嵌于程序語言中,有時(shí)甚至直接內(nèi)嵌于操作系統(tǒng)中。所謂異常(exception)是一種對(duì)象,可在錯(cuò)誤發(fā)生點(diǎn)被拋出(throw),并在適當(dāng)?shù)某粤Τ绦蛑斜徊蹲?。多線程將問題切割為多個(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),通過抽象找出同一類對(duì)象的共同屬性(靜態(tài)特征)和行為(動(dòng)態(tài)特征),而形成類(class)的概念。程序的執(zhí)行,表現(xiàn)為一組對(duì)象之間的交互通信。對(duì)象之間通過公共接口進(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ì)并加以描述的過程。先注意問題的本質(zhì)及描述,其次是實(shí)現(xiàn)過程或細(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言中,類是一個(gè)數(shù)據(jù)類型對(duì)象是類的實(shí)例(instance)。引用變量:具有類類型的變量被稱作對(duì)象引用(objectreference)。例如,Humanp1=newHuman(1,“張三”,20,…);p1被稱作對(duì)象引用變量,newHuman(1,”張三“,20,…)被稱作Human的對(duì)象。對(duì)象對(duì)象:是用來描述現(xiàn)實(shí)世界中實(shí)際存在的事物的實(shí)體,它是用來構(gòu)成系統(tǒng)的一個(gè)單位。對(duì)象由一組屬性和一組行為(操作或服務(wù))構(gòu)成。對(duì)象具有固定的對(duì)外接口.一組屬性和操作的集合.對(duì)象之間通過公共接口進(jìn)行通信.對(duì)象的狀態(tài):對(duì)象的屬性值表示了它所處于的狀態(tài);對(duì)象的操作是用來改變對(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語言中,定義類時(shí)通過大括號(hào){}封裝了類的成員:域(fields)和方法(methods),使用private和public等關(guān)鍵字來控制對(duì)類的成員的訪問,其中private修飾的成員是隱藏的,而public修飾的成員則定義了類對(duì)外的公共接口。類作為一個(gè)抽象的數(shù)據(jù)類型允許用戶從底層實(shí)現(xiàn)細(xì)節(jié)中抽象出來,提供給用戶的是在公共接口上的上層操作。這是抽象性的含義。1.4繼承Inheritance繼承:在已有類(父類或超類)的基礎(chǔ)上派生出新的類(子類),新的類能夠吸收已有類的屬性和行為,并擴(kuò)展新的能力。繼承機(jī)制中,往往從一組類中抽象出公共屬性放在父類。繼承支持著軟件代碼的復(fù)用,是提高軟件開發(fā)效率的重要因素之一。
繼承的例子
例如,給定類Car、Motocycle和Truck,我們把它們的公共屬性放在一個(gè)稱為Vehicle的公共父類中。VehicalCarMotocycleTruck繼承的例子蘋果梨西瓜水果繼承的例子CircleRectangleShape1.4繼承(續(xù))Java中繼承的一個(gè)例子:給定一個(gè)Window類,通過繼承擴(kuò)展它而得到一個(gè)子類MenuWin。classWin{…
//Win的成員定義}classMenuWinextendsWin{…
//MenuWin新增加成員的定義}1.4繼承(續(xù))繼承分為:單繼承是指一個(gè)子類最多只能有一個(gè)父類。多繼承是一個(gè)子類可有二個(gè)以上的父類。由于多繼承會(huì)帶來二義性,在實(shí)際應(yīng)用中應(yīng)盡量使用單繼承。Java語言中的類只支持單繼承,而接口支持多繼承。如何設(shè)計(jì)繼承并完成繼承層次是面向?qū)ο笤O(shè)計(jì)和編程的核心問題。繼承是多態(tài)性的前提條件。objectWinDialogWin單繼承,injavaClass1Class4Class2Class3多繼承,inC++單繼承與多繼承例子1.5多態(tài)性多態(tài)性(Polymorphism):指在超類中定義的屬性或行為,被子類繼承之后,可以具有不同的數(shù)據(jù)類型或表現(xiàn)出不同的行為。這使得同一個(gè)屬性或行為在超類及其各個(gè)子類中具有不同的語義。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ā)過程中,不僅可以加快開發(fā)的速度,還可極大地增強(qiáng)程序的可維護(hù)性和可擴(kuò)展性,提高代碼重用率。1.6面向?qū)ο蟮慕:蚒ML統(tǒng)一建模語言(UnifiedModelingLangua
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年統(tǒng)編版七年級(jí)歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年粵教滬科版七年級(jí)物理下冊(cè)階段測(cè)試試卷
- 二零二五版泥漿外運(yùn)承包服務(wù)合同(含環(huán)保驗(yàn)收標(biāo)準(zhǔn))4篇
- 二零二五版門衛(wèi)值班人員節(jié)假日值班合同4篇
- 塔吊工地施工環(huán)保監(jiān)測(cè)合同20252篇
- 二零二五年度影視配音拍攝合同范本3篇
- 二零二五版智能門窗系統(tǒng)研發(fā)與市場(chǎng)推廣服務(wù)合同2篇
- 二零二五年度美團(tuán)外賣外賣配送服務(wù)區(qū)域規(guī)劃及調(diào)整合同4篇
- 二零二五版牛肉連鎖超市配送服務(wù)合同樣本4篇
- 臨時(shí)教學(xué)輔助人員聘用合同2024校版版
- 2024年甘肅省武威市、嘉峪關(guān)市、臨夏州中考英語真題
- DL-T573-2021電力變壓器檢修導(dǎo)則
- 繪本《圖書館獅子》原文
- 安全使用公共WiFi網(wǎng)絡(luò)的方法
- 2023年管理學(xué)原理考試題庫附答案
- 【可行性報(bào)告】2023年電動(dòng)自行車相關(guān)項(xiàng)目可行性研究報(bào)告
- 歐洲食品與飲料行業(yè)數(shù)據(jù)與趨勢(shì)
- 放療科室規(guī)章制度(二篇)
- 中高職貫通培養(yǎng)三二分段(中職階段)新能源汽車檢測(cè)與維修專業(yè)課程體系
- 浙江省安全員C證考試題庫及答案(推薦)
- 目視講義.的知識(shí)
評(píng)論
0/150
提交評(píng)論