999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于模塊的類實現(xiàn)

2008-12-31 00:00:00徐寶磊何先波
電腦知識與技術 2008年34期

摘要:在面向對象編程中類是對象的集合體,實現(xiàn)封裝的關鍵。針對面向對象語言和C語言的優(yōu)缺點,通過對C語言支持模塊編程特性的討論,提出一種用C語言文件來實現(xiàn)面向對象中類的特性的方法,使面向對象技術應用在資源緊張的環(huán)境中。通過實例表明程序具有較高的執(zhí)行效率,并且保持良好的可維護性。

關鍵詞:面向對象;類;模塊;結構體;C

中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2008)34-1670-03

Implementation of Class Based on Module

XU Bao-lei, HE Xian-bo

(Computer College, China West Normal University, Nanchong 637002, China)

Abstract: In the Object-Oriented, the class is the aggregation of objects, the key of implementing the encapsulation. According an advantage of Object-Oriented technique and C language, through discuss the support of the C language to module programme, put forward a kind of method of characteristic which implementation the class in the Object-Oriented with the C language. Make the problem has heigher executive efficiency, and keeps the high maintainability. Giving some codes to explain how it implementation.

Key words: Object-Oriented; class; module; struct; C

1 引言

對于復雜的嵌入式軟件項目,C++所體現(xiàn)的面向對象的分析和設計方法和消息模型驅動的軟件開發(fā)過程能夠顯著提高開發(fā)效率以及項目的可管理性和可維護性;但是C++語言本身對系統(tǒng)資源的要求高,使得在許多情況下不能直接用來開發(fā)嵌入式系統(tǒng)軟件。而C++是從C語言發(fā)展而來,是C的擴展集,因此使用C語言進行程序設計實現(xiàn)C++面向對象的思想不失為一個很好的選擇。

2 對象式與過程式比較

對象式程序設計是一種以數(shù)據(jù)為中心,基于數(shù)據(jù)抽象的程序設計范型[1]。一個面向對象程序由一些對象構成,對象是由一些數(shù)據(jù)及可施于這些數(shù)據(jù)的操作所構成的封裝體。對象的特證由相應的類來描述,一個類可以從其他類繼承。面向對象的執(zhí)行過程體現(xiàn)為各個對象之間相互發(fā)送和處理消息。面向對象程序設計可描述為:程序=對象/類+…對象/類=數(shù)據(jù)+操作。面向對象程序設計有著眾多優(yōu)點:采用數(shù)據(jù)抽象,以數(shù)據(jù)為中心把數(shù)據(jù)及能對其實施的操作作為一個整體(對象)來描述,加強了對數(shù)據(jù)的保護;可靠性高,所開發(fā)的程序更健壯,有較高的安全性檢查;可重用性高,在應用程序中采用類庫,縮短了開發(fā)時間;繼承和數(shù)據(jù)封裝使得應用程序的修改帶來的影響更加局部化,應用程序更易于維護。而其固有的缺點就是CPU時間的開銷,在實際應用中,C++的實現(xiàn)可能比用FORTRAN寫的相同的應用程序慢25%以上[2]。

過程式程序設計是以功能為中心,基于功能分解的程序設計范型[1]。過程式程序的執(zhí)行過程體現(xiàn)為一系列的子程序調用。過程式程序設計可描述為:程序=算法+數(shù)據(jù)結構,算法是數(shù)據(jù)加工步驟的描述,而數(shù)據(jù)結構是對要加工的數(shù)據(jù)的描述。C語言是一種面向過程的結構化編程語言,既有高級語言易于開發(fā)的特點又具有低級語言效率高的優(yōu)點:C語言程序效率比較高,包括執(zhí)行速度快和占用空間少;又具有低級語言才具有的一些描述能力,如數(shù)據(jù)位操作和內存地址操作,容易與匯編語言結合直接操作硬件;因此廣泛使用于操作系統(tǒng)等系統(tǒng)軟件的實現(xiàn)。但是C語言與面向對象語言C++相比在開發(fā)階段有許多缺點:過程式語言采用的是過程抽象,它對數(shù)據(jù)和操作的描述是分離的,數(shù)據(jù)處于附屬地位,獨立于操作,在程序調用中作為參數(shù)傳遞給子程序,不利于程序的設計、理解何維護;采用過程式封裝,即僅對數(shù)據(jù)操作的封裝,缺乏對數(shù)據(jù)的保護;編程結構不優(yōu)越,子程序功能的變化會導致程序結構的變化,從而是程序難以復用。

