国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語言的面向對象實現(xiàn)在車燈軟件中的應用

2018-02-26 07:53于杰
電子技術與軟件工程 2018年15期
關鍵詞:面向對象C語言單片機

于杰

摘要

隨著汽車LED前燈的功能越來越豐富,集成度越來越高,對于LED前燈控制器的實現(xiàn)加入軟件模塊已成為必然,但隨著軟件復雜程度的提高往往伴隨著系統(tǒng)缺陷數(shù)量的增長。與面向過程編程相比,面向對象編程的封裝、多態(tài)和繼承特性降低了軟件開發(fā)復雜度,提升了軟件的可靠性、穩(wěn)定性和擴展性。為了降低前燈軟件的復雜度,可以在資源有限的單片機中利用C語言實現(xiàn)面向對象編程,以降低開發(fā)難度,提升軟件質量

【關鍵詞】汽車 LED C語言 面向對象 單片機

1 引言

車燈作為汽車的外部關鍵部件,近些年發(fā)展十分迅速,LED車燈應用越來越廣泛,功能越來越豐富。因為成本的原因,在汽車LED前燈中往往使用價格低廉,資源有限的微控制器,在這類控制器中,一般只能使用面向過程的C語言進行編程。而與面向過程編程相比,面向對象編程具有封裝、多態(tài)和繼承特性,更加容易維護、復用和擴展。如果能使用面向對象實現(xiàn)LED前燈的軟件系統(tǒng),可以提高整個系統(tǒng)的可靠性、穩(wěn)定性、可擴展性。

本文分析了面向對象的主要特點,給出了使用C語言實現(xiàn)面向對象的方法。

2 面向對象的主要特點及C語言實現(xiàn)

2.1 封裝

類是面向對象編程里最重要的一個概念,它是對現(xiàn)實世界中具有共同屬性的一類對象的抽象。類的概念中包含兩部分內容:屬性和行為。屬性是對象擁有的性質和狀態(tài),行為是定義在對象上的一組操作。一個好的封裝設計可以降低軟件設計的復雜性,提升軟件產品質量。

C++語言通過關鍵詞class定義一個類,實現(xiàn)對一個對象屬性和方法的封裝,類的概念相當于定義了一個新的數(shù)據(jù)類型。在C語言中,雖然沒有類的概念和class關鍵字,但是可以使用相似的struct來模擬一個類,對于屬性依然使用變量來定義,對于方法可以使用函數(shù)指針來定義。

typedef struct_led

{

void(*Led0n)(struct_pwm_led*this);

void(*LedOff)(struct_pwm_led*this);

}CLed;

對于定義的函數(shù)指針必須進行初始化,指向具體的函數(shù)之后才能使用,這里提供一個宏來實現(xiàn)對內部變量和函數(shù)指針進行初始化,其中Led_SetDuty、Led_On均是定義完整的函數(shù)

#define LED GENERATE{\

Led_On,\

Led_Off\

}

CLed led=LED_GENERATE;

led.LedOn(&led);//由于C語言編譯器中不會為函數(shù)提供this指針,因此這里手工添加

2.2 繼承

汽車LED前燈中,不同型號的產品間有許多相同或相似的功能,即使是同一產品也會因為降成本或優(yōu)化,在不改變功能的情況下更改硬件設計,因此在汽車LED前燈的軟件產品中,軟件的復用性就顯得更加重要。在面向對象編程中,繼承是復用己存在代碼元素的一項重要特性。

在面向對象編程中,繼承是復用己存在代碼元素的一項重要特性,通過定義一個繼承自基類的派生類,在不編寫一行代碼的情況下,即可擁有基類的全部特性,在派生類中編寫代碼即可實現(xiàn)對己有功能進行擴展。在C語言的結構體中并沒有提供繼承的方法,這里我們使用包含的關系來模擬面向對象中的繼承,在模擬的派生類中包含基類的對象,并將其作為模擬派生類的第一個元素(為了方便使用基類指針訪問派生類對象),即可擁有與繼承相同的特性:

//CLed為己定義的結構體

typedef struct_pwm_led

{

CLed base;

uint32_t pwm_duty;

void(*SetDuty)(struct_pwm_led*this,uint32_t duty):

}CPwmLed;

#define PWMLED GENERATE{\

LED_GENERATE,\

0,\

LED SetDuty\

}

2.3 多態(tài)

汽車LED前燈往往需要在不同的外界條件或點亮時機有不同的點亮行為,使用面向過程的方法,則需要針對每一種點亮模式定義不同的接口函數(shù),在應用中在根據(jù)當前條件進行調用,當點亮模式改變或增加新的模式時,我們就需要對接口函數(shù)和調用進行刪減更改,這無形中降低了軟件的可擴展性,在每次修改中更容易引入新的bug。

在面向對象的設計中,多態(tài)是指一組相關的類對象具有相同的函數(shù)原型,但具有不同的函數(shù)行為。C++語言中使用虛函數(shù)實現(xiàn)多態(tài)的功能,但C語言中雖然沒有虛函數(shù)這樣的特性,但可以利用函數(shù)指針實現(xiàn)多態(tài)的功能。首先通過定義函數(shù)指針抽象出統(tǒng)一的函數(shù)接口,在將函數(shù)指針指向不同的函數(shù)實現(xiàn),這樣當調用函數(shù)指針時就會表現(xiàn)出不同的行為:

//CLed為己定義的結構體

typedefstruct_bin_led

{

CLed led;

}CB1nLed;

//通過宏對基類中的函數(shù)指針進行重新定義

#define BLNLED_GENERATE{\

{B1nLed_On}\

}

CB1nLed bln_led=BLNLED_GENERATE;

CLed*pLed=(CLed*)(&bln_led);

pLed->LedOn(pLed);

3 結論

通過使用C語言模擬出面向對象語言的特點,使得軟件系統(tǒng)的模塊化設計更加容易的實現(xiàn)。高內聚低耦合的模塊設計提高軟件系統(tǒng)代碼的重復利用率,方便了軟件系統(tǒng)的維護和修改,便于調試排錯,易于擴展,進一步降低了軟件復雜度,提高了系統(tǒng)的健壯性、靈活性、可靠性。在獲得面向對象編程的優(yōu)點的同時,依然保留著C語言高效的特點,適合在資源有限的單片機中應用。

參考文獻

[1]譚浩強.C語言程序設計[M].北京:電子工業(yè)出版社,2005.

[2]錢能.C++程序設計教程[M].北京:清華大學出版社,1999.

[3]章遠陽,楊芙清,邵維中.C++語言的面向對象特性分析[J].計算機工程與應用,1992(09).

[4]劉宇,王煒,張見威.C++語言面向對象機制的底層實現(xiàn)[J].華南師范大學學報,1998(04).

[5]陳飛,陳啟安.面向對象的嵌入式系統(tǒng)開發(fā)技術[J].單片機與嵌入式系統(tǒng)應用,2005.

猜你喜歡
面向對象C語言單片機
基于Visual Studio Code的C語言程序設計實踐教學探索
基于單片機的SPWM控制逆變器的設計與實現(xiàn)
基于單片機的層次漸變暖燈的研究
基于單片機的便捷式LCF測量儀
面向對象的計算機網絡設計軟件系統(tǒng)的開發(fā)
基于C語言的計算機軟件編程
面向對象的數(shù)據(jù)交換協(xié)議研究與應用
高職高專院校C語言程序設計教學改革探索
面向對象Web開發(fā)編程語言的的評估方法
論子函數(shù)在C語言數(shù)據(jù)格式輸出中的應用