Chinaunix首页 | 论坛 | 博客
  • 博客访问: 195850
  • 博文数量: 111
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 1240
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-07 07:46
文章分类

全部博文(111)

文章存档

2015年(2)

2014年(1)

2011年(1)

2010年(7)

2009年(100)

我的朋友

分类: LINUX

2009-08-23 08:24:49

转载时请注明出处和作者联系方式

文章出处:http://www.limodev.cn/blog
作者联系方式:李先静

在glib对象系统中,一般的类都是从Gobject类继承过来的。尽管glib是用C语言开发的,它却几乎支持所有的面向对象的特性。这里不谈glib的面向对象机制,只是说说关于GObject对象属性的一些问题。

在OOP中,对象的属性一般用成员变量来表示。编程高手常常告诫我们,把对象的属性隐藏起来,用成员函数去访问,可以减少与使用者之间的耦合,同时可以提高程序的健壮性。

实际上,仅仅是把对象的属性封装起来,有时是不够的。比如,你无法通过基类的指针去访问子类的属性。要做到这一点,需要把这些 setter/getter函数实现成虚函数,在子类中去重载它们。不过,这样做会让基类的接口显示很庞杂,而且实际上你也无法预知子类中的会有哪些属 性。

另外一个更重要问题是,有时候外部对象可能会关心某个对象的属性改变。比如,像对话框可能关心其上控件的属性的变化,控件的属性变化时,对话框需要做一些调整。如果能实现一种机制支持这种功能将有很大用处。

Gobject定义了两个函数(get_property/set_propery),用于存取对象的属性,在子类中重载这两个函数就行了,不用实现一大堆setter/getter函数,同时它提供了一种对象属性监视机制,在对象属性改变时通知相关关注者。

阅读(597) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~