1. 程式人生 > >C語言介面與實現

C語言介面與實現

1. 模組化程式設計

       面向物件程式設計是一種思想,和語言無關。學過C++、java等面向物件程式語言的同學,應該都知道面向物件的三大特性是封裝繼承多型。而C語言一直被蒙上了面向過程程式設計的面紗。工作後從事的是嵌入式軟體開發,在開發過程中運用最多的還是C語言,所以在程式的設計過程中,一直想使用C語言達到面向物件程式設計的效果,這裡將講解使用C語言來模擬面向物件程式設計的實現。

       在專案的開發過程中,我們將使用到很多的功能模組,由於C語言的靈活性和自由性,若在程式設計時不遵循模組化程式設計思想,其程式碼的可讀性將是一件令人頭痛的問題。為了提高專案工程的可讀性和可維護性,我們將採用模組化程式設計思想,例如:將按鍵和液晶顯示分為兩個獨立的模組key.c和lcd.c,每個模組應該儘量降低與其他模組的耦合性。模組分為兩個部分,即模組的介面

實現,在C語言中實現介面和實現的方法,即為xxx.h和xxx.c。

2. 介面

       介面規定了模組做什麼,僅規定應用程式可能使用的那些識別符號,而儘可能隱藏不相關的表示細節和演算法。在C語言中,介面通過一個頭檔案指定,標頭檔案的副檔名通常為.h。這個標頭檔案會宣告應用程式可能使用的巨集、型別、資料結構、變數和介面宣告。應用程式通過預處理指令#include匯入介面。

       以下例子說明了介面的使用約定。下述介面

<arith.h>
extern int Arith_max(int x, int y);
extern int Arith_min(int x, int y);
extern int Arith_div(int x, int y);
extern int Arith_mod(int x, int y);
extern int Arith_ceiling(int x, int y);
extern int Arith_floor(int x, int y);

      聲明瞭6個整數算術運算函式,其它模組需要使用時,只需要通過#include匯入。該介面命名為Arith,介面標頭檔案命名為arith.h。在介面中,介面名稱表現為每個識別符號的字首,這樣能夠有效的避免名稱衝突,並且有助於程式程式碼文件化。

3. 實現

      實現會匯出介面。它定義了必要的變數和函式,以提供介面規定的功能。實現具體解釋了介面的語義,並給出其表示細節和演算法,但在理想情況下,應用程式從來都不需要看到這些細節。

      一個介面可以有多個實現。只要實現遵循介面的規定,完全可以在不影響應用程式的情況下改變實現。在C語言中,一個實現通過一個或多個.c檔案來提供。實現必須提供其匯出的介面規定的功能,實現會包含介面的.h

檔案,以確保其定義與介面的宣告一致。

      如arith.c所示:

#include "arith.h"

int Arith_max(int x, int y)
{
    return x > y ? x : y;
}

int Arith_min(int x, int y)
{
    return x > y ? y : x;
}

4. 抽象資料型別

       一個抽象資料型別是一個介面,它定義了一個資料型別和對該型別的值所進行的操作。一個數據型別是一個值的集合。在C語言中,內建的資料型別包括字元、整數、浮點數等。而結構本身也能定義新的型別,因而可用於建立更高階型別,如列表、樹、查詢表等。

       高階型別是抽象的,因為其介面隱藏了相關的表示細節,並只規定了對該型別值的合法操作。理想情況下,這些操作不會暴露型別的表示細節,因為那樣可能使應用程式隱含地依賴於具體的表示。抽象資料型別或ADT的標準範例是棧。

<stack.h>

#ifndef STACK_INCLUDED
#define STACK_INCLUDED

#define T Stack_T

typedef struct T *T;

extern T Stack_new(void);
extern int Stack_empty(T stk);
extern void Stack_push(T stk, void *x);
extern void *Stack_pop(T stk);
extern void Stack_free(T *stk);

#undef T
#endif

相關推薦

C語言介面實現[+]

static char rcsid[] = "$Id: H:/drh/idioms/book/RCS/text.doc,v 1.10 1996/06/26 23:02:01 drh Exp $"; #include <string.h> #include <limits.h> #

讀書筆記--C語言介面實現--介面實現

介面實現 重點內容在本書中的第二章中,介紹了介面的封裝例子。 1. 介面定義 C語言中可將介面封裝好,讓後以.h檔案作文擴充套件,簡單例子: extern int Arith_max(int x, int y); extern int Ari

c語言介面實現--再論記憶體管理含例項

本章開頭指出上一章節描述的記憶體管理方法存在一些缺陷,比如不適合頻繁建立和銷燬記憶體的應用場景;所以在本章重新給出了另外一種設計思路。提出了記憶體池的概念,如果熟悉的小夥伴,還接觸過執行緒池的概念。個人認為這一章節比前一章節更好理解。 本書中的程式碼有個地方的

C語言介面實現

