结构化与面向对象化之应用比较
結(jié)構(gòu)化與面向?qū)ο蠡畱?yīng)用比較
引言
軟件工程中構(gòu)建工程經(jīng)常使用兩種方法:結(jié)構(gòu)化方法和面對對象方法。結(jié)構(gòu)化方法由艾茲格.迪杰斯特拉在1967年發(fā)表《goto陳述有害論》時提出。面向?qū)ο蠓椒ㄔ?0年代起逐步形成。兩種方法各有優(yōu)點,相伴存在至今。下面我們就來分析、探討結(jié)構(gòu)化程序設(shè)計方法與面向?qū)ο蟮姆椒ǖ膮^(qū)別,以及在現(xiàn)實應(yīng)用中如何在兩種方法中做出選擇。
一、結(jié)構(gòu)化方法
1. 基本思想
結(jié)構(gòu)化方法程序設(shè)計的基本思想是:
a.自頂向下
b.采用模塊化技術(shù)
c.分而治之
d.逐步求精地將信息系統(tǒng)按功能分解為若干模塊進(jìn)行分析與設(shè)計
應(yīng)用子程序?qū)崿F(xiàn)模塊化, 模塊內(nèi)部由順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等三大基本控制結(jié)構(gòu)組成。即從代表目標(biāo)系統(tǒng)整體功能的單個處理著手, 自頂向下不斷地把復(fù)雜的處理分解為子處理, 這樣一層一層地分解下去, 直到僅剩下若干個容易實現(xiàn)的子處理為止, 并寫出對每個最低層處理的描述。
2. 分析步驟
結(jié)構(gòu)化分析是一種面向數(shù)據(jù)流而基于功能分解的分析方法,在該階段主要通過采用數(shù)據(jù)流程圖、編制數(shù)據(jù)字典等工具,描述邊界和數(shù)據(jù)處理過程的關(guān)系,力求尋找功能及功能之間的說明。
通常所說的“結(jié)構(gòu)化分析”就是“數(shù)據(jù)流分析”。
數(shù)據(jù)流分析的核心特征是“分解”與“抽象”?!胺纸狻焙汀俺橄蟆笔莾蓚€相互有機(jī)聯(lián)系的概念,下層是上層的分解,上層是下層的抽象。例如,假設(shè)系統(tǒng)很復(fù)雜,為了理解它,將它分成了5個子系統(tǒng), 如果子系統(tǒng)仍然比較復(fù)雜還可以再繼續(xù)分解它, 如此下去, 直到每個子系統(tǒng)足夠簡單, 能清楚地被理解和表達(dá)為止。
典型的結(jié)構(gòu)化分析方法可以描述為: 功能分解=功能+子功能+功能接口。問題域映射為功能和子功能, 規(guī)格說明間接反映問題域。分析的結(jié)果是系統(tǒng)、子系統(tǒng)、功能、子功能層次結(jié)構(gòu)的建立。
3. 優(yōu)點
1)執(zhí)行效率高
2)易學(xué)易用
3)便于與用戶溝通
4. 缺點
1)不能直接反映問題域: 結(jié)構(gòu)化分析方法以數(shù)據(jù)流為中心, 強(qiáng)調(diào)數(shù)據(jù)的流動及每一個處理過程, 不是以問題域中的各事物為基礎(chǔ), 打破了各事物的界限, 分析結(jié)果不能直接反映問題域, 容易隱蔽一些對問題域的理解偏差。
2)數(shù)據(jù)和代碼缺乏保護(hù)機(jī)制: 一個特定全程數(shù)據(jù)既可以被操作這些數(shù)據(jù)的過程訪問, 也可以被其他過程訪問, 這給程序設(shè)計帶來了不安定因素, 一個不正常的數(shù)據(jù)修改或者過程調(diào)用可能會破壞正常的程序執(zhí)行流程或結(jié)果。
3)開發(fā)過程復(fù)雜: 由于結(jié)構(gòu)化方法將過程和數(shù)據(jù)分離為相互獨立的實體, 程序員在編程時必須時刻考慮到所要處理的數(shù)據(jù)的格式。對于不同的數(shù)據(jù)格式做相同的處理或?qū)τ谙嗤臄?shù)據(jù)格式做不同的處理都需要編寫不同的程序。結(jié)構(gòu)化程序的可重用性不好,修改擴(kuò)充難度大。
4. 適應(yīng)項目場合
綜上,結(jié)構(gòu)化設(shè)計方法的應(yīng)用域為:
1)適合開發(fā)數(shù)據(jù)處理較多,對反應(yīng)速度由要求的項目。
2)功能需求明確、規(guī)模較小、擴(kuò)展性要求不高的系統(tǒng)。
3)高性能、大規(guī)模并發(fā)和嵌入式系統(tǒng)應(yīng)用開發(fā)。
二、面對對象方法
1. 基本思想
面向?qū)ο蠓椒ǖ某霭l(fā)點是盡可能模擬人類習(xí)慣的思維方式, 使開發(fā)軟件的方法與過程盡可能接近人類認(rèn)識世界、解決問題的方法與過程, 也就是使描述問題的問題空間與實現(xiàn)解法的求解空間在結(jié)構(gòu)上盡可能一致。面向?qū)ο笫且环N運用對象、類、繼承、封裝、聚合、消息傳遞、多態(tài)性等概念來構(gòu)造系統(tǒng)的軟件開發(fā)方法。它打破了傳統(tǒng)的代碼、數(shù)據(jù)分離做法, 將一種數(shù)據(jù)結(jié)構(gòu)和操作該數(shù)據(jù)結(jié)構(gòu)的方法捆在一起, 封裝在一個程序內(nèi), 實現(xiàn)了數(shù)據(jù)封裝和信息隱藏, 通過“操作”作為接口實現(xiàn)信息傳遞。對外部來說, 只知道“它是做什么的”, 而不知道“它是如何做的”, 使得數(shù)據(jù)封裝、信息隱藏、抽象代碼共享等軟件工程思想得到充分體現(xiàn)。
2. 重要特征
1)抽象: 從許多事物中舍棄個別的、非本質(zhì)的特征, 抽取共同的、本質(zhì)性的特征, 就叫作抽象。抽象是形成概念的必須手段。
2)類和對象: “類”是面向?qū)ο笳Z言中的一種抽象數(shù)據(jù)類型。面向?qū)ο蠓椒ㄕJ(rèn)為客觀世界是由各種對象組成的, 復(fù)雜的對象可以由比較簡單的對象以某種方式組合而成。每個對象都有自己的屬性( 狀態(tài)和特征) 和方法( 行為) 。
3)繼承: 即特殊類的對象擁有其一般類的全部屬性與服務(wù)。由于具有“繼承”性這個特點, 使得程序員對共同的屬性以及方法只說明一次, 并且在具體的情況下可以擴(kuò)展細(xì)化或修改這些屬性及方法。
4)封裝: 表示對象狀態(tài)的數(shù)據(jù)和實現(xiàn)各個操作的代碼, 都被封裝在對象里面, 它與外界的聯(lián)系是通過對象的對外接口(方法)實現(xiàn)。外界不需要關(guān)心對象是如何進(jìn)行各種細(xì)節(jié)處理。
5)多態(tài): 指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果。就如不同的對象, 收到同一消息可以產(chǎn)生不同的結(jié)果。
3. 分析步驟
(1) 分析確定在問題空間和解空間出現(xiàn)的全部對象及其屬性;
(2) 確定應(yīng)施加于每個對象的操作,即對象固有的處理能力;
(3) 分析對象間的聯(lián)系,確定對象彼此間傳遞的消息;
(4) 設(shè)計對象的消息模式,消息模式和處理能力共同構(gòu)成對象的外部特性;
(5) 分析各個對象的外部特性,將具有相同外部特性的對象歸為一類,從而確定所需要的類;
(6) 確定類間的繼承關(guān)系,將各對象的公共性質(zhì)放在較上層的類中描述,通過繼承來共享對公共性質(zhì)的描述;
(7) 設(shè)計每個類關(guān)于對象外部特性的描述;
(8) 設(shè)計每個類的內(nèi)部實現(xiàn)(數(shù)據(jù)結(jié)構(gòu)和方法);
(9) 創(chuàng)建所需的對象(類的實例),實現(xiàn)對象間應(yīng)有的聯(lián)系(發(fā)消息)。
3. 優(yōu)點
面向?qū)ο蠹夹g(shù)與傳統(tǒng)的結(jié)構(gòu)化方法相比有以下優(yōu)點:
1)可重用性??芍赜眯允敲嫦?qū)ο筌浖_發(fā)的一個核心思路。通過類的繼承關(guān)系, 使公共的特性能夠共享, 簡化了對象、類的創(chuàng)建工作量, 增加了代碼的可重性。另外, 重用經(jīng)過測試的代碼還可以使產(chǎn)生額外錯誤的可能性達(dá)到最小。
2)可擴(kuò)展性??蓴U(kuò)展性是對現(xiàn)代應(yīng)用軟件提出的又一個重要要求。類的繼承性使類能反映現(xiàn)實世界的層次結(jié)構(gòu), 多態(tài)性反映了現(xiàn)實世界的復(fù)雜多樣。類的繼承性和多態(tài)性使軟件編碼具有良好的可重用性和可擴(kuò)展性。無需修改源代碼就可以使軟件功能容易擴(kuò)充和修改。
3)數(shù)據(jù)保護(hù)。數(shù)據(jù)和操作數(shù)據(jù)的算法不再分離, 它們被封裝在一起, 對象內(nèi)部的行為實現(xiàn)細(xì)節(jié)被隱藏。封裝防止了程序相互依賴性而帶來的變動影響。
4)可管理性。面向?qū)ο蟮拈_發(fā)方法采用類作為構(gòu)建系統(tǒng)的部件, 以對象作為系統(tǒng)的基本組成單元, 使整個項目的組織更加合理、方便, 因為歸納事物、劃分成類符合人們在認(rèn)識和管理客觀世界的習(xí)慣思維方式。
4. 缺點
(1)面向?qū)ο蠓椒ㄖ袑ο蟮拇_定有時會因客觀邊界模糊而難以確定,這樣就很難保證軟件描述的正確性;
(2)面向?qū)ο笤诿枋鰡栴}域方面的不足。在問題域模型中,面向?qū)ο蠓椒ò丫唧w或抽象的問題域現(xiàn)象直接表述為對象,同時把現(xiàn)象類型直接表述為類.大多數(shù)OOA方法支持多視角模型,即對同一問題域現(xiàn)象,不同的主體可以將它表述為同一對象或類型。但系統(tǒng)的描述者在應(yīng)用面向?qū)ο蠓椒ㄟM(jìn)行建模時常遇到這樣的困惑,描述者力圖通過面向?qū)ο蟮谋硎鰧Υ嬖诘膯栴}域現(xiàn)象達(dá)成一致,然而,結(jié)果得到的對象或類并不很適合于某個描述者對對象的獨自觀察而得到的表述。
5. 適應(yīng)項目場合
綜上,面向?qū)ο蠓椒ㄟm合對安全性要求較高、需要時常擴(kuò)展更新、重在用戶體驗的項目。
三、如何選擇開發(fā)方法
表1. 結(jié)構(gòu)化與對象化方法的比較
結(jié)構(gòu)化和面向?qū)ο笫擒浖こ痰某绦蛟O(shè)計方法中最本質(zhì)的思想方法。結(jié)構(gòu)化編程的基本思想就是把大的程序劃分為若干個相對獨立、功能簡單的程序模塊。它以過程為中心, 強(qiáng)調(diào)的是過程, 強(qiáng)調(diào)功能和模塊化, 通過一系列過程的調(diào)用和處理完成相應(yīng)的任務(wù)。面向?qū)ο缶幊桃詫ο鬄橹行? 是對一系列相關(guān)對象的操縱, 發(fā)送消息給對象, 由對象執(zhí)行相應(yīng)的操作并返回結(jié)果, 強(qiáng)調(diào)的是對象。理論上, 面向?qū)ο蟮某绦蛟O(shè)計方法將產(chǎn)生更好的模塊內(nèi)聚和耦合特性, 使得軟件更易于重用與維護(hù)。但在實踐中程序設(shè)計方法關(guān)注軟件生命周期的各個環(huán)節(jié), 從需求分析、總體設(shè)計到編碼、測試和維護(hù)。
從應(yīng)用的范圍看結(jié)構(gòu)化方法適用于數(shù)據(jù)少而操作多的問題。實踐證明對于像操作系統(tǒng)這樣的以功能為主的系統(tǒng)結(jié)構(gòu)化方法比較適應(yīng)它。面向?qū)ο蠓椒ㄕ孟喾矗瑢τ跀?shù)據(jù)庫信息管理等以數(shù)據(jù)為主的而操作較少的系統(tǒng),用面向?qū)ο蠓椒枋鲆糜诮Y(jié)構(gòu)化方法。
筆者認(rèn)為,在選擇開發(fā)方法時,不光要考慮項目本身適合什么方法,還要綜合考慮一些現(xiàn)實因素。
軟件開發(fā)的目標(biāo)是以最小的代價開發(fā)出滿足用戶需求的軟件,為此根據(jù)系統(tǒng)的實際需求可以針對具體情況選擇采用不同的設(shè)計方法,充分發(fā)揮面向?qū)ο笈c結(jié)構(gòu)化方法各自的優(yōu)勢。目前在大多數(shù)軟件系統(tǒng)的分析設(shè)計過程中,這兩種方法都兼而有之。筆者以為,開發(fā)者在開發(fā)實踐中從實際出發(fā)考慮執(zhí)行效率、開發(fā)者的技術(shù)水平、系統(tǒng)規(guī)模、是否為需求易變化的系統(tǒng)等因素,盡量利用它們各自的優(yōu)點,盡可能地避免他們的缺點。
如對于開發(fā)一些小型嵌入式實時監(jiān)控系統(tǒng)或同等穩(wěn)定小系統(tǒng)可用結(jié)構(gòu)化方法;對于開發(fā)入門者使用結(jié)構(gòu)化方法和面向?qū)ο蠓椒ㄏ嘟Y(jié)合;對于大型系統(tǒng)或者需求易變系統(tǒng)使用面向?qū)ο蠓椒?;開發(fā)的大型軟件系統(tǒng)通常是混合型系統(tǒng),即需要處理實時信息,又需要數(shù)據(jù)庫的支持,同時還涉及大量的事務(wù)性操作請求,在這種情況下,在選用面向?qū)ο蠓椒ǖ耐瑫r在局部處理上可以結(jié)合使用結(jié)構(gòu)化方法??傊?,根據(jù)實際出發(fā),選取合適的軟件開發(fā)方法,達(dá)到最佳的開發(fā)效益。
[參考文獻(xiàn)]
[1]喻梅.結(jié)構(gòu)化程序設(shè)計方法與面向?qū)ο蟪绦蛟O(shè)計方法之比較[J].科技信息,2009,14:453-454.
[2]符于江.程序設(shè)計中結(jié)構(gòu)化方法和面向?qū)ο蠓椒ǖ谋容^[J].電腦知識與技術(shù),2008,21:451-452+456.
[3]張莉,裘國永.結(jié)構(gòu)化方法與面向?qū)ο蠓椒ǖ谋容^分析[J].陜西師范大學(xué)學(xué)報(自然科學(xué)版),2001,02:29-32.
[4]曹昊,許玲,謝贊福,馬云云.結(jié)構(gòu)化較面向?qū)ο蠓椒▋?yōu)勢應(yīng)用域的研究[J].微計算機(jī)信息,2010,21:194-196+78.
總結(jié)
以上是生活随笔為你收集整理的结构化与面向对象化之应用比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 车险打折规定2020
- 下一篇: AES加解密