王志花
石家莊計算機職業(yè)學院,河北石家莊 050061
面向過程是一種以過程為中心的編程思想。面向過程也可稱之為“面向記錄”的編程思想,他們不支持豐富的“面向?qū)ο蟆碧匦裕ū热缋^承、多態(tài)等等),并且它們不允許混合持久化狀態(tài)和域邏輯。面向過程的思想,我們一般歸納為結(jié)構(gòu)化分析方法。根據(jù)軟件生命周期的不同階段,結(jié)構(gòu)化分析方法分為結(jié)構(gòu)化分析(SA)、結(jié)構(gòu)化設(shè)計(SD)、結(jié)構(gòu)化程序設(shè)計(SP)等,主要的工具有DFD圖、E-R圖、結(jié)構(gòu)化語言等,其精髓是自頂向下、逐步求精和模塊化設(shè)計。比如:某個單位的商品訂單處理軟件。我們在運用結(jié)構(gòu)化分析方法分析時,會根據(jù)數(shù)據(jù)是怎樣一步步在各個處理序列中流動的,歸結(jié)出所需要的處理模塊,通常這些處理模塊會用一個函數(shù)或一個過程來描述,然后再按從上到下的順序把這些處理模塊組織起來,形成完整的過程執(zhí)行序列。通常數(shù)據(jù)流圖在結(jié)構(gòu)化分析中可以很直觀地幫我們表達出這種形態(tài)。
結(jié)構(gòu)化分析方法是從功能角度來看待系統(tǒng)的,它展示了系統(tǒng)中端到端的處理過程,所以它在需求分析中顯得尤為重要。但從上例中我們也發(fā)現(xiàn),這種自上而下的功能分解,意味著整體的采購過程將首先被分析,分解出各子過程的依賴關(guān)系,然后才是對訂購子過程的分析。實際上,分析過程往往不是這樣,通常同時需要各個不同層次上的系統(tǒng)信息,較低層的模型可能先被描述,然后經(jīng)過抽象最后產(chǎn)生一個總模型。特別對一些大型的項目,需求不明確,結(jié)構(gòu)復(fù)雜,因果關(guān)系無法分辨清楚,再把這種清晰的過程模擬出來實在是太困難了,在這種情況下面向過程就不再適用。
在實際應(yīng)用中,以上的矛盾目前已經(jīng)被解決,同時也產(chǎn)生了很多新的方法論,面向?qū)ο缶褪乾F(xiàn)在比較常用的方法論之一。
面向?qū)ο螅∣bject Oriented,簡稱OO)方法認為,世界是由一個個獨立的“對象”組成的,一切皆對象,每個對象都有自己的狀態(tài)和動作。具有相似狀態(tài)和動作的對象抽象出“類”,而這些“對象”就是這個“類”的一個實例。繁雜的對象可以由簡單的對象以某種方式組合而成,不同的對象相互作用就形成了系統(tǒng)。
面向?qū)ο蟮乃拇筇匦跃褪浅橄?、繼承、封裝、多態(tài)。這也是區(qū)別于面向過程的主要方面。
1)抽象:是指將具有一致的狀態(tài)和行為的對象抽象成類。所以類就是一組具有相同屬性和方法的對象的集合,比如:小明這個人-對象,人類-類。其中特殊的是抽象類,它不能被實例化,抽象方法只需聲明,而不需實現(xiàn);
2)繼承:是子類自動共享父類屬性和方法的一種機制,是面向?qū)ο蠓椒▍^(qū)別于其他方法的一個核心思想。繼承性規(guī)范了類的等級結(jié)構(gòu),實現(xiàn)了公共特性的共享,提高了軟件的重用性;
3)封裝:封裝的目的是使對象的定義和實現(xiàn)分離,減少耦合。對象之間只能通過接口進行信息交流,對象外部不能對對象中的數(shù)據(jù)隨意進行訪問和修改;
4)多態(tài):指同一操作作用于不同對象時可以有不同的執(zhí)行結(jié)果。
與結(jié)構(gòu)化方法類似,面向?qū)ο蠓椒ㄒ舶嫦驅(qū)ο蠓治觯∣OA)、面向?qū)ο笤O(shè)計(OOD)、面向?qū)ο蟮某绦蛟O(shè)計(OOP)三個階段,常用的輔助工具有UML、CASE工具等。
我們同樣以一個例子來運用一下面向?qū)ο蠓椒ā@簩τ谝粋€圖書管理系統(tǒng)來說,它具有兩類用戶,一類具有借閱權(quán)限,而另一類只能在館內(nèi)閱讀。
面向?qū)ο蟮囊粋€任務(wù)就是找出其中的對象,然后根據(jù)這些對象抽象出所具有的類和類與類之間的關(guān)系。對象分類就是描述對象類與對象類之間是如何通過共有屬性和服務(wù)相互關(guān)聯(lián)。在本例中,只有閱讀權(quán)限的用戶是一類用戶,具有借閱權(quán)限的用戶是另一類用戶,他們具有不同的權(quán)限,但也可以抽象出他們都是用戶,他們都有用戶名、地址、電話等共有屬性,具有注冊和取銷注冊的動作,所以在這兩個類之上,又可以抽象出一個用戶類,它是這兩個類的父類,具有這兩個類的共有屬性。這兩個類繼承用戶類,便具有了這些共有屬性,同時,這兩個類又可以增加自己各自的屬性和方法。在某些需要下,還可以對這兩個分類再進行細分,加入更多的不同的屬性和方法形成下一級的子類,這些子類同樣繼承于這兩個類之一,并間接繼承于用戶類,具有其相應(yīng)父類及父類的父類的屬性和方法。
面向?qū)ο蟮乃枷敫先祟愓J識世界的過程,人類認識世界是以客體為視角的,客體的屬性反應(yīng)客體在某一時刻的狀態(tài),客體的行為反映客體所能從事的活動??腕w和客體之間沒有直接的關(guān)系,它們是通過某種刺激才發(fā)生連接。就像人類的個體,人與人無直接的關(guān)系,當一個人需要另一個人幫助時,兩個個體才發(fā)生關(guān)系。面向過程更加注重功能,分化了個體,背離了人們認識世界的方式。面向?qū)ο髮傩院头椒ń壎ㄔ谝黄鹦纬闪讼鄬Ψ€(wěn)定的個體,如果需要改變也只是這個類對象個體的變化,不會像面向過程一樣,牽一發(fā)而動全身,一個變化就引起很多部分跟著變化,這使得安全性及擴展性都得到了提高。再有就是重用性,它是衡量一個軟件產(chǎn)品成功與否的重要標志。面向過程的設(shè)計,每個過程都是針對某個項目某個處理的特定過程,它無法實現(xiàn)大力度的復(fù)用,而面向?qū)ο蟮脑O(shè)計有高度的抽象,它把功能的實現(xiàn)封裝在組件的內(nèi)部,對外提供統(tǒng)一的接口,只要調(diào)用這個組件時,符合這些接口的要求,就可以把該組件放在相似的項目中使用。基于以上的優(yōu)勢,面向?qū)ο蟮姆治龇椒ㄔ絹碓蕉嗟谋蝗藗兪褂茫蔀楝F(xiàn)在分析和設(shè)計方法中的主流。
[1]圣安德魯斯大學著.軟件工程[M].8版.程成,陳霞,譯.機械工業(yè)出版社.
[2]張友生著.系統(tǒng)分析師教程[M].清華大學出版社.
[3]面向?qū)ο?百度百科.http://baike.baidu.com/view/125370.htm.
[4]面向過程&面向?qū)ο?Jerrytian.http://www.cnblogs.com/JerryTian/archive/2011/04/07/2007385.html.