在重构ZUI中对用户界面实现的思考

    首先,在写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="xxxxxx";搞定,当然也可以全局变量,不过这得一个个单独写出来。面向过程还有个比较严重的缺点,不能获取其它页面的属性,当然还是可以全局变量解决,当然这是也得一个个单独写出来。

 写这么多不是说哪种更好,而是需要因地制宜,具体情况具体分析。面对arduino pro mini 这样配置极低 ,代码撑死几千行的来说超轻量级的ZUI选择面向过程还是挺合适的。而在越复杂越重量级的工程上一个可维护性直接让面向过程狗带。

未完待续。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值