0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言的面向接口編程

FPGA之家 ? 來(lái)源:FPGA之家 ? 作者:FPGA之家 ? 2022-06-22 09:37 ? 次閱讀

面向接口是啥?

不用慌,其實(shí)面向接口編程不是什么新鮮玩意,說(shuō)得直白點(diǎn)就是函數(shù)指針的使用,不過(guò)我覺得可以形成一種編程的思想來(lái)指導(dǎo)嵌入式程序設(shè)計(jì),特別是對(duì)于降低代碼的耦合還是比較奏效的。

面向接口編程比面向?qū)ο笠??為什么不直接玩面向?qū)ο缶幊棠兀?/span>

其實(shí)bug菌這么多年開發(fā)過(guò)來(lái),真正把C完完全全用面向?qū)ο蟮姆绞竭M(jìn)行編寫是非常少的,像C++中的繼承、多態(tài)、虛函數(shù)等等面向?qū)ο筇匦?/span>,如果均用C語(yǔ)言來(lái)維護(hù)和實(shí)現(xiàn)是非常復(fù)雜的,并且你還不能保證沒有bug。

再說(shuō)了你寫了一堆代碼讓C的特性更加的像C++,那為什么不直接使用C++呢?難道你覺得那些特性你能用C寫得比C++更好?別重復(fù)造輪子了。

不過(guò),話說(shuō)回來(lái),能夠在C語(yǔ)言中借鑒一些面向?qū)ο蟮恼Z(yǔ)言特性和思想,確實(shí)能夠讓C代碼更加的優(yōu)雅和靈活,所以今天聊聊面向接口編程,它僅僅只是面向?qū)ο蟮囊徊糠?,不過(guò)在一般的嵌入式開發(fā)中使用性價(jià)比還是比較高的。

面向接口編程

話不多說(shuō),先上一個(gè)面向接口編程的Demo:

