面向對象編程的基本概述_第1頁
面向對象編程的基本概述_第2頁
面向對象編程的基本概述_第3頁
面向對象編程的基本概述_第4頁
面向對象編程的基本概述_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、For personal use only in study and research;not for commercial use面向對象編程的基本概述一、 面向對象的基本概念 .311 對象.31.2數(shù)據(jù)隱藏 .31.3類 .31.4封裝 .31.41接口 .41.5繼承 .41.51抽象 .41.52 is-a 關系 .41.6多態(tài) .51.61多態(tài)存在的三個必要條件 .51.7組合 .51.8小結 .5二、 面向對象的編程思想 .62.1類設計指導 .62.11設計健壯的構造函數(shù)(以及析構函數(shù)).62.2繼承與組合的思考 .62.21重用對象 .62.22 繼承 . 72.23 組合8

2、2.3 封裝82.4 抽象類與接口8一、 面向對象的基本概念11 對象一個對象由兩部分組成:屬性和行為,對象的基本定義即是包含了數(shù)據(jù)和行為的實體。數(shù)據(jù)表現(xiàn)為屬性,行為表現(xiàn)為方法。存放在對象中的數(shù)據(jù)代表了該對象的狀態(tài), 在面向對象的術語中, 數(shù)據(jù)被稱為屬性, 而對象的行為表示對象可以做什么。生活中處處充滿了對象, 每一個實體即是一個對象, 例如人類或者動物都具有五官這些屬性,同時還有一些個人的行為動作,吃喝拉撒等行為。1.2 數(shù)據(jù)隱藏限制訪問具體的屬性和(或)方法的行為叫做數(shù)據(jù)隱藏,通常,對象不應當操作其他對象的內(nèi)部數(shù)據(jù), 因此在面向對象的開發(fā)中往往采用取值方法( getter() )和賦值方法

3、( setter() )。數(shù)據(jù)的隱藏其實真是封裝的體現(xiàn),一個對象不應該你直接的去操作另一個對象的數(shù)據(jù),通過數(shù)據(jù)的隱藏并提供取值方法和賦值方法體間接的提供可以很好的做一些數(shù)據(jù)的控制, 這真是面向對象編程的體現(xiàn)。1.3 類簡單來說類即是對象的藍圖, 可以認為類是對象的模板或者模具。 類定義了 使用該類創(chuàng)建的所有對象 具有的屬性和行為, 對象從類中創(chuàng)建, 所以類必須定義對象的基礎材料, 總是在創(chuàng)建對象之前必須先設計一個類,類是對象的依附體。類的數(shù)據(jù)通過屬性來表示, 類的行為通過方法來定義, 在任何情況下, 對對象中的屬性的訪問應該有對象自身控制,任何一個對象都不應該直接修改其他對象的屬性。1.4 封

4、裝面向對象編程即是使用對象提供的行為達到一定的目的,使用對象的一個顯著好處是對象無需暴露它的所有屬性和行為, 僅暴露必要的接口和其他對象進行交互, 除了如何使用該對象,其他細節(jié)都應當對其他對象隱藏起來,這便是封裝的目的。封裝是基于對象即包含屬性也包含行為這一事。數(shù)據(jù)隱藏式封裝的主要部分。為了實現(xiàn)數(shù)據(jù)隱藏,必須將所有的屬性聲明為private ,屬性絕不是類接口(類公共方法)的一部分,只有 public 方法是類對外提供的行為,將屬性描述為public 破壞了數(shù)據(jù)隱藏這一概念。封裝的最高指導原則是“所有字段都應該是私有的”。1.41 接口盡可能提供最小化的用戶接口, 當設計類時, 通用規(guī)則是盡量

5、不要讓用戶知道類的內(nèi)部工作原理,為了達到這點,因盡量遵循以下簡單的原則:只提供用戶絕對需要的東西。一個類時, 先從最小化的接口開始。口可能不合適,再去開放出來也不遲。實際上, 這意味著類的接口要盡可能少。 當你開始設計類的設計的迭代式的, 所以隨后即是你發(fā)現(xiàn)最小化的接公共接口定義了用戶可以訪問什么。從用戶角度定義至關重要,而不是從信息系統(tǒng)的角度定義類。確保設計類時你向真正的用戶了解了需求和設計,這些人并不局限于開發(fā)人員。1.5 繼承面向對象最強大的功能就是代碼重用, 通過組織和識別不同類之間的共性, 不僅可以實現(xiàn)代碼重用, 也可以知道設計, 繼承是實現(xiàn)該功能的主要手段, 繼承允許一個類繼承另一

