首先,在写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这样面向过程的缺点ÿ