關於在 C 中實作作業

因為 C 語言不會直接支援物件作業的概念,所以必須解決從物件模型產生 C 程式碼時的兩個問題:

將作業與物件相關聯

因為每一個與物件相關聯的作業會在 C 中實作為廣域函數,必須提供環境定義,形式是指向其所運作所在物件的指標。 在 C++ 中,會以隱含的 this 指標形式來提供此環境定義,並作為第一個引數。但是在 C 中,無法使用 this 指標。因此,在 C 中的 IBM® Rational® Rhapsody®,作業的第一個引數通常是指向與作業相關聯物件的指標。此環境定義指標照慣例會稱為 me。例如:

/*## operation close() */
void Valve_close(Valve* const me);

單態物件只有一個實例,所以不需要用於單態物件的環境定義指標。 如需相關資訊,請參閱單態物件

您可以使用 C_CG::Operation::MeC_CG::Operation::MeDeclType 內容,變更為第一個引數所產生的名稱。 Me 內容會指定用於第一個引數(例如,"me")的字串。MeDeclType 內容指定第一個引數的完整類型宣告。其預設值如下:

$objectName* const

objectName 變數會取代為物件類型的名稱。將 a :i 開關新增至 objectName 變數,會將名稱截斷只剩下大寫字母。例如,針對名為 HomeHeatingSystem 的物件使用 $objectName:i,會導致名稱為 HHS

Rational Rhapsody 會自動將 me 引數插入針對作業所產生的程式碼,但是您務必記得要在呼叫物件的作業時提供此引數。

作業的命名

因為 C 有個非階層式的名稱空間供函數使用,Rational Rhapsody 會使用命名慣例來解決名稱空間的競用。所使用的慣例是將作業在其中運作的物件名稱,當作每一個(公用)作業的字首。(如需專用作業的不同命名慣例相關資訊,請參閱作業的可見性。)

例如,Valve 物件有兩個公用作業:open()close()。 這些作業可實作如下:

void Valve_open(struct Valve_t * const me);
void Valve_close(struct Valve_t * const me);

回饋