6、個類的屬性和方法,可以通過抽象公共屬性和行為來創(chuàng)建新類。1.51 抽象面向對象編程的主要優(yōu)勢之一是可以重用類。通常可以重用的類比具體的類的接口更加抽象。 具體的接口可以是非常明確的,而抽象接口則更通用。 簡單來說,高層次的抽象接口比高度具體的接口更有用,大部分情況下如此,當然并非適用所有情況。接口是行為繼承的一種機制, 抽象類則用于實現(xiàn)繼承, 即接口是行為的規(guī)范, 抽象是對事物共性的抽象。1.52 is-a關系繼承往往是is-a 關系, is-a 即可以表述為子類是一個父 類,例如父類Shape(形狀)與子類Circle(圓形)、 Square(矩形),可以說圓形是一個形狀,矩形是一個形狀,子

7、類都繼承于父類。1.6 多態(tài)指允許不同類的對象對同一消息做出響應。 即同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式。(發(fā)送消息就是函數(shù)調(diào)用),重載方法即是實現(xiàn)多態(tài)的手段。1.61 多態(tài)存在的三個必要條件 繼承 重寫 父類引用指向子類對象簡單敘述多態(tài)的關系: 多態(tài)必須是是父類跟子類之間的關系, 即多態(tài)必須是存在繼承關系的, 繼承相同父類的眾多子類可以重寫父類的方法行為, 重新定義子類自己的行為, 由于子類是繼承自父類的, 應該可以用父類對不同子類進行不同的實例化, 從而做到引用父類的行為卻得到不同子類行為的應答(父類 a = new 子類 (), a.行為 ()),這種向上轉型的結果即

8、是父類只能得到子類繼承自父類的所有屬性和行為,但得不到子類自己獨有的屬性和行為,多態(tài)的實現(xiàn)可以通過接口與繼承實現(xiàn)。1.7 組合使用其他對象來構建或結合成新的對象,這種方式就是組合。和繼承一樣, 組合也是一種構建對象的機制,使用其他類構建新類的只有兩種方式,即繼承和組合。繼承的關系是 is-a 的關系,而組合則是 has-a 的關系,例如電視機有( has-a)開關和顯示屏, 電視顯而易見不是一個開關, 所以兩個沒有繼承關系, 彼此之間是組合的關系, 即開關、顯示屏、電板等對象組合成了電視,這便是組合。1.8 小結面向對象編程,其編程思想在于對象,首先要明白何為對象,對象由什么構成,知道了何為對

9、象之后再來好好思考如何去面向它,面向它(對象)主要通過面向對象的四大特征(手段):封裝、繼承、多態(tài)、組合。每個特征又是相互聯(lián)系的,封裝是為了數(shù)據(jù)的安全性和隱秘性, 繼承是為了更好的實現(xiàn)多態(tài),組合即是運用封裝、繼承、多態(tài)這些手段來實現(xiàn)一個更為復雜的對象, 從而更加符合現(xiàn)實世界的需求。同時需要明白接口是行為的規(guī)范,抽象則是對事物的抽象。二、面向對象的編程思想2.1 類設計指導在設計類時最重要的問題是保持公共接口最小化, 提供最小化的公共接口可以保證類盡可能簡單。 在設計接口最小化中, 應盡量做到隱藏實現(xiàn), 識別類的公共接口與類的用戶相關,而具體實現(xiàn)則與用戶無關, 具體實現(xiàn)必須提供用戶需要的服務,

10、但這些服務是如何實現(xiàn)的對用戶來說是不可見的,改變類的實現(xiàn)不應該影響到用戶,這才是設計良好的類。設計類的過程強迫組織代碼為很多可管理的塊, 把代碼分塊比大塊代碼更具維護性。 促進可維護性的最好方式之一是減少代碼依賴, 即修改一個類中的代碼不會影響 (或使影響最小化)其他類。2.11 設計健壯的構造函數(shù)(以及析構函數(shù))首先且最重要的一點是,構造函數(shù)應該把對象設置為安全的初始狀態(tài)。這包括了屬性初始化以及內(nèi)存管理等問題,也需要確保在默認的條件下能正確的構造對象,通常提供一個構造函數(shù)來處理默認情況是個好的習慣。2.2 繼承與組合的思考繼承正如其名字所示,繼承其他類的屬性和行為,這是一種父子關系,子類繼承

