测试积点老人 发表于 2018-12-20 16:27:11

GUI程序里的类

GUI程序里很多用来定义窗口的类都只有一个实例(比如主窗口只有一个,配置窗口只有一个,等等),但却不得不以类来定义,这是不是有悖于类的本意? C++ Programming Language (Special 3rd Edition) 这样定义类:

A class is a user-defined type.


那么什么是type呢?

A type is a concrete representation of a concept.

像int,float这些就是type。很显然,那些用来定义主窗口、配置窗口的类已经脱离了本意。事情到了这种地步,难以说清的是,到底是程序设计语言(C++, Java, C#, ...)对编写GUI程序的支持不够,还是操作系统提供的GUI接口存在不足?前面说类是一种概念的具体表现,同时,类也是一类对象的抽象,包括属性和行为。属性的抽象经由其他的类(或type)来表达,行为的抽象经由过程(方法或函数)来表达。这又让我想到一个类似的问题:只在一处使用并且只被使用一次的过程有没有必要独立为一个方法或函数?定义一个新的类的冲动无非来自于以下两点:
[*]现有的类不能满足你要创建的对象的属性;
[*]现有的类不能满足你要创建的对象的行为。
属性这一点还好,毕竟还有struct这样的结构可用。为了要增改行为,一般通过继承和组合,从而产生新的类。像JavaScript这样的语言倒是灵活得很,可以动态地增改一个对象(JavaScript不对object和class的概念作明显的区分)的方法和属性(后来我知道这叫动态语言)。继承和组合用多了会腻。像C++,Java这样基本是一个套路的语言,处理这类问题时实在又没有其他办法。不妨考虑编写GUI程序时的一个问题,比如要做自定义风格的button,用C++的话,一般是从现有的某个button类派生,然后提供新的Paint事件处理方法,同时添加一些额外的属性来保存新风格中用到的图片等资源。这种做法还算合乎情理,你的新button应该会有很多的实例。但是像主窗口这些实例只有一个的情况,我实在不甘心专门给它定义一个新的类。


页: [1]
查看完整版本: GUI程序里的类