在重構ZUI中對使用者介面實現的思考

2021-08-27 16:28:19 字數 1148 閱讀 7845

首先,在寫zui的時候對程式設計思想不能很好的理解,只知道物件導向以及面向過程。現在回頭看以前寫的無疑是面向過程,當然最後對於整個**封裝成類,這個不算這是為了便利性。在重構中認識這種面向過程好處主要是是幾點。首先節省記憶體,這點在像arduino pro mini rom32k ram2k 這類配置極低的微控制器來說顯得尤為重要。在面向過程中控制項的繪製是通過函式來實現的,例如zui的text函式text(0,0,"hello world");所有的變數都屬於自動儲存,在函式結束完即釋放,面向過程在這點上對物件導向有著天生的優勢。物件導向new屬於動態儲存,離開了這個函式它還是存在需要手動釋放。然而因為這是使用者介面不能乙個頁面結束就給釋放了,如果釋放了下次需要進入這個會看到一片空白或者亂碼,因為原來記憶體位址上的資料已經釋放現在這裡要麼是空的要麼被其他的資料佔了。所以如果是物件導向在執行時所有頁面,控制項的屬性儲存在記憶體中就會造成記憶體的大量占用,而即使是面向過程的zui光乙個空殼介面就占用到30%的記憶體。

面向過程的優勢其次是寫法簡單直接在home的函式內text(0,0,"hello world");,在重構時我是考慮過改物件導向的,想象一下首先需要

page* home =new page(0);//0是頁面編號

text* text0 = new text(0,0,"hello world",home);//home是父控制項

text肯定是page的派生類不用說,其它控制項類也是,統一介面。這樣首先你需要取名,因為不進行釋放,所以這個頁面控制項的取名還不能其它頁面衝突豈不是很麻煩.而且還需多打很多字母,其實我覺得這個優勢有點強行了。

再來說說像zui這樣面向過程的缺點,事件的發生必須寫在頁面函式內部,而這樣控制項的繪製與事件的發生放在一起有個極大的缺點那就是不便於維護,一堆**堆在一起,並且因為沒有物件的封裝,想要找到相應的變數變得更加困難或者根本連宣告都沒有直接就寫上去了還得乙個乙個修改,如果物件導向直接text0->text="******";搞定,當然也可以全域性變數,不過這得乙個個單獨寫出來。面向過程還有個比較嚴重的缺點,不能獲取其它頁面的屬性,當然還是可以全域性變數解決,當然這是也得乙個個單獨寫出來。

寫這麼多不是說哪種更好,而是需要因地制宜,具體情況具體分析。面對arduino pro mini 這樣配置極低 ,**撐死幾千行的來說超輕量級的zui選擇面向過程還是挺合適的。而在越複雜越重量級的工程上乙個可維護性直接讓面向過程狗帶。

未完待續。。。。。

實現介面事件,在介面中實現事件

可以在介面中宣告事件,然後在類中實現該事件的引用。在為方法訂閱事件時,可以訂閱介面宣告的事件,也可以訂閱類中的事件。class inte ceevent static void handlershapechanged object sender,customeventargs e e.area pu...

在WPF的使用者執行緒中更新UI介面

wpf中ui 執行緒佇列由 dispatcher 來管理和排程,所以當使用者執行緒中更新 ui時,必須通過 dispatche 來排程,下面這個小例子將給使用者展示如何在使用者執行緒中更新當前的時間.前台的xaml 如下 後台的主要 如下 申明乙個 用於想 ui更新時間 private delega...

在wpf的使用者執行緒中更新ui介面

執行緒相關 20071124 wpf中ui執行緒 佇列由dispatcher來管理和排程,所以當使用者執行緒中更新ui時,必須通過dispatche來排程,下面這個小例子將給使用者展示如何在使用者執行緒中更新當前的時間.前台的xaml 如下 後台的主要 如下 申明乙個 用於想ui更新時間 priva...