1. 程式人生 > >面向過程程式設計,面向物件程式設計和麵向切面程式設計理解

面向過程程式設計,面向物件程式設計和麵向切面程式設計理解

面向過程(Procedure Oriented)是一種以過程為中心的程式設計思想。這些都是以什麼正在發生為主要目標進行程式設計,不同於面向物件的是誰在受影響。與面向物件明顯的不同就是封裝、繼承、類。

面向物件程式設計(Object Oriented Programming,OOP,面向物件程式設計)是一種計算機程式設計架構。OOP 的一條基本原則是計算機程式是由單個能夠起到子程式作用的單元或物件組合而成。OOP 達到了軟體工程的三個主要目標:重用性、靈活性和擴充套件性。為了實現整體運算,每個物件都能夠接收資訊、處理資料和向其它物件傳送資訊。

面向切面程式設計(Aspect Oriented Programming(AOP)),是一個比較熱門的話題。AOP主要實現的目的是針對業務處理過程中的切面進行提取,它所面對的是處理過程中的某個步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。

通過以下案例深入瞭解三者區別:

專案背景:大學新生報名,需要去相應學院註冊登記。接著去財務處進行繳費,繳費完畢,拿著單子領取軍訓服裝,最後去宿舍整理床鋪。

需求分析對每個同學需要完成以下功能:(假設新生有小明,小李,小王,小周)
注:四位同學不是同一學校的,但是都需要通過以下程式進行註冊報名,各個學校可能參考下面流程進行定製
(1). 去相應學院註冊登記
(2). 去財務處進行繳費
(4). 繳費完畢
(5). 拿著單子領取軍訓服裝
(6). 去宿舍整理床鋪。

一 。 面向過程:

小明來學校報名
–>小明去相應學院註冊登記
–>小明去財務處進行繳費
–>小明繳費完畢
–> 小明拿著單子領取軍訓服裝
–>小明去宿舍整理床鋪
小明註冊完畢!


小李來學校報名
–>小李去相應學院註冊登記
–>小李去財務處進行繳費
…….
小李註冊完畢!
……..

可以明顯的看出來,面向過程主要是對對整個事情的過程通過記流水賬的方式進行實現。當然開發效率比較低,不適合做大型應用(當然作業系統核心主要是面向過程語言寫的這比較特殊,寫起來肯定得好久好久( ▼-▼ ))。

當需求變化時,比如需要去掉領取軍訓服的業務,那就麻煩了,需要對每位同學的過程進行修改,,( ▼-▼ )想想都有點可怕!

或者某些同學無法正常報道,需要改動和這些學生相關的程式碼,這工作量也不小。可見面向過程的變成想法還是需要進一步提高。

要是再加上各個學校定製的話,作為萌萌噠程式設計師,該哭了( ▼-▼ )

二。面向物件

首先,對學生報名進行抽象,抽象出來一個學生類,具有下面這幾個方法
(1). 去相應學院註冊登記
(2). 去財務處進行繳費
(4). 繳費完畢
(5). 拿著單子領取軍訓服裝
(6). 去宿舍整理床鋪。

小明來學校報名
通過上面抽象出來的學生類建立學生例項:小明。然後一次呼叫它的方法:
小明.去相應學院註冊登記();
小明.去財務處進行繳費();
小明.繳費完畢();
小明.拿著單子領取軍訓服裝();
小明.去宿舍整理床鋪();
小明註冊完畢!
小李來學校報名
小李.去相應學院註冊登記();
小李.去財務處進行繳費();
…….
小李註冊完畢!
……..

比起面向過程程式設計,面向物件程式設計簡化了程式碼量,通過抽象,實現程式碼的複用,提高了開發效率。但是依然需要對每個物件進行引用。只能說是效率相對較高。

當需求發生變化時,例如,某些同學未能正常報到,需要刪除相關程式碼,任務量相對小點。改動某個環節的內容,也很方便

但是,當每個學校進行定製的時候尼?這會就有點尷尬了,之前抽象的學生類都得改,改成每個學校的定製類,這樣就會有多個學校類,還得該業務程式碼,,,不敢再想了,有點想哭的感覺。( ▼-▼ )

二。面向切面

首先對業務邏輯進行抽象,針對上面的六個業務進行各自封裝實現。(已經六個類了)
然後,製作代理類,根據學校需求進行個性化封裝學生類(好多類,至少一個)。
小明來學校報名
建立代理類,
根據學校規定呼叫相應方法,完成報名註冊功能
小明註冊完畢!
小李來學校報名
建立代理類,
根據學校規定呼叫相應方法,完成報名註冊功能
…….
小李註冊完畢!
……..

切面,指的是專案模組中某些業務邏輯。面向切面程式設計通俗一點就是面向業務的一種程式設計思想(當然業務需要一定的共性),然後通過代理完成類的建立,極大程度的降低程式碼的重複,有效的提高了程式碼的重用率和開發效率。。。當然結合IOC(控制反轉),將物件直接注入到代理類中,通過代理完成呼叫方法,那就更完美了

例子比較牽強,看下圖形象一點:

這裡寫圖片描述

切面是橫跨流程的,實現某個特定位置的功能,面向功能進行抽象。具體流程只需做引用即可,而不至於不同流程中冗餘很多類似程式碼。