參考demo:
  1#include
  2#include
  3
  4/********************************************
  5*Note:共用接口的定義
  6*author:bug菌
  7*******************************************/
  8structInterface{
  9int(*Initial)(void*handle);
 10int(*Send)(void*handle,char*buff,intcount);
 11int(*Recv)(void*handle,char*buff);
 12int(*Destory)(void*handle);
 13};
 14
 15/********************************************
 16*Note:具體類型的定義
 17*author:bug菌
 18*******************************************/
 19typedefstruct_tag_protocolType1{
 20structInterfacebi;//公共通信接口
 21char*CommTypeName;//通信名稱
 22//不同通信類型的其他成員......
 23}protocolType1;
 24
 25
 26/********************************************
 27*Note:其中一種報(bào)文協(xié)議的簡(jiǎn)單接口實(shí)現(xiàn)
 28*author:bug菌
 29*******************************************/
 30voidprotocol_Initial(void*handle)
 31{
 32protocolType1*p=(protocolType1*)handle;
 33p->CommTypeName="protocolType1";//可以通過(guò)公共接口傳參訪問(wèn)原對(duì)象的所有成員
 34
 35printf("%sInitial
",p->CommTypeName);
 36}
 37
 38voidprotocol_Send(void*handle,char*buff,intcount)
 39{
 40protocolType1*p=(protocolType1*)handle;
 41
 42printf("%sSend
",p->CommTypeName);
 43}
 44
 45voidprotocol_Recv(void*handle,char*buff)
 46{
 47protocolType1*p=(protocolType1*)handle;
 48
 49printf("%sRecv
",p->CommTypeName);
 50}
 51
 52voidprotocol_Destory(void*handle)
 53{
 54protocolType1*p=(protocolType1*)handle;
 55
 56printf("%sDestory
",p->CommTypeName);
 57}
 58
 59/********************************************
 60*Note:根據(jù)不同的類型,進(jìn)行接口的初始化
 61*author:bug菌
 62*******************************************/
 63voidInitial(structInterface*pInterface,inttype)
 64{
 65pInterface->Initial=protocol_Initial;
 66
 67pInterface->Send=protocol_Send;
 68
 69pInterface->Recv=protocol_Recv;
 70
 71pInterface->Destory=protocol_Destory;
 72
 73}
 74
 75/********************************************
 76*Note:主題框架基本上不需要修改,這里只是簡(jiǎn)單示例,你可以更復(fù)雜
 77*author:bug菌
 78*******************************************/
 79voidProcess(structInterface*pInterface)
 80{
 81pInterface->Initial(pInterface);
 82
 83pInterface->Send(pInterface,NULL,0);
 84
 85pInterface->Recv(pInterface,NULL);
 86
 87pInterface->Destory(pInterface);
 88
 89}
 90
 91
 92/********************************************
 93*Note:應(yīng)用程序
 94*author:bug菌
 95*******************************************/
 96intmain(intargc,char*argv[]){
 97
 98protocolType1protocol;
 99
100Initial((structInterface*)&protocol,1);
101
102Process((structInterface*)&protocol);
103
104return0;
105}
運(yùn)行結(jié)果:

2c69be42-f1ca-11ec-ba43-dac502259ad0.png

分析一下:
對(duì)于一名合格的程序員,代碼show出來(lái),本文就沒有寫下去的必要了,不過(guò)為了全文的整體性,還是啰嗦幾句。其實(shí)面向接口編程所采用就是面向?qū)ο缶幊讨械睦^承,只不過(guò)它把所有的公共接口全部抽象出來(lái)供框架程序進(jìn)行調(diào)用。這樣當(dāng)我們需要增加其他類型的對(duì)象處理時(shí),可以通過(guò)構(gòu)造并替換不同的接口函數(shù)來(lái)進(jìn)行處理,從而使得整體程序改動(dòng)最小。凡是一種復(fù)用的架構(gòu)都會(huì)犧牲一定的性能,不過(guò)也會(huì)增加程序的可維護(hù)性,降低程序的耦合度,如果你開發(fā)的項(xiàng)目并不是很復(fù)雜, 也確定了以后接口不會(huì)有新的變化,其實(shí)不使用接口也是OK的。對(duì)于自動(dòng)測(cè)試程序框架,接口的預(yù)留是非常重要的,可以通過(guò)虛擬接口來(lái)測(cè)試業(yè)務(wù)邏輯,能夠模擬更多實(shí)際環(huán)境下不同的工況來(lái)進(jìn)行測(cè)試。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134138
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3521

    瀏覽量

    93275

原文標(biāo)題:C語(yǔ)言實(shí)現(xiàn)面向接口編程

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PLC編程語(yǔ)言C語(yǔ)言的區(qū)別

    在工業(yè)自動(dòng)化和計(jì)算機(jī)編程領(lǐng)域中,PLC(可編程邏輯控制器)編程語(yǔ)言C語(yǔ)言各自扮演著重要的角色。
    的頭像 發(fā)表于 06-14 17:11 ?1593次閱讀

    verilog與其他編程語(yǔ)言接口機(jī)制

    Verilog是一種硬件描述語(yǔ)言,用于描述數(shù)字電路的行為和結(jié)構(gòu)。與其他編程語(yǔ)言相比,Verilog具有與硬件緊密結(jié)合的特點(diǎn),因此其接口機(jī)制也有一些與眾不同之處。本文將詳細(xì)介紹Veril
    的頭像 發(fā)表于 02-23 10:22 ?471次閱讀

    plc編程語(yǔ)言c語(yǔ)言的聯(lián)系 c語(yǔ)言和PLC有什么區(qū)別

    PLC編程語(yǔ)言C語(yǔ)言的聯(lián)系 PLC(可編程邏輯控制器)是一種針對(duì)自動(dòng)化控制系統(tǒng)的特殊計(jì)算機(jī)。PLC編程
    的頭像 發(fā)表于 02-05 14:21 ?3159次閱讀

    c語(yǔ)言,c++,java,python區(qū)別

    C語(yǔ)言、C++、Java和Python是四種常見的編程語(yǔ)言,各有優(yōu)點(diǎn)和特點(diǎn)。 C
    的頭像 發(fā)表于 02-05 14:11 ?1382次閱讀

    vb語(yǔ)言c++語(yǔ)言的區(qū)別

    Microsoft開發(fā)的一種面向對(duì)象的事件驅(qū)動(dòng)編程語(yǔ)言。它的設(shè)計(jì)目標(biāo)是簡(jiǎn)化編程過(guò)程,讓初學(xué)者也能快速上手。與之相比,C++
    的頭像 發(fā)表于 02-01 10:20 ?1535次閱讀

    C語(yǔ)言運(yùn)行環(huán)境是什么

    C語(yǔ)言運(yùn)行環(huán)境(C language runtime environment)是指在執(zhí)行C語(yǔ)言程序時(shí)所需的軟件及硬件環(huán)境。
    的頭像 發(fā)表于 11-27 16:13 ?2863次閱讀

    Python編程語(yǔ)言屬于什么語(yǔ)言

    Python編程語(yǔ)言屬于高級(jí)編程語(yǔ)言中的一種。它是一種通用、面向對(duì)象、解釋型編程
    的頭像 發(fā)表于 11-22 14:31 ?1147次閱讀

    什么是C語(yǔ)言?單片機(jī)有什么特點(diǎn)?為什么要用C語(yǔ)言編程?

    隨著技術(shù)的發(fā)展,電子產(chǎn)品越來(lái)越多,方便了我們的日常生活,大多數(shù)電子產(chǎn)品上都有單片機(jī),而單片機(jī)是通過(guò)執(zhí)行軟件邏輯來(lái)實(shí)現(xiàn)功能的。而單片機(jī)編程最合適的編程語(yǔ)言是匯編語(yǔ)言,但是最常用、最普及的
    的頭像 發(fā)表于 11-21 10:06 ?1326次閱讀
    什么是<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>?單片機(jī)有什么特點(diǎn)?為什么要用<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編程</b>?

    C語(yǔ)言編程必備知識(shí)合集

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言編程必備知識(shí)合集.zip》資料免費(fèi)下載
    發(fā)表于 11-21 09:34 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編程</b>必備知識(shí)合集

    C語(yǔ)言經(jīng)典編程900例

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言經(jīng)典編程900例.rar》資料免費(fèi)下載
    發(fā)表于 11-20 11:40 ?6次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>經(jīng)典<b class='flag-5'>編程</b>900例

    C語(yǔ)言編程入門教程

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言編程入門教程.rar》資料免費(fèi)下載
    發(fā)表于 11-20 10:23 ?8次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編程</b>入門教程

    C語(yǔ)言的基本概念和編程技術(shù)

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言的基本概念和編程技術(shù).pdf》資料免費(fèi)下載
    發(fā)表于 11-20 10:18 ?0次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>的基本概念和<b class='flag-5'>編程</b>技術(shù)

    C語(yǔ)言進(jìn)階之嵌入式系統(tǒng)高級(jí)C語(yǔ)言編程

    電子發(fā)燒友網(wǎng)站提供《C語(yǔ)言進(jìn)階之嵌入式系統(tǒng)高級(jí)C語(yǔ)言編程.rar》資料免費(fèi)下載
    發(fā)表于 11-18 10:32 ?1次下載
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>進(jìn)階之嵌入式系統(tǒng)高級(jí)<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>編程</b>

    淺談C語(yǔ)言面向對(duì)象編程思想

    C語(yǔ)言是一種面向過(guò)程的語(yǔ)言,但是也可以用結(jié)構(gòu)體和函數(shù)指針來(lái)模擬面向對(duì)象的特性,比如封裝、繼承和多態(tài)。
    發(fā)表于 11-02 12:27 ?795次閱讀

    C語(yǔ)言是否支持泛型編程?

    C語(yǔ)言是否支持泛型編程?毫無(wú)疑問(wèn),答案是不支持。
    的頭像 發(fā)表于 10-16 10:02 ?541次閱讀