chapter01面向?qū)ο蟪绦蛟O(shè)計_第1頁
chapter01面向?qū)ο蟪绦蛟O(shè)計_第2頁
chapter01面向?qū)ο蟪绦蛟O(shè)計_第3頁
chapter01面向?qū)ο蟪绦蛟O(shè)計_第4頁
chapter01面向?qū)ο蟪绦蛟O(shè)計_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第1章

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

繼承

多態(tài)性

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

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

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

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

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

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

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

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

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

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

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

繼承的例子

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

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

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

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

s.draw();//s調(diào)用draw()方法,s指向?qū)ο蟛煌瑫嫵霾煌膱D形(圓或矩形)

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

溫馨提示

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

評論

0/150

提交評論