关于学习一种应用程序开发框架——谈编程的学习

以c/c++为例,在你学习完基本的语法后,书中所说的思想(面向过程、面向对象、自顶向下)很难领悟,而且,我相信除了ACMer以外,几乎没有人能接受在学习完几个月乃至一年的编程后,编写出的代码仍然是一个黑白框的界面。从编程兴趣的角度、从思想领悟的角度,先学习一门应用程序的开发库是很有必要的。

1、windows API

说起windows下的应用程序开发库,很多童鞋会自然而然的想到利用windows API、MFC。没错,利用windows API来构建一些业务逻辑是很好的选择,它能让你慢慢的学会自顶向下或者是自下向上的设计一个程序,让你明白模块之间接口的定义和交互,让你知道函数指针的应用之一——回调函数,如果有兴趣,还可以把这些API封装一个自己的小型类库,让它初具面向对象的思想。虽然,这很难具有面向对象的三个特性,封装、继承、多态,但也会体会到代码重用时,只用两行代码就能画一个windows窗口的快感。

2、MFC

MFC是对windows API的封装。MFC通过面向对象的思想,隐去了API的实现细节,这样,程序员可以花费更多的心思在业务逻辑的构建上。但是,正是由于MFC的面向对象思想,让一个新手在学习MFC时很难一下就接受在给出的.cpp文件中,没有main函数的事实。而且,虽然众多MFC学习书籍中给出了类之间的继承关系,但一个新手仍然很难站在一个全局的角度来理解这种继承关系。最终对MFC的初步学习,也只是演变成了对成员函数的调用,与直接学习API的差别倒没有多明显了。

MFC曾在windows应用程序开发中,占有着重要地位。然而,随着对用户界面需求的增加,特别是Aero效果的风靡和Metro效果的宣传以及B/S隐有替代C/S之势,MFC在界面方面的能力缺陷不断的展现。事实上,在visual studio 2003对MFC添加了.net支持和后来添加的Ribbon支持,MFC的代码几乎没有做过大的改动。微软也明确表示windows 7不提倡MFC做界面。或许MFC终将会像window 2000那样退出历史的舞台。

所以,个人认为,从学习的角度和将来找工作的角度,深入学习MFC都是不值当的选择。

3、GTK+

GTK+是一款跨平台的界面开发库,对windows和Linux都有着很不错的支持,也能运行在上述系统的嵌入式设备中。GTK+虽然有个加号,但是却是一个纯c开发库。c++版本名叫GTKmm。开发者也可以将界面开发和业务流程开发分隔进行,即界面的细节改变不会影响到整个业务流程。开发者可以用Glade界面设计器进行所见即所得的界面设计,将界面保存为XML文件的形式。在代码中,读入这个XML文件即可。GTK+2.X的版本对触摸界面的展示上支持的不太好,GTK+3.0虽然有些改进,但是仍不太让人满意。MFC、QT早就有了的Spinner控件,GTK+才刚刚开始支持。而且网上的第三方插件支持比较少,如果想做一个炫一点的界面,只能自己重绘了。

另外还要提一点的是,GTK+所提供的其他功能,比如多线程(创建、管理、线程同步)等,也都是支持跨平台的。这也是GTK++最主要的优势之一。


4、wxWidgets

wxWidgets源于linux下的c++界面开发框架。开发者可以通过wxFormBuilder(也有一些其他的工具,不过没用过)生成界面XML文件,也可以实现类似GTK++的界面和业务流程的分离开发。wxWidgets面向对象思路清晰,初学者不用像学MFC那样去强制自己背下类的继承关系,随着对每个控件的使用,初学者会潜移默化的了解面向对象的思想。wxWidgets的主函数可是要自己写的哦。

5、QT

前面介绍的四款库都是消息驱动机制的。消息驱动机制最通俗的理解就是利用回调函数(就是函数指针),界面通过消息循环来控制,每产生一条消息,就去调用与这个消息对应的消息响应函数。QT除了对消息驱动机制支持外,还提供了另外一种灵活性更强的机制,消息槽机制。与消息驱动机制相比,消息槽机制更像是把两个模块对接在一起,然后传送任意你想传送的信息。

大名鼎鼎的QT,是大名鼎鼎的Nokia公司的产品,是一款跨平台、技术支持强劲的界面开发框架。它可以应用在PC、Android设备、或者是其他嵌入式设备。也许QT本身自带的很多组件并不怎么好看,但是在技术社区上由其他第三方人员开发的组件,才是QT作为一个界面开发最诱人的地方——大量、强悍的第三方组件支持。QT封装、继承的思想也十分清晰,很适合理解面向对象思想和模块化编程。

6、WPF+XAML

素未谋面,没有过多的了解。XAML是微软自己发明的一个可扩展应用程序标记语言。WPF是微软的.Net应用程序框架。大概思想也是利用XAML设计界面,然后编译成BAML,再被WPF程序调用。.Net不是c#,.Net的底层是COM(Component Object Model)技术。也就是说,通过调用COM组件,开发者可以用VB、c/c++,c#来完成.net程序的开发。所以c#包含于.Net。

上述都是针对C/S模式界面的开发。现在B/S模式也越来越流行了,与云相结合,很多厂商都说把软件装到云上,然后本地只通过浏览器就能够操作这些软件。这从根本上解决了跨平台的问题,随着HTML5、Ajax的普及,用户体验也在不断的飙升。如果只是做一个小型的用户界面展示的话,也没有必要大费周章的去学JSP、PHP什么的后台语言,c语言也支持这些功能的。可以通过c语言利用CGI+Apache实现。当然,如果想尝试利用c语言cgi搭建一个大型的网站,还是不要考虑了吧,因为它没有得到普遍认可的原因就是运行效率和速度都很低…

出去工作的话,做一个界面是一个程序员必须具备的基本能力之一。但是只会做界面的话,难免让人看轻。从技术的角度、算法的角度,都还有很多需要深入的学习和摸索。界面只是一个让自己的程序增加效果的一个小手段。

上述内容全都由自己的体验得来,有些框架比如wxWidgets学习的很不深入,所以难免会有一些谬误,请大牛一笑了之,莫过分深究。只是把这些框架大概的特点整理出来,方便有心人进行更深入的学习。

原文地址:https://www.cnblogs.com/raymon/p/2265399.html