日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

#include "pgm.h" //用戶自己編寫的庫文件

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

程序清單1.17swap數(shù)據(jù)交換接口的實現(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時,則p1和p2存儲的值就是&a和&b,即可用*p1和*p2表示a和b的值。如果寫成以下這種形式:

temp = p1;

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

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

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

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

只要傳入待交換的變量的地址,即可確定如何通過接口調(diào)用它們,詳見程序清單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 }

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

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

    關(guān)注

    33

    文章

    9604

    瀏覽量

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

    關(guān)注

    128

    文章

    9344

    瀏覽量

    149095

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    MAX5417/MAX5418/MAX5419:256抽頭非失性I2C接口數(shù)字電位器的深度解析

    MAX5417/MAX5418/MAX5419:256抽頭非失性I2C接口數(shù)字電位器的深度解析 在電子設(shè)計領(lǐng)域,數(shù)字電位器以其獨特的優(yōu)勢逐漸取代傳統(tǒng)機械電位器,成為眾多應(yīng)用場景中的理想選擇。今天
    的頭像 發(fā)表于 04-18 09:15 ?176次閱讀

    點正澤加入江蘇省腦機接口產(chǎn)業(yè)聯(lián)盟,打造腦機接口產(chǎn)業(yè)"連接器"

    南京2026年3月14日 /美通社/ -- 2026年3月14日,江蘇省腦機接口產(chǎn)業(yè)聯(lián)盟成立暨2026腦機接口創(chuàng)新發(fā)展會在南京舉行。會上,江蘇省腦機接口產(chǎn)業(yè)聯(lián)盟正式成立,點正澤(南京
    的頭像 發(fā)表于 03-15 13:02 ?234次閱讀
    <b class='flag-5'>易</b>點正澤加入江蘇省腦機<b class='flag-5'>接口</b>產(chǎn)業(yè)聯(lián)盟,打造腦機<b class='flag-5'>接口</b>產(chǎn)業(yè)&quot;連接器&quot;

    基于AMD FPGA的HDMI2.1接口實現(xiàn)

    隨著超高清視頻與高幀率顯示需求的提升,大帶寬視頻接口被廣泛應(yīng)用,其中HDMI是使用最廣泛的音視頻傳輸接口。AMD?FPGA憑借其高性能的邏輯資源和穩(wěn)定的高速串行接口,可以幫助用戶輕松實現(xiàn)
    的頭像 發(fā)表于 02-12 17:18 ?6610次閱讀
    基于AMD FPGA的HDMI2.1<b class='flag-5'>接口實現(xiàn)</b>

    創(chuàng)新GD32G5系列MCU斬獲2025全球電子成就獎之年度微控制器/接口產(chǎn)品獎

    11月25日,在全球電子成就獎頒獎典禮上,兆創(chuàng)新(GigaDevice)旗下高性能微控制器GD32G5系列MCU憑借出色的性能和市場表現(xiàn),榮獲“年度微控制器/接口產(chǎn)品”獎,這一殊榮充分印證了兆創(chuàng)新在高端微控制器領(lǐng)域的技術(shù)實力
    的頭像 發(fā)表于 12-01 10:01 ?1042次閱讀

    深度剖析Nios II 處理器的硬件抽象

    硬件抽象層(Hardware Abstraction Layer, HAL)是一個輕量級嵌入式運行時環(huán)境,它為用戶應(yīng)用程序和底層硬件提供了一個簡單的設(shè)備驅(qū)動程序接口。HAL應(yīng)用程序接口(API
    的頭像 發(fā)表于 10-31 15:25 ?5191次閱讀
    深度剖析Nios II 處理器的硬件<b class='flag-5'>抽象</b>層

    圖文詳情編輯接口的設(shè)計與實現(xiàn)

    。本文將從接口設(shè)計原則、核心功能、技術(shù)實現(xiàn)到代碼示例,逐步解析如何構(gòu)建一個健壯的圖文詳情編輯接口。我們將聚焦于RESTful API設(shè)計,確保接口安全、可擴展且高性能。 1.
    的頭像 發(fā)表于 10-23 16:37 ?518次閱讀
    圖文詳情編輯<b class='flag-5'>接口</b>的設(shè)計與<b class='flag-5'>實現(xiàn)</b>

    如何利用XPIO構(gòu)建并實現(xiàn)帶有Strobe的高速接口設(shè)計

    在 AMD Versal 自適應(yīng) SoC 器件中,SelectIO 是實現(xiàn)高速接口的重要組成部分。它為器件提供了靈活且高性能的通用 I/O 資源,支持多種工作模式,能夠滿足源同步接口、異步接口
    的頭像 發(fā)表于 10-17 09:22 ?2728次閱讀
    如何利用XPIO構(gòu)建并<b class='flag-5'>實現(xiàn)</b>帶有Strobe的高速<b class='flag-5'>接口</b>設(shè)計

    商品圖片批量上傳接口設(shè)計與實現(xiàn)

    ? 在電商平臺或內(nèi)容管理系統(tǒng)中,商品圖片的高效管理是核心需求之一。批量上傳接口允許用戶一次性上傳多張圖片,顯著提升操作效率。本文將逐步介紹如何設(shè)計并實現(xiàn)一個可靠的商品圖片批量上傳接口,涵蓋接口
    的頭像 發(fā)表于 10-13 15:25 ?589次閱讀

    蘇寧購 API 接口:蘇寧購平臺促銷活動用戶參與度分析

    ? 在電商平臺的激烈競爭中,促銷活動是提升用戶粘性和銷售轉(zhuǎn)化的核心策略。蘇寧購作為中國領(lǐng)先的零售平臺,其API接口為開發(fā)者提供了高效的數(shù)據(jù)訪問能力,助力深度分析用戶參與度。本文將逐步探討如何利用蘇
    的頭像 發(fā)表于 09-01 17:15 ?866次閱讀
    蘇寧<b class='flag-5'>易</b>購 API <b class='flag-5'>接口</b>:蘇寧<b class='flag-5'>易</b>購平臺促銷活動用戶參與度分析

    利用蘇寧購 API 接口,實現(xiàn)蘇寧購店鋪線上線下庫存一體化

    ? ?在當(dāng)今零售業(yè)中,線上線下庫存一體化已成為提升運營效率的關(guān)鍵策略。蘇寧購作為領(lǐng)先的電商平臺,其開放的API接口為商家提供了實現(xiàn)這一目標(biāo)的強大工具。本文將逐步解析如何通過蘇寧購A
    的頭像 發(fā)表于 09-01 16:57 ?901次閱讀
    利用蘇寧<b class='flag-5'>易</b>購 API <b class='flag-5'>接口</b>,<b class='flag-5'>實現(xiàn)</b>蘇寧<b class='flag-5'>易</b>購店鋪線上線下庫存一體化

    揭秘蘇寧購 API,讓蘇寧購店鋪會員營銷更精準(zhǔn)

    ? 在當(dāng)今電商競爭激烈的環(huán)境中,蘇寧購作為中國領(lǐng)先的零售平臺,為店鋪提供了強大的技術(shù)工具——API(應(yīng)用程序接口),幫助商家實現(xiàn)會員營銷的精準(zhǔn)化。本文將從基礎(chǔ)概念入手,逐步解析蘇寧
    的頭像 發(fā)表于 08-29 11:01 ?820次閱讀
    揭秘蘇寧<b class='flag-5'>易</b>購 API,讓蘇寧<b class='flag-5'>易</b>購店鋪會員營銷更精準(zhǔn)

    巧用蘇寧購 API,精準(zhǔn)分析蘇寧購家電銷售大數(shù)據(jù)

    收集和處理數(shù)據(jù),并應(yīng)用統(tǒng)計方法實現(xiàn)精準(zhǔn)分析。文章結(jié)構(gòu)清晰,確保您能跟隨操作,獲取可靠結(jié)果。 第一步:獲取和配置蘇寧購 API 要分析數(shù)據(jù),首先需訪問蘇寧購的開發(fā)者平臺(如蘇寧開放平臺),注冊賬號并申請 API 密鑰。API
    的頭像 發(fā)表于 08-29 10:54 ?836次閱讀
    巧用蘇寧<b class='flag-5'>易</b>購 API,精準(zhǔn)分析蘇寧<b class='flag-5'>易</b>購家電銷售大數(shù)據(jù)

    蘇寧購 API 接口:開啟蘇寧購全場景零售數(shù)據(jù)融合新時代

    Interface)作為系統(tǒng)間通信的橋梁,不僅實現(xiàn)了線上線下數(shù)據(jù)的無縫集成,還為企業(yè)、開發(fā)者和消費者提供了前所未有的數(shù)據(jù)驅(qū)動體驗。本文將從 API 接口的核心價值、全場景零售的內(nèi)涵,以及數(shù)據(jù)融合的技術(shù)實現(xiàn)三個方面,探討蘇寧
    的頭像 發(fā)表于 08-29 10:47 ?727次閱讀

    控智駕與普力達成戰(zhàn)略合作

    近日,普力股份有限公司與控智駕科技股份有限公司在新疆國際煤炭工業(yè)博覽會現(xiàn)場簽訂戰(zhàn)略合作協(xié)議。
    的頭像 發(fā)表于 07-21 09:28 ?996次閱讀

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

    接口的具體實現(xiàn)細節(jié)。這種抽象接口簡化了驅(qū)動程序的開發(fā)和維護,提高了代碼的可移植性和可重用性。 二、配置靈活:使用 Regmap,驅(qū)動程序需要
    發(fā)表于 05-22 10:39
    五家渠市| 永济市| 墨江| 德兴市| 石首市| 岑巩县| 虎林市| 崇礼县| 阿克苏市| 普兰县| 疏附县| 许昌县| 武冈市| 晋中市| 东安县| 彭阳县| 全南县| 蓬溪县| 同心县| 黄骅市| 饶河县| 汉寿县| 隆安县| 塔城市| 大城县| 清苑县| 辽宁省| 长垣县| 高台县| 海南省| 沅陵县| 韶山市| 广州市| 临清市| 阿城市| 宝坻区| 萝北县| 将乐县| 九寨沟县| 门头沟区| 高要市|