一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

如何更好實(shí)現(xiàn)和使用易重用抽象接口

AGk5_ZLG_zhiyua ? 來(lái)源:未知 ? 作者:劉勇 ? 2017-11-20 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

>>>1.5.4實(shí)現(xiàn)接口

為了描述事物的完整性和相對(duì)封閉性,“封裝”就提上了日程,細(xì)節(jié)從此不需要再去關(guān)注。而封裝的傳統(tǒng)定義是數(shù)據(jù)隱藏,如果還是這樣看待封裝,則具有很大的局限性。應(yīng)該將封裝視為任何形式的隱藏,即發(fā)現(xiàn)變化將其封裝。封裝不僅可以隱藏?cái)?shù)據(jù),而且可以隱藏實(shí)現(xiàn)和隱藏設(shè)計(jì)等所有的細(xì)節(jié)。

如果以更寬泛的方式看待封裝,其優(yōu)點(diǎn)是能夠帶來(lái)一種更好的分解程序的方法,于是封裝層自然而然地就成為了設(shè)計(jì)需要遵循的接口。封裝不會(huì)妨礙人們認(rèn)識(shí)程序內(nèi)部具體是如何實(shí)現(xiàn)的,只是為了防止用戶寫(xiě)出依賴內(nèi)部實(shí)現(xiàn)的代碼。進(jìn)而強(qiáng)迫用戶在調(diào)用程序時(shí),僅僅依賴于接口而不是內(nèi)部實(shí)現(xiàn),使抽象的概念接口和實(shí)現(xiàn)分離,將大大降低軟件維護(hù)成本。

C語(yǔ)言中的*.c文件就是接口功能的具體實(shí)現(xiàn),即用戶不可見(jiàn)的內(nèi)部實(shí)現(xiàn),簡(jiǎn)稱(chēng)實(shí)現(xiàn)。一個(gè)接口可以有多個(gè)實(shí)現(xiàn),它在發(fā)布后還可以改變、升級(jí),因?yàn)樗母淖儾粫?huì)對(duì)調(diào)用程序產(chǎn)生影響。大多數(shù)時(shí)候,*.c和*.h是成對(duì)出現(xiàn)的,一般來(lái)說(shuō),將某個(gè)子模塊的聲明放在*.h文件中,而將具體的實(shí)現(xiàn)放在對(duì)應(yīng)的*.c文件中。*.c文件可以通過(guò)引用一個(gè)或多個(gè)*.h文件,達(dá)到共用各種聲明的目的,但是*.h文件不可以引用*.c文件。

其實(shí)軟件包就是一個(gè)用來(lái)描述定義一個(gè)庫(kù)的軟件,其中*.h文件作為庫(kù)的接口,而實(shí)現(xiàn)這個(gè)庫(kù)可能有一個(gè)或多個(gè)*.c文件,每個(gè)*.c文件包含1個(gè)或多個(gè)函數(shù)定義,軟件包就是由*.h文件和*.c文件所組成的。這是一種良好的風(fēng)格,適用于任何大型程序和小型程序。

假設(shè)開(kāi)發(fā)一個(gè)由多個(gè)文件組成的大型程序pgm,這樣就需要在每個(gè)*.c文件的頂部都放上這樣一行:

#include "pgm.h" //用戶自己編寫(xiě)的庫(kù)文件

由此可見(jiàn),通過(guò)共性分析使設(shè)計(jì)具有比較強(qiáng)的內(nèi)聚,其價(jià)值就是實(shí)現(xiàn)緊湊的設(shè)計(jì)。從而使調(diào)用者無(wú)需關(guān)注實(shí)現(xiàn)的細(xì)節(jié),實(shí)際上是函數(shù)的實(shí)現(xiàn)與使用它們的函數(shù)解耦了,swap()接口的實(shí)現(xiàn)程序清單 1.17。

程序清單1.17swap數(shù)據(jù)交換接口的實(shí)現(xiàn)(swap.c)

1 #include "swap.h"

2 void swap(int *p1, int *p2)

3 {

4 int temp;

5

6 temp = *p1; *p1 = *p2; *p2 = temp;

7 }

當(dāng)p1和p2分別指向變量a和b時(shí),則p1和p2存儲(chǔ)的值就是&a和&b,即可用*p1和*p2表示a和b的值。如果寫(xiě)成以下這種形式:

temp = p1;