3 模塊設計方法

面向對象的程序設計方法起源于信息隱藏和抽象數(shù)據(jù)類型概念,其設計靈魂就是使用類中的private成員變量隱藏類實現(xiàn),使用public成員變量暴露類接口,類實現(xiàn)了面向對象中封裝的特性,這使得類的設計成為實現(xiàn)面向對象方法的關鍵。

在C++中,類的定義包括聲明和實現(xiàn)兩個部分[3]。聲明部分包括class語句,它確定了類的屬性和行為。當在程序中使用類創(chuàng)建對象時,僅僅是類的公共成員對程序可見,同時隱藏私有成員,程序必須通過公共成員函數(shù)間接的訪問私有成員。

在軟件開發(fā)中,通常是利用C語言的結構體(struct)來模擬類實現(xiàn)封裝[4],在C語言的結構中定義一些函數(shù)指針成員,在結構體初始化時,使他們各自指向所代表的函數(shù),將數(shù)據(jù)與處理函數(shù)綁定在一起。但結構體和C++中的類并非嚴格意義上的同義詞,其區(qū)別在于,結構體的成員默認是公有的,而類的成員默認的是私有的[5]。而且結構體只能封裝數(shù)據(jù)(成員變量),操作(成員函數(shù))常常是定義成全局變量,但是無限制的全局變量通常會有害于程序的可讀性和可維護性。對此我們可以利用C語言支持模塊式的編程風格把單個面向對象的C++程序轉變?yōu)槎鄠€C語言文件來實現(xiàn)封裝。C語言提供typedef保留字用于定義新的數(shù)據(jù)類型,同樣可以用它來模仿類的概念,以結構類型實現(xiàn)數(shù)據(jù)和方法的封裝[6]。通常,模塊一經(jīng)別的程序單元引用,當中的數(shù)據(jù)和例程就可訪問了。從這個意義上說,模塊類似于C++中的類,是用來模擬面向對象程序設計主要特性的基礎框架[7]。

對程序的邏輯單元進行分組體現(xiàn)了程序設計中模塊的概念,一個模塊通常由一組功能相關(共同實現(xiàn)一個邏輯功能)的程序實體的定義組成,按照“高內聚、低耦合”原則劃分模塊。在C語言中一個模塊可以分為“實現(xiàn)”和“接口”兩部分[8],“接口”部分主要指.h頭文件,用于定義本模塊使用的數(shù)據(jù)結構或函數(shù)以及任何使用該模塊的程序之間的接口;“實現(xiàn)”部分主要指C程序的源文件,包含了所有函數(shù)的代碼,用于具體實現(xiàn)。

在C語言中關鍵字extern和static可以限定函數(shù)或變量的作用范圍,具體如表1所示。

static可以實現(xiàn)一定的信息隱藏,達到封裝的目的。用extern關鍵字可以引用外部變量,實現(xiàn)對外部數(shù)據(jù)的引用。基于這種特性我們在C語言中創(chuàng)建“基于模塊”的類來實現(xiàn)面向對象中類的特性,把一個大的面向對象的程序轉換成多個清晰定義的“類”文件和“實現(xiàn)”文件,如圖1所示。

模塊的頭文件等價于類的接口,包含導出到其它模塊的數(shù)據(jù)和子程序,并且加強類型安全檢查。

參考以下的原則進行設計頭文件和實現(xiàn)文件:

.h頭文件中不能有數(shù)據(jù)的定義和可執(zhí)行代碼,只能有宏、類型(typedef, struct, union, menu),數(shù)據(jù)和函數(shù)的聲明。使用C語言的關鍵字static來確保只有本模塊中的函數(shù)才能訪問這個數(shù)據(jù),此模塊變成了我們的“類”,且模塊中static類型的數(shù)據(jù)成為類的私有數(shù)據(jù)成員,該模塊中的函數(shù)就成為模塊類的成員函數(shù)(公用)。“公有”成員函數(shù)在.h文件中定義它們的原型[9]。

