C語言對象編程構思
其實C語言誕生以來,人們就想了很多辦法來體現“面向對象”的思想。下面就來說說我所知道的方法。
有的人不禁要問,宏定義怎么扯到這里來了,我們可以先看一個簡單的例子:
- #define MacroFunction Afunction
然后在程序里面你調用了大量的AFunction,但是有一天,你突然發現你要用BFunction了,(不過AFunction又不能不要,很有可能你以后還要調用),這個時候,你就可以#define MacroFunction Bfunction來達到這樣的目的。
當然,不得不說這樣的辦法是too simple,sometime na?ve的,因為一個很滑稽的問題是如果我一般要改為BFunction,一半不變怎么辦? 那就只好查找替換了。
靜態的入口函數,保證函數名相同,利用標志位調用子函數:
這樣的典型應用很多,比如說網卡驅動里面有一個入口函數Nilan(int FunctionCode,Para*)。具體的參數是什么記不清楚了。保證相同的函數名就是說:網卡驅動是和pNA+協議棧互連的,那么如何保證pNA+協議棧和不同的驅動都兼容呢,一個簡單的辦法就是僅僅使用一個入口函數。
通過改變如果函數的參數值,來調用內部的各個函數。這樣的做法是可以進化的:如果以后想調用新的函數,增加相應的函數參數值就好了。如果我們將網卡驅動和pNA+協議??醋鲀蓚€層的話,我們可以發現:
層與層之間的互連接口是很小的(這里是一個入口函數),一般是采用名字解析的辦法而不是具體的函數調用(利用FunctionCode調用函數,Nilan僅僅實現名字解析的功能)――!接口限制和名字解析
接口限制:層與層之間僅僅知道有限的函數
名字解析:層與層之間建立共同的名字與函數的對應關系,之間利用名字調用功能。 面向對象的理念是自發的,源自天然的。所以面向對象技術被設計得最遵循思維的自然方式。也就是說,用到的符號,術語,定義和每個人都相關?;诿嫦驅ο蟮姆治龊驮O計技術的這些特點,客戶可以從始至終參與到系統的分析中去,參與到系統的設計。由于在討論對象之間的交互作用時,大家使用同樣的術語概念??蛻暨€可以參與文檔的創建和編寫,因為他明確已有對象的含義。這樣分析出來的設計絕對是符合需求易于客戶使用及管理的。
另外加上面向對象技術方面的繼承等技術,使得應用系統的的升級變的輕松。當今計算機硬件的飛速發展使得由于使用面向對象技術帶來的速度效率問題變得越來越沒那么重要了,而各個行業對于計算機的使用使得軟件越來越復雜,清晰的分析和設計條理變成了更主要的問題,而面向對象是非常適合解決這個問題的。
(1)系統分層在數據庫和客戶端加入一個中間層,在這一層添加業務層和數據訪問層,數據訪問層與數據庫交互為業務層提供數據服務。業務層為客戶層提供經過分析及過濾篩選之后的對象及對象集合。
面向對象的理念是自發的,源自天然的。所以面向對象技術被設計得最遵循思維的自然方式。也就是說,用到的符號,術語,定義和每個人都相關。基于面向對象的分析和設計技術的這些特點,客戶可以從始至終參與到系統的分析中去,參與到系統的設計。由于在討論對象之間的交互作用時,大家使用同樣的術語概念??蛻暨€可以參與文檔的創建和編寫,因為他明確已有對象的含義。這樣分析出來的設計絕對是符合需求易于客戶使用及管理的。
另外加上面向對象技術方面的繼承等技術,使得應用系統的的升級變的輕松。當今計算機硬件的飛速發展使得由于使用面向對象技術帶來的速度效率問題變得越來越沒那么重要了,而各個行業對于計算機的使用使得軟件越來越復雜,清晰的分析和設計條理變成了更主要的問題,而面向對象是非常適合解決這個問題的。
【編輯推薦】