馮媛媛
摘要:隨著面向?qū)ο蟪绦蛟O(shè)計(jì)方法的出現(xiàn),對(duì)象作為該方法的核心技術(shù),正在得到新的開(kāi)發(fā)語(yǔ)言和新的系統(tǒng)架構(gòu)的支持,兩種開(kāi)發(fā)方法存在著質(zhì)的區(qū)別。本文從面向過(guò)程程序設(shè)計(jì)的結(jié)構(gòu)化思想和面向?qū)ο蟪绦蛟O(shè)計(jì)的抽象、封裝、繼承、多態(tài)技術(shù)入手做主要論述,詳細(xì)介紹了兩種程序設(shè)計(jì)方法的特點(diǎn)、優(yōu)缺點(diǎn)以及相互聯(lián)系。
關(guān)鍵詞:面向?qū)ο?;面向過(guò)程;程序設(shè)計(jì)
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)07-0185-01
1 引言
程序設(shè)計(jì)是為了解決某一類問(wèn)題所設(shè)計(jì)的通用的解決辦法的程序,通過(guò)運(yùn)行程序后進(jìn)行特定的輸入域輸出,最后得出運(yùn)行結(jié)果,是構(gòu)造一個(gè)軟件活動(dòng)必不可少的部分,程序設(shè)計(jì)活動(dòng)與大多數(shù)設(shè)計(jì)活動(dòng)一樣是為了平衡約束條件和相互矛盾的需求而進(jìn)行的。計(jì)算機(jī)技術(shù)在早期發(fā)展階段,機(jī)器資源非常昂貴,因此在設(shè)計(jì)程序時(shí)必須要考慮到時(shí)間、空間代價(jià)等因素,而隨著計(jì)算機(jī)應(yīng)用技術(shù)的發(fā)展和軟件規(guī)模的擴(kuò)張,程序的結(jié)構(gòu)、可重用性、可維護(hù)性、可擴(kuò)展性等因素在設(shè)計(jì)時(shí)顯得尤為重要?,F(xiàn)如今,面向?qū)ο蠛兔嫦蜻^(guò)程的程序設(shè)計(jì)是較為常用的兩個(gè)成熟的設(shè)計(jì)方式。
2 面向?qū)ο蠛兔嫦蜻^(guò)程的程序設(shè)計(jì)各自的特點(diǎn)
2.1 面向?qū)ο蟮某绦蛟O(shè)計(jì)
面向?qū)ο缶幊淌鞘褂脤?duì)象的編程范式——包含數(shù)據(jù)域、方法以及它們之間的交互來(lái)設(shè)計(jì)應(yīng)用和程序。其程序設(shè)計(jì)方法包括數(shù)據(jù)抽象、封裝、通信、模塊化、多態(tài)和繼承。簡(jiǎn)單來(lái)看,我們可以對(duì)面向?qū)ο缶幊套鞒鋈缦聨c(diǎn)理解:首先,它必須將數(shù)據(jù)抽象為模塊結(jié)構(gòu);其次,必須存在某種方式來(lái)實(shí)現(xiàn)代碼的多態(tài)執(zhí)行;最后,它至少能部分壓縮代碼和函數(shù)。面向?qū)ο蟮某绦蛟O(shè)計(jì)大都遵循傳遞者模式(Mediator Pattern),并且被設(shè)計(jì)為從sender中解耦caller,其都提供狀態(tài),且都是模塊化的[1]。
2.2 面向過(guò)程的程序設(shè)計(jì)
面向過(guò)程是一種以事件為中心的編程思想,以功能(行為)為導(dǎo)向,按模塊化的設(shè)計(jì),分析出解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一步一步實(shí)現(xiàn),在實(shí)現(xiàn)過(guò)程中一個(gè)一個(gè)依次調(diào)用即可。面向過(guò)程的程序設(shè)計(jì)是自頂而下的,首先他需要設(shè)計(jì)者將應(yīng)用程序需要完成的業(yè)務(wù)按照功能分類,并劃分出子模塊,同時(shí)將整個(gè)應(yīng)用程序所要完成的事情寫(xiě)在一個(gè)main函數(shù)中,由該main函數(shù)對(duì)這一系列的子函數(shù)的進(jìn)行調(diào)用。對(duì)于每個(gè)子函數(shù)來(lái)說(shuō),可以對(duì)其進(jìn)行再次分解,使其變?yōu)槟K更小的子函數(shù)。完成一個(gè)過(guò)程式的設(shè)計(jì)從本質(zhì)上來(lái)說(shuō)就是一直重復(fù)該過(guò)程。用一句話來(lái)概括面向過(guò)程的設(shè)計(jì)方法的特征即為:以函數(shù)為中心,并將其作為基本單位來(lái)劃分程序,數(shù)據(jù)在這種設(shè)計(jì)方法中一般處于從屬的位置。
3 面向?qū)ο蠛兔嫦蜻^(guò)程的程序設(shè)計(jì)的比較
3.1 從在開(kāi)發(fā)過(guò)程中的運(yùn)用來(lái)看面向?qū)ο蠛兔嫦蜻^(guò)程的程序設(shè)計(jì)
面向過(guò)程的設(shè)計(jì)方法是通過(guò)逐步細(xì)化問(wèn)題的方式來(lái)進(jìn)行設(shè)計(jì),該方法符合多數(shù)人的邏輯思維方式。但是由于過(guò)程式的設(shè)計(jì)是自頂向下的,這就需要設(shè)計(jì)人員對(duì)要解決的問(wèn)題有一個(gè)整體上的把握,但是現(xiàn)實(shí)情況中是很少有人能做到這一點(diǎn)的,尤其是在比較復(fù)雜的情況下,因此這種方法對(duì)于開(kāi)發(fā)需求比較多的問(wèn)題或比較復(fù)雜的工程項(xiàng)目而言,是不太適用的。開(kāi)發(fā)一個(gè)系統(tǒng)的過(guò)程是一個(gè)創(chuàng)造性的過(guò)程,開(kāi)發(fā)者或設(shè)計(jì)者不僅需要不斷地去了解要開(kāi)發(fā)的系統(tǒng),還需要學(xué)習(xí)相應(yīng)的技術(shù),而過(guò)程式的設(shè)計(jì)方法忽略了這一點(diǎn)。面向?qū)ο蟮脑O(shè)計(jì)方法是自底向上的,它不需要在一開(kāi)始用main概括出整個(gè)應(yīng)用程序,其自底向上的特性允許程序設(shè)計(jì)者從問(wèn)題的最底層開(kāi)始逐步加深對(duì)系統(tǒng)整體的理解,開(kāi)發(fā)者在設(shè)計(jì)過(guò)程中遇到的需求變化及得到的新的理解,都會(huì)再次作用到系統(tǒng)開(kāi)發(fā)本身,形成一種螺旋式的開(kāi)發(fā)方式。
3.2 從編程語(yǔ)言來(lái)看面向?qū)ο蠛兔嫦蜻^(guò)程的程序設(shè)計(jì)
C語(yǔ)言是面向過(guò)程的設(shè)計(jì)方法的代表性語(yǔ)言,其包括定義數(shù)據(jù)的元素和定義操作的元素,比如在C語(yǔ)言中,要使得數(shù)據(jù)和操作分離開(kāi)來(lái),就要單獨(dú)來(lái)定義數(shù)據(jù)和操作,數(shù)據(jù)和操作的元素在C語(yǔ)言中分別用結(jié)構(gòu)和函數(shù)來(lái)定義。數(shù)據(jù)和操作的分離可能會(huì)造成對(duì)一種數(shù)據(jù)的操作分布在程序的各個(gè)角落,那么當(dāng)我們要對(duì)數(shù)據(jù)和操作進(jìn)行修改的時(shí)候,即便是微小的修改,也會(huì)變得非常困難。在面向過(guò)程的設(shè)計(jì)中,main()函數(shù)可以調(diào)用子函數(shù),對(duì)于整個(gè)應(yīng)用程序來(lái)說(shuō)處在一個(gè)尤為重要的位置。一般來(lái)說(shuō)在面向過(guò)程的設(shè)計(jì)方式中,對(duì)于整個(gè)系統(tǒng)的概括性描述開(kāi)發(fā)者會(huì)寫(xiě)在一個(gè)main()函數(shù)中,之后再逐步細(xì)化出整個(gè)應(yīng)用程序。然而,這樣做會(huì)使得程序的核心邏輯不夠清晰,易與一些較外延和易變化的邏輯混淆在一起[2]。
封裝性、繼承性和多態(tài)性是java語(yǔ)言中的三個(gè)典型的面向?qū)ο蟮奶匦浴jP(guān)于封裝性:在java語(yǔ)言中,與程序相關(guān)的變量和方法由對(duì)象對(duì)其進(jìn)行相應(yīng)的封裝,其中變量指對(duì)象的狀態(tài),方法指對(duì)象具有的行為。通過(guò)對(duì)象的封裝,如通過(guò)對(duì)類中的成員設(shè)置訪問(wèn)權(quán)限,實(shí)現(xiàn)類成員信息的隱藏。關(guān)于繼承性:通過(guò)繼承可實(shí)現(xiàn)代碼重復(fù)利用。Java中的類基本都是通過(guò)直接或間接地繼承java.lang.Object類而得到的。在父類中,如果成員變量和方法的訪問(wèn)權(quán)限為private,則不能被子類繼承。父類的方法能夠被子類重寫(xiě),子類與父類同名的成員變量也能被子類重命名,但Java語(yǔ)言不能夠?qū)崿F(xiàn)多重繼承。關(guān)于多態(tài)性:在java語(yǔ)言中,多態(tài)性體現(xiàn)在兩個(gè)方面:靜態(tài)多態(tài)性和動(dòng)態(tài)多態(tài)性,靜態(tài)多態(tài)性也稱為編譯時(shí)多態(tài),在編譯階段,編譯器會(huì)根據(jù)參數(shù)的不同來(lái)靜態(tài)確定具體調(diào)用哪個(gè)被重載的方法,由方法重載實(shí)現(xiàn);動(dòng)態(tài)多態(tài)性也稱為運(yùn)行時(shí)多態(tài),由方法重寫(xiě)實(shí)現(xiàn)。程序中凡是使用父類對(duì)象的地方,都可以用子類對(duì)象來(lái)代替。一個(gè)對(duì)象可以通過(guò)引用子類的實(shí)例來(lái)調(diào)用子類的方法。
4 結(jié)語(yǔ)
總之,面向?qū)ο笾匾晫?duì)現(xiàn)實(shí)世界的抽象,用于解決“做什么”在面向?qū)ο笤O(shè)計(jì)中,類封裝了數(shù)據(jù),而類的成員函數(shù)作為其對(duì)外的接口,抽象地描述了類。用類將數(shù)據(jù)和操作這些數(shù)據(jù)的函數(shù)放在一起,這可以說(shuō)就是面向?qū)ο笤O(shè)計(jì)方法的本質(zhì)。而面向過(guò)程的設(shè)計(jì)方法重視對(duì)問(wèn)題的功能模塊化,用于解決“怎么做”。
參考文獻(xiàn)
[1]譚娟.面向過(guò)程和面向?qū)ο蟪绦蛟O(shè)計(jì)的比較[J].湖南科技學(xué)院學(xué)報(bào),2008,(12):117-118.
[2]石博文.淺談面向?qū)ο蠛兔嫦蜻^(guò)程程序設(shè)計(jì)[J].電子世界,2017,(1):59-60.endprint