“私有”成員函數(shù)(該函數(shù)只能被在某個特殊模塊內定義的函數(shù)調用),只需通過在.c實現(xiàn)文件中包含某個類的函數(shù)原型即可。“私有”成員函數(shù)用關鍵字static在.c實現(xiàn)文件中有它的原型。

#include預處理指令來手工導入類的頭文件,使得文件中的函數(shù)可以訪問封裝在另一個文件中該數(shù)據(jù)對象,是繼承和重入的一種弱形式。#include指令由于具有傳遞的特性使得程序容易形成循環(huán)依賴,所以要使用#ifndef語句來判斷。

4 簡單實例代碼

以下面的模塊為例,介紹“基于模塊的類”的設計。模塊定義了一個date(時間)類,包括屬性以及對屬性的操作,在這里我們只關注代碼的結構。

.h頭文件,包括數(shù)據(jù)抽象類型date以及對其操作的定義。

/* date.h */

static int month;

static int day;

static int year;

/*下面是date的“成員”函數(shù)*/

void setdate(int,int,int,int,int,int);

int getdate(int,int,int);

.c實現(xiàn)文件,定義了函數(shù)的具體實現(xiàn);

/* plant.c */

#include<stdio.h>

#include \"date.h\"

extern void setdate(int m,int d,int y,int month,int day,int year)

{month=m;

day=d;

year=y;

}

extern int getdate(int month,int day,int year)

{return year;}

main.c函數(shù),主要是調用類模塊,并且測試時間時使用,模塊的調用者,

#include<stdio.h>

/*<time.h>、<math.h>庫是用來測試程序運行時間的;*/

#include <time.h>

#include <math.h>

#include\"date.h\" //定義的類;

int main()

{int i=0; // 循環(huán)測試次數(shù)i;

int m=5;

int d=8;

int y=2008;

//定義兩個long類型的變量,放置時間;

long start,end;

start = clock();// 開始時間;

for(i=0;i<10000;i++)

{void assigndate(m,d,y,month,day,year);

int result=getdate(month,day,year);

printf(\"Employee hire data %d\\",result);

}

end = clock();// 結束時間;

printf(\"%ld\\",end-start);//單位:毫秒

return 0;

}

模塊對應的c++實現(xiàn)文件為:

//類定義,定義一個date類,

class Date

{public:

Date();

void setDate(int,int,int);

int getDate();

private:

int month;

int day;

int year;

};

Date::Date()

{month=\"\";

day=\"\";

year=\"\";

}

void Date::setDate(int m,int d,int y)

{month=m;

day=d;

year=y;

}

int Date::getDate()

{return year; }

/* data.cpp */

#include<iostream>

#include<cstdio>

#include<iostream>

using namespace std;

#include \"date.h\"

#include <time.h>

#include <math.h>

int main()

{long start,end;

start = clock();

int i=0; // 循環(huán)測試次數(shù)i;

for(i=0;i<10000;i++)

{

Date dateobj;

int hiremonth=\"May\";

int hireday=\"Eight\";

int hireyear=\"2008\";

dateobj.setDate(hiremonth,hireday,hireyear);

cout<<\"Enployee hire data\"<<endl;

cout<<dateobj.getDate()<<endl;

}

end = clock();

printf(\"%ld\\",end-start);//單位:毫秒

return 0;

}

圖2是對上面程序的測試比較,其中i是循環(huán)的次數(shù),測試時間的單位是毫秒。

5 結束語

面向對象的思想已經(jīng)在C語言中得到了廣泛的利用,例如MiniGUI圖形支持系統(tǒng)99%以上的代碼是C代碼,為了保證具有良好的靈活性和可擴展性,MiniGUI的開發(fā)中使用了許多面向對象的技術。用模塊實現(xiàn)類的方法更適合于系統(tǒng)資源緊張且與硬件緊密相關的嵌入式系統(tǒng)底層軟件開發(fā)中,利用了過程式語言和面向對象語言的各自優(yōu)點,保證了程序的高效性簡潔性和可維護性,析取硬件相關性與系統(tǒng)特定代碼并把它們封裝到簡單的低層次模塊中,并創(chuàng)建訪問接口。而且使用模塊化和面向對象的設計方法比用常規(guī)的程序設計方法能夠使軟件開發(fā)的生產(chǎn)率提高10~100倍[10]。

