QP實(shí)時(shí)嵌入式框架之QM
前言
關(guān)于軟件開發(fā)中的大事,已經(jīng)有很多墨水了。其中之一是從高級(jí)模型(例如,從狀態(tài)機(jī))的自動(dòng)代碼生成,在此前的文章中說(shuō)到了QM是一個(gè)自動(dòng)生成代碼的工具,這樣的代碼就好用嗎?
你是否用過(guò)或者寫過(guò)這樣的代碼自動(dòng)生成腳本,如果代碼可以生成,生成的代碼又不好用只能參考,是不是有點(diǎn)雞肋呢?
本想說(shuō)到這個(gè)問(wèn)題,但是在此之前,我們又有必要先了解一下QM這個(gè)軟件,它是怎么自動(dòng)生成代碼的,原理是什么,好不好用。
QM是什么?
QM(QP Modeler) 是一款免費(fèi)軟件,基于模型設(shè)計(jì)(MBD) 和自動(dòng)代碼生成工具,用于基于分層狀態(tài)機(jī)(UML 狀態(tài)圖)和事件驅(qū)動(dòng)的 QP 實(shí)時(shí)嵌入式軟件框架 (RTEF), QM 可用于 Windows、Linux 和 MacOS 主機(jī)。
有什么作用?
QM 基于模型的設(shè)計(jì)工具的主要目標(biāo)是:
-
將軟件分解為稱為活動(dòng)對(duì)象的事件驅(qū)動(dòng)組件
-
以圖形方式設(shè)計(jì)與這些活動(dòng)對(duì)象關(guān)聯(lián)的分層狀態(tài)機(jī)
-
自動(dòng)生成具有生產(chǎn)質(zhì)量且可從您的設(shè)計(jì)中完全追溯的代碼
QM從根本上說(shuō)是一個(gè)面向?qū)ο蟮墓ぞ?,與目標(biāo)編程語(yǔ)言無(wú)關(guān),面向?qū)ο笠馕吨?QM 模型從根本上由類組成,并且只有類才能擁有與其關(guān)聯(lián)的狀態(tài)機(jī)。
QM看起來(lái)如何?
QM是一個(gè)跨平臺(tái)的桌面應(yīng)用程序,以下顯示了QM中執(zhí)行的典型活動(dòng):
-
在 QM 中使用分層狀態(tài)機(jī)
-
在 QM 中生成代碼
-
設(shè)計(jì)一個(gè)子機(jī)器來(lái)捕獲 QM 中的常見(jiàn)行為
-
自定義 QM 用戶界面(深色主題)
QM有什么特別之處?
QM的主要設(shè)計(jì)目標(biāo)是簡(jiǎn)單和最大限度地減少與工具斗爭(zhēng)的需要,下面描述的幾種方式實(shí)現(xiàn)了這一點(diǎn)。
簡(jiǎn)單
與當(dāng)今市場(chǎng)上的大多數(shù)其他高級(jí)建模工具相比,QM更簡(jiǎn)單、以代碼為中心且級(jí)別相對(duì)較低(不是貶義的)。
這意味著QM明確地將設(shè)計(jì)直接映射到C或C 代碼,狀態(tài)機(jī)執(zhí)行的所有動(dòng)作都直接用 C 或 C 輸入到模型中;沒(méi)有“平臺(tái)無(wú)關(guān)模型”(PIM)、“平臺(tái)特定模型”(PSM)、復(fù)雜的“模型轉(zhuǎn)換”或“動(dòng)作語(yǔ)言”。
內(nèi)置 QP 框架
與大多數(shù)其他能夠生成代碼的工具一樣,QM創(chuàng)建的模型基于事件驅(qū)動(dòng)的實(shí)時(shí)嵌入式框架,這樣的框架提供了明確定義的“框架擴(kuò)展點(diǎn)”,旨在將框架定制到應(yīng)用程序中,從而為生成代碼提供明確定義的規(guī)則。
然而,QM的大部分簡(jiǎn)單性在于:它帶有內(nèi)置的 QP 框架系列,而不是支持開放式的框架和編程語(yǔ)言,另一個(gè)簡(jiǎn)化方面是 QM 是一種嚴(yán)格的前向工程工具(不應(yīng)編輯生成的代碼),不嘗試支持往返工程。
捕捉物理設(shè)計(jì)
QM是市場(chǎng)上獨(dú)特的基于模型的設(shè)計(jì)工具,可以將代碼的物理設(shè)計(jì)作為模型的一個(gè)組成部分,即將代碼劃分為目錄和文件,例如頭文件 (.h) 和實(shí)現(xiàn)文件(.c 或 .cpp 文件)。
這種獨(dú)特的方法可以使我們靈活控制源代碼結(jié)構(gòu),減少了對(duì)生成的代碼進(jìn)行手動(dòng)更改,此外,QM提供了在模型和生成的代碼之間快速來(lái)回切換的機(jī)制,以便任何更改都可以方便地直接應(yīng)用于模型而不是代碼。
不再是“與工具作斗爭(zhēng)”
QM的主要設(shè)計(jì)目標(biāo)是盡可能地尊重設(shè)計(jì)決策,不僅在生成代碼的物理設(shè)計(jì)方面,而且在安排狀態(tài)和路由轉(zhuǎn)換的確切細(xì)節(jié)方面。
比如當(dāng)我們花了很多時(shí)間安排狀態(tài)和路由轉(zhuǎn)換之后,如果突然改變圖表排列的工具或者有新的變更需求,那么肯定會(huì)有很多麻煩的事情。
在QM中繪制分層狀態(tài)圖需要考慮很多,且具有創(chuàng)新性,例如,QM 不使用“偽狀態(tài)”,比如初始偽狀態(tài)或選擇點(diǎn);相反,QM 分別使用更高級(jí)別的初始轉(zhuǎn)換和選擇段原語(yǔ);這極大地簡(jiǎn)化了狀態(tài)圖,我們不需要單獨(dú)定位偽狀態(tài)然后連接它們。
此外,QM 為內(nèi)部轉(zhuǎn)換引入了新的表示法,它允許實(shí)際繪制內(nèi)部轉(zhuǎn)換(在標(biāo)準(zhǔn) UML 表示法中,內(nèi)部轉(zhuǎn)換只是狀態(tài)體中的文本)。這種表示法能夠?qū)?nèi)部轉(zhuǎn)換或者常規(guī)狀態(tài)轉(zhuǎn)換附加到單個(gè)選擇點(diǎn),彌補(bǔ)了標(biāo)準(zhǔn)UML的缺陷。
后記
自動(dòng)生成代碼工具很多,大家可以自行了解,當(dāng)然QP中QM的使用也就很關(guān)鍵了,本文先介紹一下其表,在下一篇中將回到深層次一點(diǎn)的問(wèn)題,歡迎持續(xù)關(guān)注。
???????????????? END ????????????????