1. 模組化程式設計        面向物件程式設計是一種思想,和語言無關。學過C++、java等面向物件程式語言的同學,應該都知道面向物件的三大特性是封裝、繼承和多型。而C語言一直被蒙上了面向過程程式設計的面紗。工作後從事的是嵌入式軟體開發,在開發過程中運用最多的還是C語

C語言介面實現》實驗——格式化(Fmt_T)

實驗程式是用vc6編譯,一定注意副檔名為c,不是cpp,下載前面幾個測試程式(連結串列、表、原子中有下載連結)中直接將下面源程式覆蓋1.c的內容即可! 再次強烈建議在這些函式上設上斷點,按F11跟進去把原始碼走一遍,才有真正的學習效果! 源程式如下: #inc

《Effective c++ 》 介面實現分離 檔案間的編譯依存關係降至最低

參考Effective c++中的條款31 將檔案間的編譯依存關係降至最低 。 Person.h class Date; // 類的前置宣告 class Address; class Perso

關於C++中介面實現的理解

        所謂介面繼承,就是派生類只繼承函式的介面,也就是宣告;而實現繼承,就是派生類同時繼承函式的介面和實現。       我們都很清楚C++中有幾個基本的概念,虛擬函式、純虛擬函式、非虛擬函式。       虛擬函式:       C++實現執行中的多型性是通過

二值形態學——腐蝕膨脹 及 C語言代碼實現

hide 內部 isp 反射 尺寸 恢復 lag pos 參考 參考文獻:數字圖像處理(第三版) 何東健 西安電子科技大學出版社 二值形態學中的運算對象是集合, 但實際運算中, 當涉及兩個集合時並不把它們看作是互相對等的。 一般設A為圖像集合, S為結構元素, 數

C語言介面實現2048小遊戲

這是我在大一第二學期(兩年前)為了參加比賽,自學後寫的一個Dome,拿出來和大家分享一下,程式碼為兩年前的程式碼,未改動,優化以及各式可能很一般,請見諒。 #include "stdio.h" #include "stdlib.h" #include "time.h" #d

彙編:實現C語言的 ||&&運算

;C程式轉匯編(或運算連結) DATAS SEGMENT a Dw 5 b dw 6 cc dw 7 d dw 8 m dw 2 n dw 2 string db 6 dup(?) DATAS ends CODES SEGMENT ASSUME CS:CODES, DS:DATAS

C語言++aa++的實現機制操作符結合優先順序

看到一道“經典Linux C“面試題,關於左值和右值的。 華為筆試題 1.寫出判斷ABCD四個表示式的是否正確, 若正確, 寫出經過表示式中 a的值(3分) int a = 4; (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;

C語言編程實現斐波那契數列(遞歸非遞歸)

() code tdi clu return include 位置 c語言編程 數組 一.非遞歸 <1>數組 #include<stdio.h> #include<stdlib.h> int main() { int a[1000

06-圖1 列出連通集 25分C語言鄰接表實現

aop iba mdx cab hid ctr and shang tel %E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3java%E8%99%9A%E6%8B%9F%E6%9C%BA5---%E5%AD%97%E8%8A%82%E7%A0%81%

基於C語言EOFgetchar的使用詳解

shp fct ongl jdb sys sgi utf lba egg %E8%AF%B7%E6%95%99%E9%AB%98%E6%89%8B%E5%A4%9A%E7%BA%BF%E7%A8%8B%E9%87%8C%E6%80%8E%E4%B9%88%E4%BD%BF%

C語言 分支循環 遞推思想

post 16px play 邊界 color clu 技術分享 細節 open 條件語句 開關控制語句(SWITCH語句) 象坐電梯一樣,break是按的樓層,不加break則會一直執行下去。 上面程序有細節BUG,邊界測試輸入-5,105時由於整除會得到

cp&tar&用c語言編寫程序 實現cp命令的效果

none des tdi 文件內容 display 我們 class pan fop 1.cp (拷貝) 已存在文件路徑 要拷貝的文件路徑 實現cp命令的代碼如下: 2 #include <stdio.h>

C語言常量變量的應用

其中 dot 任務 數值計算 計算 繪圖 承載 urn 字符 程序的世界中,可以讓計算機按照指令做很多事情,如進行數值計算、圖像顯示、語音對話、視頻播放、天文計算、發送郵件、遊戲繪圖以及任何我們可以想象到的事情。要完成這些任務,程序需要使用數據,即承載信息的數字與字符。 在

C語言 —— charunsigned char

pri pre unsigned clas 輸出結果 類型 有符號數 nbsp sign 1 #include <stdio.h> 2 int main() 3 { 4 unsigned char a = 128; 5 char b = a;

(轉)從信息隱藏的一個需求看C++接口實現的分離

要求 member 不可 所有 stack log virtual overflow int 原文地址https://blog.csdn.net/tonywearme/article/details/6926649 讓我們從stackoverflow上一個同學的問題來開始。

C語言 trim函式實現

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> //去除尾部空格 char *rtrim(char *str) { if(str == N