/************* lw_oopc.h *******************/
# include"malloc.h"
# ifndef LOOPC_H//假如没有定义 LOOPC_H 那么就执行 #define 到 #endif 之间的指令 定义了 就跳过
# define LOOPC_H
# define PI 3.14156
# define CLASS(type)/
typedef struct type type ;/
struct type
# define CTOR(type) /
void* type## New()///## 是告诉编译器 type 是一个 变量
{ /
struct type *t;/
t = (struct type*)malloc(sizeof(struct type));
# define CTOR2(type ,type2)/
void* type2##New()/
{ /
struct type *t;/
t = (struct type*)malloc(sizeof(struct type));
# define END_CTOR return (void*)t; };
# define FUNCTION_SETTING(f1,f2) t->f1 = f2;
# define IMPLEMENTS(type) struct type type
# define INTERFACE(type) struct type
#endif
附注:
物件導向ANSI-C
---- 適用於與ANSI-C相容的開發環境,
例如TurboC, VC++, DEV-C++等。
---- 以Windows平台的應用程式為例。
高煥堂 著
※ 著作權說明:
1. lw_oopc.h巨集檔內容著財權為本書作者:高煥堂 所擁有。
2. 任何營利性、商業性使用,必須先取得本書作者的書面同意。
Full copyright of lw_oopc.h content lies with the Author, Huantang Kao(高煥堂). No part of it may be reproduced, in any form or by any means, without permission in writing by the Author.(詳細請閱第28頁)
序言
近年來,嵌入式(Embedded)軟體應用愈來愈廣,如數位家電、手機、數字化汽車等。而嵌入式軟開發所使用的語言中,C語言仍約佔80%之多,其中ANSI-C在業界佔有極重要的地位。由於嵌入式軟體應用愈來愈廣,軟體品質大大影響了數位產品的穩定和可靠度,因之如何提升ANSI-C程式的簡潔性、易讀性及重覆使用性,乃是當今軟體業的熱門話題。例如世界知名的麥肯錫(McKinsey)顧問公司,在2006年的報告("Getting better software to manufactured products")呼籲軟體業積極提昇其系統分析及設計的能量,才能解決軟體含量愈來愈多的數位產品的信賴度問題。
如何解決上述問題呢?其方向已經很清楚了,就是:讓C語言與物件導向程式設計(Object-Oriented Programming,簡稱OOP)技術結合。就像當今的其他主流電腦語言(如C#、Java等)一般。一旦C語言與物件導向技術結合了,也能進一步與UML相結合,更提昇系統分析與設計的品質了。因此筆者撰寫本書,期望陪伴眾多C程式人員更上層樓,強化系統分析及設計的技能,迎接日益廣大的嵌入式應用市場。
也許你會問到:在1986年時,貝爾(Bell)實驗室已經將C語言與物件導向技術結合成為C++語言了,為何還需要OOPC呢?其答案是:C++語言有些貪心,將整套的物件導向技術涵括進去,導致C++的效率遠比單純C語言慢了許多。由於嵌入式軟體所處的硬體資源大都極為有限,對程式執行效率斤斤計較;所以在今天嵌入式軟體開發上,使用最廣的仍是C語言。
本書所介紹的物件導向ANSI-C語言並不是一個新的語言,它只運用單純ANSI-C語言的巨集(Macro)技巧,實現了物件導向的基本技術,讓系統分析與設計階段的UML模型能與C程式緊密對應,以提升C程式的品質。此外,這些巨集在編譯階段就被翻譯為單純C程式碼了,仍然保持其單純C的高效率,符合嵌入式軟體環境之需要。本書由淺入深分為四篇(共18章),希望本書能陪伴你馳聘於嵌入式應用領域之中,並鴻圖大展。
高煥堂 謹識於 2008年元月
目錄
第1 章 嵌入式時代最划算策略, 7
1.1 迎接高品質的嵌入式軟體時代
1.2 基於TurboC 2.0環境的評量
1.3 基於Visual C++ 環境的評量
第2 章 認識物件導向ANSI-C, 29
2.1 簡介ANSI-C語言
2.2 簡介LW_OOPC:替ANSI-C黃袍加身
第3 章 C的基本資料型態, 47
3.1 簡介資料型態
3.2 整數型態
3.3 無正負號整數
3.4 整數的輸出格式
3.5 字元型態
第4 章 C的資料運算, 59
4.1 簡介資料運算
4.2 算術與指定運算
4.3 關係運算
4.4 邏輯運算
4.5 算術指定運算
4.6 加1 及減1 運算
4.7 位址運算
第5 章C的決策與迴圈, 71
5.1 邏輯運算與決策
5.2 巢狀 if 指令
5.3 多選1 的抉擇
5.4 while 迴圈
5.5 for迴圈
第 6 章C的指標, 81
6.1 指標是什麼 ?
6.2 傳遞指標參數
6.3 函數回傳指標
第 7章 C的結構(struct), 89
7.1 什麼是結構(struct)
7.2 結構的指定運算
7.3 結構指標
7.4 動態記憶體分配
第 8章C的儲存種類, 97
8.1 變數的儲存種類
8.2 靜態函數
第 9 章 C的陣列及字串, 103
9.1 陣列的意義
9.2 一維陣列
9.3 一維陣列與指標
9.4 二維陣列與多維陣列
9.5 二維陣列與指標
9.6 給予陣列初值
第10 章C的前置處理程式, 119
10.1 前置處理程式的工作
10.2 使用巨集
10.3 含入標頭檔
10.4 有條件的編譯
第 11章 認識物件(Object), 134
11.1 自然界之物件
11.2 軟體物件
11.3 物件與函數
11.4 物件與類別
11.5 物件指標
11.6 建構式
第 12章 物件溝通方法, 155
12.1 「訊息傳遞」溝通方法
12.2 「訊息傳遞」範例(一) --- 以Toggle Light電燈為例
12.3 以OOPC實現:使用Turbo C
12.4 以OOPC實現:使用VC++ 2005
第 13章 物件溝通實例, 177
13.1 以向量(Vector)類別封裝一維陣列
第 14 章 認識介面(Interface), 196
14.1 如何定義介面?
14.2 多個類別實現同一介面
14.3 以介面實現多型性(Polymorphic)
第 15 章 介面與樣式:降低物件間之相依性, 215
15.1 物件相依性:細節設計優劣之評量
15.2 樣式觀念
15.3 軟體設計樣式
15.4 簡介IoC樣式
15.5 IoC與COR樣式的攜手合作
第 16 章 LW_OOPC實用範例之一, 238
16.1 認識「錄音」概念和和技術
16.2 單純「錄音」的範例分析
16.3 「錄音/播放」範例之分析
第 17 章 LW_OOPC實用範例之二, 265
17.1 什麼是半加器?
17.2 設計「位元計算機」
第 18 章 LW_OOPC實用範例之三, 281
18.1 形形色色的塗鴉程式
18.2 塗鴉程式範例說明
18.3 塗鴉系統分析與設計