面向對象設計與分析--概念篇

1.什麼事面向對象?

面向對象方法是一種運用對象,類,繼承,封裝,聚合,關聯,消息,多態等概念和原則來構造軟件系統的開發思想(方法)。

2.面向對象中的的基本概念:

A.對象:把問題域中的事物抽象地表示爲系統中的對象,做爲系統的基本構成單位。
B.屬性和操做:用對象的屬性表示事物的數據特徵;用對象的操做表示事物的行爲特徵。
C.對象的封裝:對象的屬性與操做結合爲一體,成爲一個獨立的、不可分的實體,對外屏蔽其內部細節。
D.類:把具備相同屬性和相同操做的對象歸爲一類,類是這些對象的抽象描述,對象是類的實例。
E:繼承:經過在不一樣程度上運用抽象的原則,能夠獲得較通常的類和較特殊的類。特殊類繼承通常類的屬性與操做,從而簡化系統的構造過程及其文檔。
F:多態:多態性能夠簡單地歸納爲「一個接口,多種方法」,字面意思爲多種形態。程序在運行時才決定調用的函數,它是面向對象編程領域的核心概念。
F.聚合:複雜的對象能夠用簡單的對象做爲其構成部分。
G.類的封裝:類具備封閉性,把內部的屬性和操做隱藏起來,只有公共的操做對外是可見的。
H.消息:對象之間經過消息進行通信,以實現對象之間的動態聯繫。總之一句,向對象發出的操做請求稱之爲消息。即要求對象之間只能經過消息進行通信。

J.關聯:經過關聯表達類(一組對象)之間的靜態關係。
結構關係:算法

結構關係

拓展:消息傳遞機制與函數調用機制的區別

第一,在消息傳遞機制中,每個消息被髮送給指定的接收者(對象)。在命令式編程範型中,函數調用機制沒有指定的接收者。數據庫

第二,消息的解釋(用來完成操做請求的方法或操做/代碼集)依賴接收者,而且因接收者的不一樣而異。編程

第三,在面向對象的範型中,一般在運行時才能知道給定消息的特定的接收者。數據結構

2.1 繼承:益於複用,提升效率

子類從父類中繼承屬性和操做,根據須要添加本身的屬性和方法。

通常類與特殊類之間的關係叫泛化關係(繼承關係),簡稱泛化。併發

多重繼承:容許一個特殊類具備一個以上通常類的繼承模式稱做多重繼承(軟件工程師,有本科,有研究所,有大專學歷的)編程語言

2.2 聚合:

一個(較複雜的)對象由其餘若干(較簡單的)對象做爲其構成部分,稱較複雜的對象爲彙集(組合),稱較簡單的對象爲成分,稱這種關係爲聚合。

聚合

2.3 關聯

類之間的靜態聯繫稱做關聯。在實例化後,由類產生對象,由關聯產生鏈接對象的鏈。鏈是關聯的實例。 關聯的表示符號也稱做實例鏈接

2.4 抽象是什麼意思?

從事物中捨棄個別的非本質的特徵,而抽取共同的、本質特徵的作法叫抽象。分過程抽象、數據抽象

2.5 類和對象

類:把具備共同性質的事物劃分爲一類,得出一個抽象的概念。
對象:全部的對象都是類的實例。實例可以在運行時被產生(初始化)或銷燬(刪除)。

2.6 封裝什麼意思?

把對象的屬性和操做結合成一個獨立的系統單位,並儘量隱蔽對象的內部細節。只是向外部提供接口,下降了對象間的耦合度。
由封裝機制保證:數據不能被對象的使用者直接訪問。只容許經過由對象提供的方法或代碼訪問數據。
封裝的結果:信息隱蔽,
對象的操做定義了其餘的對象怎樣得到對其的訪問。每個對象都將提供給全部對象的公共操做公開化。它也提供僅侷限於特定對象的其它的操做(受保護的和私有的)。其餘的對象對被請求的對象怎樣提供操做(代碼,內部數據)沒有感知。

封裝

2.7 多態是什麼意思?

多態是指同一個命名可具備不一樣的語義。面向對象方法中,在通常類中定義的屬性或操做被特殊類繼承以後,具備不一樣的數據類型或表現出不一樣的行爲。

用途: 把具備共同基類的對象組成一組,並對它們進行一致的處理。
如,多邊形下的三角形、長方形、正多邊形。函數

多態

2.8 行爲分析:有靜態,動態之分

行爲分析是咱們用來考察一個對象(類)是怎樣提供它的操做的過程。

靜態模型:關係機制爲咱們提供了用同等(關聯、依賴)和層次(通常化/特殊化和聚合)結構組織類/對象的方法。不少面向對象的專家把模型的這部分結構稱做靜態模型。
靜態行爲:實現操做的代碼不被任何外部或內部的事件(動做)所影響。只要咱們使用命令式編程,就能夠作到這一點。spa

動態行爲:在行爲中發生這些變化的緣由多是因爲對象存在不少不一樣的狀態。隨後,對象根據它的狀態作出反映。使用命令式編程技術不能很好地處理這種類型的行爲。使用另外的一種稱爲有限狀態機的機制會更好地捕獲這樣的方法。線程

例如:航班定票系統中的定票過程對象「機票」的狀態:預約、等待、確認、取消、使用、歸檔
拓展:系統中的對象是相互協做的,經過發消息共同完成某項功能。這種協做的交互性,能夠用交互圖來進行描述。有不少系統具備併發行爲。從事物的併發行爲的原由上看,每一個併發行爲是主動發生的。體如今對象上,就是有一種對象是主動的,它表明着一個進程或線程,剩餘的另外一種對象則是被動的。在交互圖上也能體現出對象間的併發行爲。

3.複雜性控制:

引入包(package) 的概念,使模型具備大小不一樣的粒度層次,以利於控制複雜性。

4.面向對象的價值和做用:

天然語言和編程語言的---語言鴻溝
把數據和處理數據的過程做爲一個總體,即對象---有助於軟件的維護與複用

面向對象方法的主要優勢:3d

把易變的數據結構和部分功能封裝在對象內並加以隱藏,
一是保證了對象行爲的可靠性;
二是對它們的修改並不會影響其餘的對象,有利於維護,對需求變化有較強的適應性。

封裝性和繼承性有利於複用對象。
把對象的屬性和操做捆綁在一塊兒,提升了對象(做爲模塊)的內聚性,減小了與其餘對象的耦合,這爲複用對象提供了可能性和方便性。在繼承結構中,特殊類對通常類的繼承,自己就是對通常類的屬性和操做的複用。

5.拓展軟件開發方法:

結構化方法:從算法的角度進行建模,全部的軟件都用過程或函數做爲其主要構造塊。人們把大量精力都集中在控制流程和大算法的分解上。這種建模的缺點是模型脆弱。需求變更、維護困難。
面向對象方法:以衆多的類及交互模式(類間的協同工做)爲中心。 着重於的數據庫方法:以實體-關係模型爲中心,該模型的行爲放入觸發器和存儲過程當中。 對於一個給定的應用系統和開發方法,上述的任何一種方法可能都是正確的。只是代價和收益是不一樣的。
相關文章
相關標籤/搜索