GUI開發(fā)必須使用面向?qū)ο缶幊陶Z言

最近看到網(wǎng)上有不少用C語言開發(fā)的GUI項目,關(guān)注收藏的人還比較多。但我想說C語言不適合開發(fā)GUI應(yīng)用程序,強行使用多半是在造垃圾。我要說明一個觀點:GUI開發(fā)必須使用面向?qū)ο缶幊陶Z言。

GUI開發(fā)一個很重要的內(nèi)容是對各個概念建立模型。比如說按鈕、輸入框、窗口、多選框、滾動條等等控件,你要知道它長什么樣子、有哪些特點、有什么功能。有了模型之后,就可以根據(jù)它創(chuàng)建實例,生成各種各樣的控件。在面向?qū)ο笏枷胫?,這叫做“類和對象”。對象是類的實例,類是對象的模板。對象是對客觀事物的抽象,類是對對象的抽象。

如果用C語言編寫GUI程序,代碼可讀性極差。指針結(jié)構(gòu)體滿天飛,手動調(diào)用構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝函數(shù)來實現(xiàn)面向?qū)ο蟮奶攸c,函數(shù)名特別長,不看文檔不知道它是干什么的。手動調(diào)用容易忘記,函數(shù)名太長記不下來,也容易忘記。

控件的設(shè)計是復(fù)雜的,好在面向?qū)ο罄镉小胺庋b”的概念。它隱藏了控件內(nèi)部復(fù)雜的業(yè)務(wù)邏輯,對外提供簡單友好的接口。使用者無需知道實現(xiàn)細節(jié),只需要知道類中公開的成員變量、成員函數(shù)就可以使用它了。類的聲明定義和它的實現(xiàn)分離,類的數(shù)據(jù)和它的功能結(jié)合,是高類聚、低耦合的優(yōu)秀設(shè)計。就算沒有文檔,開發(fā)者看一看類的聲明定義就大概可以知道它的功能。

如果用C語言操作控件,內(nèi)部結(jié)構(gòu)隨意修改,大大降低了安全性。編程的時候代碼智能補全也不好用,開發(fā)效率非常低。字符串的操作甚至停留在char*級別,處理中文還要解析編碼類型,一點也不方便。

模型之間的關(guān)系非常復(fù)雜。有的模型高度相似,普通按鈕、單選按鈕、多選按鈕都是點擊后觸發(fā)效果的控件;文本輸入框、數(shù)字輸入框、日期輸入框都是輸入類的控件;滾動條有水平的、垂直的兩種類型。如果給每一個模型單獨寫一套代碼,費時費力不說,還不容易維護。為了提高代碼的復(fù)用程度,可以使用面向?qū)ο笏枷肜铩袄^承、派生、父子”這些概念。

如果用C語言編寫GUI框架,代碼特別長。因為不同控件的微小差異就要寫幾套差不多的代碼。在原有控件的基礎(chǔ)上開發(fā)自定義控件也不方便,破壞了代碼的封裝性,一不小心就出錯了。

有些功能高度相關(guān),可以復(fù)用相同的接口。比如要向字符串末尾添加字符、字符串、字節(jié)數(shù)組。這三種功能可以使用相同的函數(shù)名。設(shè)置控件內(nèi)文本這個功能,成員函數(shù)名都是setText?!昂瘮?shù)重載、多態(tài)性”在這里體現(xiàn)得非常明顯,進一步提高了代碼復(fù)用程度。

如果用C語言寫這些功能,不同的功能要對應(yīng)不同的函數(shù)。隨著功能越來越多,函數(shù)名就會越來越長。對象之間往往存在一對一、一對多、多對一的復(fù)雜關(guān)系,連C++都不好處理,C語言怎么好做?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容