面向对象的设计思想是基类要简单,几乎啥也不干才好,派生类不断的去扩展它,加入新的功能。
我今天觉得TShape类不满足要求,我想要它能够相应OnClick事件,并且有一个标签能够显示文字。我决定扩展它,写个组件从TShape继承。
正常的想法就是我要扩展功能,写出新的代码出来实现我要的功能,而这些功能都是TShape所没有的。
但是查了一下实现方法,发现完全不是这样,恰恰相反。这些功能基类全部都有,一直可以甚至追溯到TContol。我自己实际上什么也不需要干,仅仅就是把基类已经实现但是声明为Private的东西重新声明为public或者published就可以了,几乎不用写别的什么代码。
这能叫继承吗?实在是非常奇怪。
基类实现了大部分的所有功能,然后隐藏起来,派生类实际上要做的就是放开这些功能,作些重声明就可以了。
我承认,这种实现方式,对开发人员非常方便,这次这个新组件几乎没有几行新代码就完成了。但是这种思想我觉得有些怀疑。
我今天觉得TShape类不满足要求,我想要它能够相应OnClick事件,并且有一个标签能够显示文字。我决定扩展它,写个组件从TShape继承。
正常的想法就是我要扩展功能,写出新的代码出来实现我要的功能,而这些功能都是TShape所没有的。
但是查了一下实现方法,发现完全不是这样,恰恰相反。这些功能基类全部都有,一直可以甚至追溯到TContol。我自己实际上什么也不需要干,仅仅就是把基类已经实现但是声明为Private的东西重新声明为public或者published就可以了,几乎不用写别的什么代码。
这能叫继承吗?实在是非常奇怪。
基类实现了大部分的所有功能,然后隐藏起来,派生类实际上要做的就是放开这些功能,作些重声明就可以了。
我承认,这种实现方式,对开发人员非常方便,这次这个新组件几乎没有几行新代码就完成了。但是这种思想我觉得有些怀疑。
解决方案 »
- delphi outlookbar 的问题,类似于导航栏的东东,在线等,急!!!!!!!
- 诚聘Delphi工程师(北京)
- 用什么东西来加密数据?
- 头疼了一天的问题,高手来帮忙啊!关于ACCESS数据库。
- 你放我也放,来接哦,马上接帖!
- excelapplication不能单独创建一个excel实例么?
- 把Access数据库*.mdb保存为另一文件,用哪一个类,如何实现?
- 如何得到调用窗体的返回植?
- 鼠标拖动
- 请问高手:如何用clientdataset取存储过程的output参数
- 提个幼稚的问题,delphi string变量和‘’之间的字符和pchar有什么区别??
- TNMHttp该如何初始化,或在delphi6/delphi7中有什么好的控件可向指定的url post数据,并获得响应
-----------------------------------
“编译后仅几个字节”,不过,再加上改变颜色,位置,字体等等属性。编译出来的就不至几个字节了。
如果加上事件的处理,代码就不知道多少了。
再从开发效率上来看,用API来实现是不是就不太合适了。
“面向对象的设计思想是基类要简单,几乎啥也不干才好,派生类不断的去扩展它,加入新的功能。”
这种想法本身就不OO继承的目的是为了复用,不是为了有个好看的“家谱”,
如果功能都在子类实现,要个父类做什么?
多态就是为了解决这种子类的个性化要求的,
如果一味把继承当作扩展功能的手段,等出现“十八代子孙”的局面,也就该崩溃了。VCL已经有些年头了,它诞生的时候,还没有接口这个东西,
事实上有了接口以后,在很多场合都在强调优先使用接口而不是继承。没有什么东西是完美的,VCL也不例外,
不要把它的一些做法当作金科玉律,一味盲从
也不要因为一些历史问题,就把它全盘否定
framework的作用是简化开发,易学易用,兼顾而不是强调效率或简洁
敢整一套framework是很了不起的事情,要兼顾的东西很多,甚至需要改造语言本身,vcl基于Pascal、JDK基于Java、dotNet基于C#,其实大家可以很容易得出一个结论,推出这些framework的都是因为其厂商对语言有掌控权,这也是vcl为什么不用c++来写的原因吧。等楼主看过JDK、dotNet的构架后会发现,他们跟vcl是如此的似曾相识,你就知道vcl的伟大了
大头鸟
等 级:
发表于:2007-12-19 19:36:446楼 得分:0
首先你的认识就有偏差
“面向对象的设计思想是基类要简单,几乎啥也不干才好,派生类不断的去扩展它,加入新的功能。”
这种想法本身就不OO 继承的目的是为了复用,不是为了有个好看的“家谱”,
如果功能都在子类实现,要个父类做什么?
多态就是为了解决这种子类的个性化要求的,
如果一味把继承当作扩展功能的手段,等出现“十八代子孙”的局面,也就该崩溃了。 VCL已经有些年头了,它诞生的时候,还没有接口这个东西,
事实上有了接口以后,在很多场合都在强调优先使用接口而不是继承。 没有什么东西是完美的,VCL也不例外,
不要把它的一些做法当作金科玉律,一味盲从
也不要因为一些历史问题,就把它全盘否定
基类复杂并不会增加应用程序的体积,在程序中,所有从父类继承下来的子类都共享一个父类的空间,子类只是数据不同。
楼主也没有理解TContol的用处,他是有很多方法封装Windows消息的,如果你不想要,可以直接重写,只要从TObject继承下来就可以实现消息循环,但是不能响应Delphi自定义的一些消息,比如:CM_Enter,CM_Exit。TControl会那么大就是Delphi为了实现一些Windows不提供的消息,其实它有点像TComponent类,是一个管理类。Delphi中所有类的基类是TObject,这个很简单,代码很少,不过大部分是汇编。