則交換的不是a的值,而是a的地址(p1的值就是a的地址)。而函數(shù)要交換的是a和b的值,不是它們的地址。因此需要使用*運(yùn)算符和指針,該函數(shù)才能訪問(wèn)存儲(chǔ)在這些位置的值并改變它們。即指針允許將局部變量的地址傳給函數(shù),然后在函數(shù)中修改局部變量。

由此可見(jiàn),當(dāng)將問(wèn)題的“共性和可變性”分離開(kāi)來(lái),經(jīng)過(guò)簡(jiǎn)化后發(fā)現(xiàn),穩(wěn)定不變的相同的處理部分(temp = *p1; *p1 = *p2; *p2 = temp;)都包含在抽象的模塊中,可變性分析所發(fā)現(xiàn)的變化的變量a和b由外部傳遞進(jìn)來(lái)的參數(shù)應(yīng)對(duì)。從軟件設(shè)計(jì)學(xué)角度來(lái)看,共性和可變性分析原理自然而然地成為了面向過(guò)程編程的理論基石。

注意,編寫(xiě)代碼必須遵循結(jié)構(gòu)化編程規(guī)則,即每個(gè)函數(shù)、函數(shù)中的每個(gè)代碼塊都應(yīng)該只有一個(gè)入口、一個(gè)出口。實(shí)際上,只有在大函數(shù)中,這些規(guī)則才會(huì)有明顯的好處。剛開(kāi)始寫(xiě)代碼時(shí),都會(huì)冗長(zhǎng)而復(fù)雜。有太多的縮進(jìn)和嵌套循環(huán),有過(guò)長(zhǎng)的參數(shù)列表,甚至還會(huì)有重復(fù)的代碼。需要不斷打磨這些代碼,分解函數(shù)、修改名稱(chēng)、消除重復(fù),并保證測(cè)試通過(guò)。

有時(shí)我們并不關(guān)心指針?biāo)赶虻淖兞康念?lèi)型,此時(shí)可以使用并不指定具體數(shù)據(jù)類(lèi)型的泛型指針void *。通常只允許相同類(lèi)型的指針之間進(jìn)行轉(zhuǎn)換,但泛型指針能夠轉(zhuǎn)換為任何類(lèi)型的指針,反之亦然。比如,C標(biāo)準(zhǔn)庫(kù)中的memcpy()函數(shù)它將一段數(shù)據(jù)從內(nèi)存中的一個(gè)地方復(fù)制到另一個(gè)地方。由于memcpy()可能用于復(fù)制任何類(lèi)型的數(shù)據(jù),因此將它的指針參數(shù)設(shè)定為void指針是非常合理的。比如,此前的swap()函數(shù),可以將它的參數(shù)改為void指針,則swap()就變成了一個(gè)可以交換任何類(lèi)型數(shù)據(jù)的通用交換函數(shù),詳見(jiàn)程序清單1.18。

程序清單1.18swap()函數(shù)(void_data_swap.c)

1 #include

2 #include

3

4 int swap(void *x, void *y, int size)

5 {

6 void *temp;

7

8 if((temp = malloc(size)) == NULL)

9 return -1;

10 memcpy(temp, x, size); memcpy(x, y, size); memcpy(y, temp, size);

11 free(temp);

12 return 0;

13 }

>>>1.5.5使用接口

只要傳入待交換的變量的地址,即可確定如何通過(guò)接口調(diào)用它們,詳見(jiàn)程序清單1.19。

程序清單1.19 swap數(shù)據(jù)交換函數(shù)范例程序

1 #include

2 #include "swap.h"

3

4 int main(int argc, char *argv[])

5 {

6 int a = 1, b = 2;

7

8 printf("%d, %d\n", a, b);

9 swap(&a, &b);

10 printf("%d, %d\n", a, b);

11 return 0;

12 }

由此可見(jiàn),抽象的接口隱藏了它的內(nèi)部細(xì)節(jié),用戶不再依賴具體的實(shí)現(xiàn)代碼,而是依賴于抽象接口。抽象的接口幾乎沒(méi)有細(xì)節(jié),沒(méi)有什么需要變化的,使抽象和細(xì)節(jié)彼此隔離,因此抽象的接口非常容易被重用,其深刻地揭示了抽象的生命力。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153769
  • 封裝
    +關(guān)注

    關(guān)注

    128

    文章

    8685

    瀏覽量

    145509

原文標(biāo)題:周立功:實(shí)現(xiàn)和使用易重用的抽象接口

