51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1947|回复: 0
打印 上一主题 下一主题

[原创] GUI程序里的类

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:22
  • 签到天数: 402 天

    连续签到: 3 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-20 16:27:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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应该会有很多的实例。但是像主窗口这些实例只有一个的情况,我实在不甘心专门给它定义一个新的类。




    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-25 07:02 , Processed in 0.065058 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表