摘要:本文就面向?qū)ο蟪绦蛟O(shè)計(jì)方法的基本概念以及其相關(guān)的特性和功能,并將結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)方法做了一定的比較,并以Windows應(yīng)用程序作為例子詳細(xì)的闡述了面向?qū)ο蟪绦蛟O(shè)計(jì)的基本編程思想。
關(guān)鍵詞:面向?qū)ο蟪绦蛟O(shè)計(jì) 結(jié)構(gòu)化程序設(shè)計(jì)
一、面向?qū)ο笤O(shè)計(jì)方法
軟件設(shè)計(jì)有兩種主流設(shè)計(jì)方法:以結(jié)構(gòu)化程序設(shè)計(jì)為基礎(chǔ)的結(jié)構(gòu)化軟件設(shè)計(jì)和由面向?qū)ο笤O(shè)計(jì)方法導(dǎo)出的面向?qū)ο蟮能浖O(shè)計(jì), 20世紀(jì)70年代末到80年代初的結(jié)構(gòu)化設(shè)計(jì)方法即傳統(tǒng)設(shè)計(jì)方法,以區(qū)別于后來(lái)興起的面向?qū)ο蟮脑O(shè)計(jì)方法。在軟件設(shè)計(jì)周期中,面向?qū)ο笤O(shè)計(jì)方法是一種全新的設(shè)計(jì)和構(gòu)造軟件的方法,它使計(jì)算機(jī)解決問(wèn)題的方式更符合人類(lèi)的解決問(wèn)題的思維方式,更能直接的描述客觀世界,同時(shí)也可以增加的代碼的可重用性,是目前和未來(lái)軟件開(kāi)發(fā)的方向[1]。
面向?qū)ο笤O(shè)計(jì)在整個(gè)軟件設(shè)計(jì)中占據(jù)著非常重要的部分,面向?qū)ο笤O(shè)計(jì)也是將分析階段所建立的分析模型轉(zhuǎn)變?yōu)檐浖O(shè)計(jì)模型,但是面向?qū)ο蠓治龊兔嫦驅(qū)ο笤O(shè)計(jì)之間沒(méi)有明顯的界限,面向?qū)ο蟮姆椒ㄊ腔诔橄蟆⑿畔㈦[藏、功能獨(dú)立和模塊化等重要軟件設(shè)計(jì)概念基礎(chǔ)上的,現(xiàn)階段的軟件設(shè)計(jì)基本上都運(yùn)用了面向?qū)ο蟮脑O(shè)計(jì)方法[2]。面向?qū)ο蟮拈_(kāi)發(fā)支持鼓勵(lì)軟件實(shí)踐中的信息隱藏,數(shù)據(jù)抽象和封裝,可以對(duì)單獨(dú)對(duì)一個(gè)對(duì)象內(nèi)部進(jìn)行隔離修改,那么就使得運(yùn)用面向?qū)ο箝_(kāi)發(fā)的軟件更容易修改、擴(kuò)充和維護(hù)[1]。
對(duì)象和類(lèi)是面向?qū)ο蟪绦蛟O(shè)計(jì)的基石,其基本的機(jī)制便是方法和消息。消息是要求某個(gè)對(duì)象執(zhí)行類(lèi)中某個(gè)操作的規(guī)格說(shuō)明;方法就是對(duì)象執(zhí)行的操作。面向?qū)ο蟪绦蛟O(shè)計(jì)三個(gè)重要特征:封裝性,繼承性和多態(tài)性。
(一)對(duì)象(Object)和類(lèi)(Clasess)
對(duì)象即指現(xiàn)實(shí)生活中無(wú)所不在、各種各樣的實(shí)體,它可以使具體的事物,也可以是抽象的實(shí)體[2]。從對(duì)象的構(gòu)成和內(nèi)容來(lái)看,設(shè)計(jì)程序時(shí)使用對(duì)象有以下優(yōu)點(diǎn):對(duì)象是對(duì)物體的直接抽象,這種抽象簡(jiǎn)化了實(shí)際物體的模型,同時(shí)以一種可以操作的形式將實(shí)體表達(dá)出來(lái)。進(jìn)行了數(shù)據(jù)的封裝后,掩蔽了實(shí)現(xiàn)的復(fù)雜性,對(duì)于用戶(hù)使用起來(lái)就更加方便。
在現(xiàn)實(shí)生活中,具有相似性質(zhì),執(zhí)行相同操作的對(duì)象,稱(chēng)為同一類(lèi)對(duì)象,即類(lèi)是同一種對(duì)象的集合與抽象[2]。例如,在Visual Basic中窗體都是Form類(lèi)的實(shí)體,一個(gè)單獨(dú)的窗體也是一個(gè)類(lèi)。
(二)數(shù)據(jù)封裝(Data Encapsulation)
數(shù)據(jù)封裝是類(lèi)的一個(gè)重要特性。數(shù)據(jù)封裝是把數(shù)據(jù)和相關(guān)的操作設(shè)在一個(gè)包中,那么程序不能直接訪(fǎng)問(wèn)對(duì)象中的變量,只有通過(guò)對(duì)象的方法才能作用于數(shù)據(jù)。
(三)繼承(Inheritance)
我們首先在對(duì)象的基礎(chǔ)上創(chuàng)建對(duì)象,新的對(duì)象就會(huì)繼承原先對(duì)象的所有屬性和特點(diǎn),同時(shí)根據(jù)實(shí)際情況也可以選擇和修改父對(duì)象的屬性和功能,這就叫做繼承。利用這點(diǎn),可以將舊的程序擴(kuò)充為當(dāng)前所需要的,也可以從已知的類(lèi)中派生出新的類(lèi)來(lái)。
(四)多態(tài)性(Polymorphism)
多態(tài)性就是多種表現(xiàn)形式,不同事物具有不同表現(xiàn)形式的能力,具體來(lái)說(shuō),可以用“一個(gè)對(duì)外接口,多個(gè)內(nèi)在實(shí)現(xiàn)方法”表示。多態(tài)機(jī)制使具有不同內(nèi)部結(jié)構(gòu)的對(duì)象可以共享相同的外部接口,通過(guò)這種方式減少代碼的復(fù)雜度。
二、結(jié)構(gòu)化程序設(shè)計(jì)與面向?qū)ο蟪绦蛟O(shè)計(jì)
結(jié)構(gòu)化程序設(shè)計(jì)是由算法和數(shù)據(jù)結(jié)構(gòu)組成,算法指處理數(shù)據(jù)的特定的方法。結(jié)構(gòu)化程序設(shè)計(jì)首要想法是如何處理數(shù)據(jù),然后再選擇最為方便處理的數(shù)據(jù)結(jié)構(gòu),那么重點(diǎn)主要集中在數(shù)據(jù)上了。結(jié)構(gòu)化程序設(shè)計(jì)的基本思想是:系統(tǒng)按功能要求分解為若干個(gè)子模塊,子模塊再根據(jù)需求進(jìn)一步分解為子模塊,不斷的進(jìn)行分解,從上往下進(jìn)行分解,這樣的形式是自頂向下的“瀑布式”設(shè)計(jì),僅運(yùn)用了順序、分支和循環(huán)三種結(jié)構(gòu)設(shè)計(jì)編碼。
面向?qū)ο蟪绦蛟O(shè)計(jì)中,用戶(hù)需要做的事向?qū)ο髠魉拖ⅰ>幊倘藛T在設(shè)計(jì)過(guò)程中要做的就是向?qū)ο筇幚磉m當(dāng)?shù)南⒁约八膬?nèi)部數(shù)據(jù),這樣就最大限度了提高了代碼的可重用性,縮短了調(diào)試時(shí)間。面向?qū)ο蟪绦蛟O(shè)計(jì)與結(jié)構(gòu)化程序設(shè)計(jì)是相反的,面向?qū)ο蟮某绦蛟O(shè)計(jì)是從下往上的“噴泉式”的設(shè)計(jì),對(duì)象是數(shù)據(jù)處理方法緊密結(jié)合的整體。
三、Windows及應(yīng)用程序與面對(duì)對(duì)象的程序設(shè)計(jì)
Windows中的圖形用戶(hù)接口包括窗口,下拉式菜單,對(duì)話(huà)框等各種控件,這就使得Windows應(yīng)用程序非常容易使用。我們用結(jié)構(gòu)化的程序設(shè)計(jì)方法開(kāi)發(fā)Windows應(yīng)用程序非常困難,即使要在屏幕上生成一個(gè)簡(jiǎn)單的窗口或是一個(gè)簡(jiǎn)單的下拉式菜單也要編寫(xiě)幾十條甚至幾百條復(fù)雜的代碼,寫(xiě)這些代碼的前提必須是我們對(duì)Windows具有非常深入的了解。那么在這種情況下,一種開(kāi)發(fā)時(shí)間短、質(zhì)量高、復(fù)用性高等比結(jié)構(gòu)化程序設(shè)計(jì)方法優(yōu)良的設(shè)計(jì)方法。由于Windows的進(jìn)城的核心也是對(duì)消息的處理,因此Windows程序編程是以消息為核心。消息也是面向?qū)ο蟪绦蛟O(shè)計(jì)的基本機(jī)制,程序的進(jìn)程的核心也是對(duì)消息的處理,因此面向?qū)ο蟪绦蛟O(shè)計(jì)比結(jié)構(gòu)化程序設(shè)計(jì)更適合于開(kāi)發(fā)Windows應(yīng)用程序。利用面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝性可以把Windows應(yīng)用程序的所具有的行為進(jìn)行封裝,形成一個(gè)類(lèi)層次庫(kù),這樣就為Windows應(yīng)用程序提供一個(gè)一致、直觀和簡(jiǎn)單的與Windows的接口。面向?qū)ο蟪绦蛟O(shè)計(jì)具有繼承性這一特性,Windows的應(yīng)用程序可簡(jiǎn)單、方便的繼承和選擇性的使用Windows特性而不必重寫(xiě)這些代碼,同時(shí),編程人員也可以借用其他應(yīng)用程序的功能代碼,或是稍作修改,也不必考慮Windows底層的細(xì)節(jié)。那么這樣看來(lái),類(lèi)層次庫(kù)就大大的降低了Windows程序設(shè)計(jì)的復(fù)雜性,編程人員也不必一條一條代碼的編寫(xiě),顯著的減少了創(chuàng)建Windows應(yīng)用程序界面所需的源代碼量,因此面向?qū)ο蟮某绦蛟O(shè)計(jì)在開(kāi)發(fā)應(yīng)用程序方面顯示出巨大的優(yōu)越性。
四、結(jié)語(yǔ)
面向?qū)ο蟮某绦蛟O(shè)計(jì)方法是當(dāng)前軟件設(shè)計(jì)的一個(gè)主要潮流,采用這種方法開(kāi)發(fā)出的軟件具有極大的穩(wěn)定性、可維護(hù)性和可重用性,面向?qū)ο蟪绦蛟O(shè)計(jì)方法運(yùn)用于軟件設(shè)計(jì)中極大的提高的功能代碼的復(fù)用性,大大的提高了工作效率。
參考文獻(xiàn):
[1]李雙雙,李探.面對(duì)對(duì)象的設(shè)計(jì)方法[J].計(jì)算機(jī)光盤(pán)軟件與應(yīng)用,2010年第5期
[2]史濟(jì)民,顧春華,李昌武,苑榮.軟件工程——原理、方法與應(yīng)用(第二版)[M].北京:高等教育出版社,1990
[3]龔沛曾,楊志強(qiáng).陸慰民.Visual Basic程序設(shè)計(jì)教程(第三版)[M].高等教育出版社,2007