七     月     天
     本站首页    管理页面    写新日志    退出


«July 2020»
1234
567891011
12131415161718
19202122232425
262728293031


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接


Blog信息
blog名称:七月天
日志总数:19
评论数量:84
留言数量:0
访问次数:182854
建立时间:2004年11月4日




[设计模式]设计模式(7)--原则1:对接口编程
读书笔记,  软件技术

torrent 发表于 2005-8-8 22:46:20

类继承与接口继承 理解对象的类与对象的类型的不同非常重要。 对象的类定义了对象如何实现,类定义了对象的内部状态及操作的实现。对象的类型所指的仅仅是它的接口—即类可以响应的请求的集合,对象可有多个类型,不同类的对象可以拥有同一类型。 当然,类和类型之间有更紧密的关系。因为类定义了对象可执行的操作,因此,类也定义了对象的类型。当我们说对象是类的一个实例,实际上暗示了此对象支持类所定义的接口。 C++和Eiffel语言用类同时来描述对象的类型和对象的实现。Smalltalk语言并不声明变量的类型,因此,编译器并不检查那种是变量类型的子类型的变量的对象类型。发送消息时需要检查接受者的类,但当接受器是特定类的实例时,则不需检查。 理解对象继承和接口继承(或子类型)的区别亦十分重要。类继承定义对象的实现是根据另一个对象的实现,简单的说,它是一种用于代码和表示共享的机制;与之比较,接口继承(子类型)规定了对象何时用来替代另一个。 很容易混淆这两个概念,因为多数语言对此不作区分。在C++和Eiffel中,继承意味着接口继承和实现继承。C++中继承一个接口的标准方式是从一个具有(纯)虚成员方法的类中公开声明继承。纯接口继承近似于C++中的从纯虚函数公开继承。在Smalltalk中,继承仅意味着继承的实现,你可以将任何类的实例分配给一个变量,只要实例支持在该变量的值上执行操作。 尽管大多数的语言都不支持接口继承和实现继承的区分,人们在实践中对此进行了区分。Smalltalk程序员通常将子类型当作子类来处理();C++程序员通过抽象类所定义的类型来操作对象。 很多设计模式都依赖于这种区分。例如,责任链对象必须有一个公共类型,但通常不共享一个公共实现。在合成模式中,元件定义了一个公共接口,但合成器通常定义一个公共实现。命令模式、观测者模式、状态模式、和策略模式常常要实现纯接口的抽象类。 对接口而非对实现进行编程 类继承主要作为通过重用父类的函数而扩展应用的功能的机制,它可从旧对象迅速生成新对象,让你从已存在的类中继承你所需要的功能,从而得到新的实现。 然而,执行重用不需要做这么多工作。继承的能力包括用相同的接口(通常从抽象类中继承)定义对象族,这也很重要。为什么呢?因为多态性依赖于它。 当合适的使用继承时,所有源于抽象类的类都共享其接口。这说明子类仅仅增加或重载操作,并不隐藏父类的操作。所有的子类都能向对抽象类的接口的请求作出响应,因此,他们都是抽象类的子类型。 从抽象类所定义的接口单独地操纵对象有两个好处: 1.  只要对象使用客户所预期的接口,客户不必关心对象所使用的详细类型。 2.  客户不必关心实现这些对象的类,客户所要了解的仅仅是定义接口的抽象类。 这样,减少了子系统间的实现依赖性,导致了以下的可重用的面向对象设计的原则: 为接口而不为实现编程 不要为特定具体类的实例声明变量,而应该向抽象类定义的接口提交。你将发现,这也是本书所讨论的设计模式的普遍主题。 当然,系统中有时必须实例化具体对象(即详细描述特定实现),创建性模式就可实现这样的功能。通过对对象创建过程的抽象,这些模式让你以不同方式将接口与其实现相联系,从而透明地实例化。创建性模式可以确保你的系统的编写是根据接口而不是实现。


阅读全文(5868) | 回复(-2) | 编辑 | 精华
 


回复:设计模式(7)--原则1:对接口编程
读书笔记,  软件技术

小微(游客)发表评论于2007-5-11 15:50:17

BU CUO  HAHAHA


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.031 second(s), page refreshed 144422037 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号