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