文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    蘇寧購(gòu)電商 API 接口,家電庫(kù)存管理智能方案

    ? ? ?編輯?在當(dāng)今快速發(fā)展的電商行業(yè)中,家電庫(kù)存管理是企業(yè)運(yùn)營(yíng)的核心挑戰(zhàn)之一。庫(kù)存積壓或短缺不僅影響客戶滿意度,還可能導(dǎo)致資金鏈斷裂。蘇寧購(gòu)作為中國(guó)領(lǐng)先的電商平臺(tái),推出了一套基于API接口
    的頭像 發(fā)表于 07-07 14:59 ?167次閱讀
    蘇寧<b class='flag-5'>易</b>購(gòu)電商 API <b class='flag-5'>接口</b>,家電庫(kù)存管理智能方案

    飛凌嵌入式ElfBoard ELF 1板卡-Regmap的優(yōu)勢(shì)

    接口的具體實(shí)現(xiàn)細(xì)節(jié)。這種抽象接口簡(jiǎn)化了驅(qū)動(dòng)程序的開(kāi)發(fā)和維護(hù),提高了代碼的可移植性和可重用性。 二、配置靈活:使用 Regmap,驅(qū)動(dòng)程序需要
    發(fā)表于 05-22 10:39

    通攜&lt;飛云&gt;系統(tǒng)助力物聯(lián)網(wǎng)新變革!

    成本,拓展服務(wù),增加價(jià)值,可以將各種物體通過(guò)信息傳感器和網(wǎng)絡(luò)技術(shù)相連的新型網(wǎng)絡(luò),實(shí)現(xiàn)對(duì)物體的智能化管理和控制。 二、飛云系統(tǒng)的主要應(yīng)用場(chǎng)景 1、智能倉(cāng)庫(kù)管理: 通過(guò)藍(lán)牙設(shè)備(Beacon)綁定物品,對(duì)倉(cāng)庫(kù)的庫(kù)存狀態(tài)可以在貨物進(jìn)出
    的頭像 發(fā)表于 03-28 15:28 ?353次閱讀
    飛<b class='flag-5'>易</b>通攜&lt;飛<b class='flag-5'>易</b>云&gt;系統(tǒng)助力物聯(lián)網(wǎng)新變革!

    華錄智慧交管大模型實(shí)現(xiàn)交通數(shù)據(jù)價(jià)值的深度挖掘與應(yīng)用

    華錄將多年積累的數(shù)據(jù)治理經(jīng)驗(yàn)與DeepSeek卓越的推理能力深度融合,實(shí)現(xiàn)了交通數(shù)據(jù)價(jià)值的深度挖掘與應(yīng)用?!癉eepSeek+小”智能引擎雙驅(qū)動(dòng),讓交通管控更智能、更高效,讓每一位交警真切感
    的頭像 發(fā)表于 03-08 13:48 ?1079次閱讀

    系統(tǒng)建模與抽象層次:從模塊到物理實(shí)現(xiàn)

    搭配定制軟件。要讓這些新產(chǎn)品成功上市,應(yīng)采用怎樣的最佳開(kāi)發(fā)流程呢?硬件設(shè)計(jì)師正在借鑒軟件開(kāi)發(fā)團(tuán)隊(duì)的經(jīng)驗(yàn),在開(kāi)發(fā)初期實(shí)施系統(tǒng)級(jí)設(shè)計(jì)。了解系統(tǒng)建模和抽象層次在硬件和軟件
    的頭像 發(fā)表于 03-07 18:01 ?290次閱讀
    系統(tǒng)建模與<b class='flag-5'>抽象</b>層次:從模塊到物理<b class='flag-5'>實(shí)現(xiàn)</b>

    LabVIEW抽象消息使用教程(上)

    自學(xué)LabVIEW的Actor FrameWork的消息與抽象消息的時(shí)候肯定會(huì)覺(jué)得非常模糊。小編將給大家?guī)?lái)一個(gè)有關(guān)抽象消息的教程,分為上下兩期,本期將帶領(lǐng)大家創(chuàng)建Actor中的方法并為方法創(chuàng)建對(duì)應(yīng)的消息。
    的頭像 發(fā)表于 01-03 14:22 ?1236次閱讀
    LabVIEW<b class='flag-5'>抽象</b>消息使用教程(上)

    利用FPGA實(shí)現(xiàn)USB 2.0通信接口

    USB?2.0接口實(shí)現(xiàn)方式 利用FPGA來(lái)實(shí)現(xiàn)USB 2.0接口的方式一般有兩種,一是借助外圍的USB接口芯片,二是FPGA內(nèi)部
    的頭像 發(fā)表于 12-30 13:59 ?2898次閱讀
    利用FPGA<b class='flag-5'>實(shí)現(xiàn)</b>USB 2.0通信<b class='flag-5'>接口</b>

    創(chuàng)新榮獲2024全球電子成就獎(jiǎng)年度微控制器/接口產(chǎn)品獎(jiǎng)

    近日,在Aspencore 2024全球電子成就獎(jiǎng)(WEAA)頒獎(jiǎng)典禮中,旗下基于RISC-V內(nèi)核的GD32VW553系列雙模無(wú)線微控制器榮獲“年度微控制器/接口產(chǎn)品”獎(jiǎng),這是兆創(chuàng)新連續(xù)第7年獲得此項(xiàng)殊榮,充分展現(xiàn)了公司在產(chǎn)品創(chuàng)新和技術(shù)研發(fā)領(lǐng)域的領(lǐng)先地位和卓越實(shí)力。
    的頭像 發(fā)表于 11-06 11:52 ?756次閱讀

    智能選擇ADC/DAC可實(shí)現(xiàn)更好的軟件定義無(wú)線電設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《智能選擇ADC/DAC可實(shí)現(xiàn)更好的軟件定義無(wú)線電設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-21 09:59 ?0次下載
    智能選擇ADC/DAC可<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>更好</b>的軟件定義無(wú)線電設(shè)計(jì)

    使用ADC12_A實(shí)現(xiàn)熱電偶接口

    電子發(fā)燒友網(wǎng)站提供《使用ADC12_A實(shí)現(xiàn)熱電偶接口.pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:13 ?0次下載
    使用ADC12_A<b class='flag-5'>實(shí)現(xiàn)</b>熱電偶<b class='flag-5'>接口</b>

    單CPU 雙項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)更好的維護(hù)性和可行性應(yīng)用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《單CPU 雙項(xiàng)目開(kāi)發(fā)實(shí)現(xiàn)更好的維護(hù)性和可行性應(yīng)用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 09-12 09:42 ?0次下載
    單CPU 雙項(xiàng)目開(kāi)發(fā)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>更好</b>的維護(hù)性和可行性應(yīng)用說(shuō)明

    優(yōu)通無(wú)線DTU騰訊云通信實(shí)例

    優(yōu)通無(wú)線DTU騰訊云通信實(shí)例(基于MQTT)優(yōu)——產(chǎn)品優(yōu),服務(wù)優(yōu),價(jià)格優(yōu)——安裝,使用,維護(hù)通——通訊技術(shù)專(zhuān)家,精于通訊,萬(wàn)物互通
    的頭像 發(fā)表于 08-30 11:45 ?692次閱讀
    優(yōu)<b class='flag-5'>易</b>通無(wú)線DTU騰訊云通信實(shí)例

    MSPM0-高級(jí)控制計(jì)時(shí)器有助于實(shí)現(xiàn)更好的控制和更好的數(shù)字輸出

    電子發(fā)燒友網(wǎng)站提供《MSPM0-高級(jí)控制計(jì)時(shí)器有助于實(shí)現(xiàn)更好的控制和更好的數(shù)字輸出.pdf》資料免費(fèi)下載
    發(fā)表于 08-28 11:30 ?0次下載
    MSPM0-高級(jí)控制計(jì)時(shí)器有助于<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>更好</b>的控制和<b class='flag-5'>更好</b>的數(shù)字輸出

    克服設(shè)計(jì)難題-實(shí)現(xiàn)高性能接口

    電子發(fā)燒友網(wǎng)站提供《克服設(shè)計(jì)難題-實(shí)現(xiàn)高性能接口.pdf》資料免費(fèi)下載
    發(fā)表于 08-28 09:41 ?0次下載
    克服設(shè)計(jì)難題-<b class='flag-5'>實(shí)現(xiàn)</b>高性能<b class='flag-5'>接口</b>

    串行外設(shè)接口的菊花鏈實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《串行外設(shè)接口的菊花鏈實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 08-27 09:45 ?1次下載
    串行外設(shè)<b class='flag-5'>接口</b>的菊花鏈<b class='flag-5'>實(shí)現(xiàn)</b>