11、父類。組合,即使用其他對象來構建新對象。繼承和組合在面向對象(OO)系統(tǒng)中扮演者重要的角色,事實上,最困難及最有趣的設計決策就是決定使用繼承還是組合。2.21 重用對象繼承和組合的主要目的大概就是對象重用,通過繼承和組合來利用其他類就可以構建新的類(最終變?yōu)閷ο螅瑢嶋H上這是重用以前構建好的類的唯一方式。繼承代表了is-a 關系,比如狗是哺乳動物。組合則是使用其他類來構建出更復雜的類,即其是一個裝配集合。這種情況下沒有父子關系,基本上復雜的對象都是由其他對象組合而成。組合代表了has-a 關系。2.22 繼承在一個狗( Dog)類中,很簡單的我們能找出一系列的各種狗的品種,如下圖的一個Dog類

12、的繼承體系圖:圖 1在此體系中,從上到下是從通用到具體的過程, 越往上越通用, 共同性越高,越往下越具體, 特例性越高。 該概念有時被稱為通用到特例, 這是使用繼承時的有一個重要的考慮因素。 即在繼承樹中越往下, 事情變得越特殊, 最通用的事情位于樹的頂端。繼承就是根據(jù)通用因素從通用到具體的過程。理論上來說,找到越多的共同點越好。 然而有時過于精確也會存在設計問題。盡管找出盡可能多的共同點更加靠近真實生活, 然而并不表示跟靠近模型。 找出的點越多,系統(tǒng)會越復雜, 這便會陷入一個難題, 到底想要更加精確的模型還是復雜度低的系統(tǒng),這便需要根據(jù)情況進行決策。決定在設計時引入更小的復雜度或者更多的功能

13、是一項平衡的藝術, 其創(chuàng)建一個系統(tǒng)是保持一定的彈性,引入復雜度是不至于被自身壓垮。2.23 組合組合技術通常用于想在新類中使用現(xiàn)有類的功能而非要特殊化某個類的情況,繼承則體現(xiàn)在想要特殊化某個現(xiàn)有的對象, 即在繼承樹中, 越往下對象只能是越特殊化, 因此能用組合解決的先用組合, 再考慮用繼承。 組合并沒有繼承,是以別的對象作為自身的屬性。 一個特定的對象由其他對象組合而成, 而且這些對象被作為對象屬性, 那么這個新的對象被稱為混合或者聚合、綜合對象。2.3 封裝封裝是面向對象的本質(zhì)概念,在談接口 / 實現(xiàn)范式時其實都在談封裝,根本問題是對于一個類而言,它應該暴露什么信息,不暴露什么信息。封裝等同

14、于數(shù)據(jù)和行為。封裝和繼承是什么關系?封裝是面向對象的本質(zhì),所以它面向對象設計的基本原則之一。繼承也是三個主要的面向對象概念之一, 然而,繼承在某種程度上破壞了封裝。在類的體系結構中繼承弱化了封裝, 繼承意味著對其他類的強封裝, 但是弱化了父類和其子類之間的封裝。同時多態(tài)也是對繼承最優(yōu)雅的使用之一。2.4 抽象類與接口抽象類繼承子對象的行為, 也可以是規(guī)范子對象行為, 對行為的一種抽象, 接口是完全的規(guī)范對象的行為。在 Java中,類繼承抽象類,而實現(xiàn)接口。有時繼承被稱為實現(xiàn)繼承, 而接口被稱為定義繼承。 接口是繼承的特殊類型, 繼承是嚴格的 is-a 關系,但接口不是。 接口可以被應用的不相關

15、的類,而抽象類即對相似事物特征的抽象,抽象類可以體統(tǒng)一些實現(xiàn),而接口只模型化行為,接口永遠不會提供任何類型的實現(xiàn),只有行為。接口指定了沒有明顯聯(lián)系的類之間的相同行為。僅供個人用于學習、研究;不得用于商業(yè)用途。For personal use only in study and research; not for commercial use.Nur f ü r den pers?nlichen fü r Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l 'é tude et la recherche uniquementà des fins personnelles; pasà des fins commerciales. , .以下無正文僅供個人用于學習、研究;不得用于商業(yè)用途。For personal use only in study and research; not

溫馨提示

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

評論

0/150

提交評論