參考文獻

[1] 陳家俊,鄭滔.C++語言及面向對象程序設計[M].北京:機械工業(yè)出版社,2005:10-12

[2] Stroustrup B.The Design of C++[M].Stanford CA,University Video Communications,1999.

[3] Diane Z.C++編程導論[M].2版.馬良荔,趙羽中,程遠國,譯.北京:電子工業(yè)出版社,2005:322-324.

[4] 覃章健,葛良全.C++語言教學中類的本質深入剖析[J].現(xiàn)代計算機,2008(275).

[5] Joyener L.對象揭密:Java、Eiffel和C++[M].鮑志云,譯.北京:人民郵電出版社,2003:60-78

[6] 錢亞冠.Linux內核中面向對象思想的研究與應用[J].浙江科技學院學報,2006,18(2).

[7] 畢蘇萍,周振紅.Fortran與C/C++共享模塊中的數(shù)據(jù)和例程[J].鄭州大學學報:工學版,2008,29(1):99.

[8] Oualline S.實用C語言編程[M].3版.郭大海,譯.北京:中國電力出版社,2000:350-363.

[9] Pont M J.C語言嵌入式系統(tǒng)開發(fā)[M].陳繼輝,譯.北京:中國電力出版社,2003:81-89.

[10] Deitel H M,Deitel P J.C++程序設計教程[M].薛萬鵬,譯.北京:機械工業(yè)出版社,2000:26-193.

主站蜘蛛池模板: 九九久久精品国产av片囯产区| 亚洲浓毛av| 91丝袜在线观看| 色婷婷在线影院| h网址在线观看| 中文字幕啪啪| 日本不卡在线播放| 精品精品国产高清A毛片| 试看120秒男女啪啪免费| 又黄又湿又爽的视频| 亚洲欧洲日产无码AV| 国模视频一区二区| 久久久久中文字幕精品视频| www.91在线播放| 欧美色综合网站| 国产小视频a在线观看| 亚洲欧美国产高清va在线播放| 九九九精品视频| 国产精品一区在线观看你懂的| 免费在线看黄网址| 亚洲精品男人天堂| 中文纯内无码H| 国产精品欧美激情| 国产一区二区影院| 国产精品成人不卡在线观看 | 亚洲色中色| 色网站在线免费观看| 久久五月天综合| 狂欢视频在线观看不卡| 亚洲精品中文字幕午夜| 青青青伊人色综合久久| 国产手机在线小视频免费观看| 视频一本大道香蕉久在线播放| 青青热久免费精品视频6| 四虎国产成人免费观看| 国产欧美视频在线| 免费无码AV片在线观看中文| 亚洲,国产,日韩,综合一区| 大香伊人久久| 欧美日本在线播放| 538精品在线观看| 996免费视频国产在线播放| 91破解版在线亚洲| 国产精品黄色片| 欧美在线视频a| 国产精品国产三级国产专业不| 亚洲中文精品久久久久久不卡| 大陆精大陆国产国语精品1024| 久久熟女AV| 久久人人妻人人爽人人卡片av| 一本大道香蕉久中文在线播放| 性视频久久| 亚洲无码免费黄色网址| 黄色网在线免费观看| 免费毛片视频| 亚洲成人动漫在线观看| 无码中文字幕加勒比高清| 国产精品私拍在线爆乳| 老司机精品一区在线视频| 亚洲啪啪网| 国产办公室秘书无码精品| 国产黑丝视频在线观看| 国产噜噜噜| 中国美女**毛片录像在线| 亚洲无码日韩一区| 亚洲人免费视频| 毛片手机在线看| 激情爆乳一区二区| 在线国产欧美| 久久狠狠色噜噜狠狠狠狠97视色| 免费一级毛片在线观看| 精品国产香蕉在线播出| 日韩资源站| 高清精品美女在线播放| 国产成人无码Av在线播放无广告| 国产女人18毛片水真多1| 毛片网站观看| 人妻中文字幕无码久久一区| 久久人人97超碰人人澡爱香蕉 | 美女被操黄色视频网站| 五月婷婷丁香色| 国产国产人成免费视频77777|