劉雅菲 宇澳 齊笑甜
摘 ?要:面向過程和面向?qū)ο笞鳛槲覀兙幊坛S玫姆椒ǎ诟呒夘I(lǐng)域中有廣泛的應(yīng)用。在計(jì)算機(jī)編程中,各有其優(yōu)勢和長處,為寫出復(fù)雜度更低的程序,使之擁有更好的性能,我們要對其特點(diǎn)有明確的了解。該文主要通過具體實(shí)例分析面向過程和面向?qū)ο笤诓煌Z言中的用法,從而對其編程風(fēng)格做出更明確的闡述,能夠更深入地使用、了解這兩種方法。
關(guān)鍵詞:程序設(shè)計(jì) ?面向過程 ?面向?qū)ο?/p>
中圖分類號:TP31 ? 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2020)03(b)-0003-02
“面向過程”(Procedure Oriented)是一種以過程為中心的編程思想。也可被稱為“面向記錄”編程思想[1],主要語言有Pascal、C語言等。面向?qū)ο螅∣bject Oriented)是一種以事物為中心的編程思想。采用對象、類以及一些相關(guān)概念所進(jìn)行的程序設(shè)計(jì)。主要有Eiffel、C++、Java、PHP等[2]。
1 ?面向過程與面向?qū)ο蠡咎攸c(diǎn)分析
面向過程最常用的一個(gè)分析方法就是“功能分解”,即先將用戶需求分解成模塊,然后把模塊分解成大的功能,再把大的功能分解為小的功能,最終分解成不同的函數(shù),這種方式被稱為“自頂向下”,采用結(jié)構(gòu)化思想,原則是“先整體后局部”“先大后小”[3],便于程序的后期調(diào)試和維護(hù)。
面向?qū)ο蟮暮诵臑閷ο?,對象是人們要研究的各種事物,它可以是日常生活中具體的事物,還能是一些抽象的規(guī)則、計(jì)劃等。對象的抽象化為類。簡單來講,類=數(shù)據(jù)+操作。其中,數(shù)據(jù)用來描述對象的性質(zhì)和狀態(tài);操作是指對象的行為,而具有相同和相似性質(zhì)的一組對象則稱為“類”。將繁瑣的步驟進(jìn)行行為、功能,模塊化,就是面向?qū)ο?,其核心為事物整體,是把構(gòu)成問題的事物分解成各個(gè)對象,建立對象的目的不是為了完成某一個(gè)步驟,而是為了描述某個(gè)事物在整個(gè)解決問題的步驟中的行為。
在面向?qū)ο蠛兔嫦蜻^程兩種方法中,面向?qū)ο蠓椒ǖ膶ο蠛兔嫦蜻^程的數(shù)據(jù)是相互對應(yīng)的;類作為一種抽象的數(shù)據(jù)類型,與面向過程的結(jié)構(gòu)存在相似點(diǎn);而方法和函數(shù)則分別是兩種編程方法的主要組成部分。在面向?qū)ο缶幊趟枷胫校瑢ο笠灶惖男问?,用代碼寫成可描述的屬性或方法,通過相互傳遞消息來完成通信,又通過處理,形成抽象或具體的類;在面向過程的編程方法中,同理,我們以函數(shù)的形式,通過函數(shù)調(diào)用來完成,我們又能對數(shù)據(jù)做出新的處理。通過此圖(見圖1),我們可以明確地看出面向?qū)ο蠛兔嫦蜻^程的異同點(diǎn)。
2 ?程序執(zhí)行機(jī)制
為了更清晰地了解兩種方法之間的關(guān)系,我們以典型的“求長方形的周長和面積”為例,對比分析面向過程和面向?qū)ο蟪绦蛟O(shè)計(jì)方法之間的異同,從而明確分析二者的使用場景。
2.1 面向過程程序設(shè)計(jì)
我們首先要確定想做的內(nèi)容,先定義求面積和周長的函數(shù),寫出周長和面積的相關(guān)算法,最后通過調(diào)用。具體代碼為:
int Area(int a,int b)//求面積
{int s;//定義面積變量
s=a*b;//面積公式
return s;}
int Perimeter(int a,int b)//求周長
{int c;//定義周長變量
c=2*(a+b);//周長公式
returnc;}
int main()
{intl,w,s,c;//定義長方形的長,寬,面積,周長
scanf("%d%d",&l,&w);//手動輸入長和寬
printf("長方形的面積為%d,周長為%d\n",Area(l,w),Perimeter(l,w));//輸出面積和周長
return0;}
2.2 面向?qū)ο蟪绦蛟O(shè)計(jì)
既然題目所求的對象為“長方形”,因此,我們這道題就要以長方形為中心展開。
而類作為對象的抽象化,就要先分離出“長方形”這個(gè)對象的屬性,具有長和寬,因此我們就書寫相應(yīng)的方法與函數(shù),我們需要求其周長和面積。因此,我們定義了一個(gè)長方形類,最終在主函數(shù)中調(diào)用,從而求出某具體長方形的面積。詳細(xì)代碼如下。
public class Rect {//類代碼
public double length;
public double width;
public double getLength()
{return length;}
public void setLength(double l)
{ ?l = length;}
public double getWidth()
{ ? return width; ?}
public void setWidth(double w)
{ ?w = width; ?}
public Rect(double l, double w)
{ ?l = length;
w = width;}
public double SRect() ? //求面積
{ ?return length*width;}
public double CRect() ?//求周長
{return 2*(length+width);} ?}
3 ?結(jié)語
面向過程和面向?qū)ο?,程序的編寫發(fā)生了根本性的變化:C語言作為典型的“面向過程”設(shè)計(jì)語言,我們發(fā)現(xiàn)面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟實(shí)現(xiàn),使用的時(shí)候按需調(diào)用。Java是典型的“面向?qū)ο蟆痹O(shè)計(jì)語言,從上文一小段代碼可以看出,面向?qū)ο缶秃帽葓F(tuán)隊(duì)合作,需要很多人完成。
面向過程思想是我們每一個(gè)人天生具備的。在編程時(shí),我們總會不自覺地去考慮怎么來完成某一需求,分析出具體的步驟,然后按照步驟來一步步實(shí)現(xiàn)。但是在現(xiàn)實(shí)生活當(dāng)中,并不是每一件事都可以自己獨(dú)立來完成,需要合作才可以完成某一項(xiàng)復(fù)雜的工作。這樣來看的話,面向?qū)ο笏枷胨坪醺先藗兊淖鍪路绞?,也更生活化?/p>
參考文獻(xiàn)
[1] 李廣松.完全面向?qū)ο箜?xiàng)目式《C++程序設(shè)計(jì)》課程改革與創(chuàng)新[J].電腦知識與技術(shù),2014,10(12):2781-2784.
[2] 劉雍.從面向過程到面向?qū)ο笏悸忿D(zhuǎn)換[J].硅谷,2008(10):45.
[3] 卜麗娜.大型建筑用能管理監(jiān)測系統(tǒng)應(yīng)用研究[D].湖南大學(xué),2013.