名可名,非常名--谈接口和实现
来源:互联网 发布:免费一元购源码 编辑:程序博客网 时间:2024/05/29 07:58
名可名,非常名--谈接口和实现
黄国强 2009-9-22
“名可名,非常名”出自《老子》第一章,解释有多种,我找了一个请见[1]。在这里我借这段话来引出接口和实现的话题。
平时我非常喜欢举的例子是桌子。比如,我们把桌子设计成一个类。
问题很快出现了,我们应该给这个桌子增加什么成员函数呢?加上有几条腿的查询函数?加上是什么颜色的查询函数?感觉正好应了“名可名,非常名”这句话。我们根本无法用类来表达我们生活中这样一个常见的概念。
这个问题产生的原因是什么呢?
我认为,问题出在我们只从一个角度看这个问题。这里需要的是两个角度即,一个是使用者的角度(即,名可名),一个是实现者的角度(即,非常名)。有两个用户,一个需要书桌(desk),一个需要餐桌(table)。从这两个使用者的角度可以获得两个接口类IDesk和ITable,从实现者的角度可以得到具体类CTableImplement。CTableImplement 从二者继承。代码如下。
//负责表示书桌
class IDesk
{
...
};
//负责表示餐桌
class ITable
{
...
};
class CTableImplement
: public IDesk
, public ITable
{
...
};
任何接口类的设计都是不能孤立进行的,一定要放在一个具体环境中。桌子这个例子同样如此。观察一个使用者如何使用者张桌子(比如用来当饭桌),从这个角度我们很容易的给ITable定义出成员函数。一张桌子到底被别人怎么用,桌子本身是无法知道的。所以具体类 CTableImplement的设计无需从使用者的角度来考察。仅仅需要按照设计者的常识设计桌子即可,无需关注使用者。设计完成后,再去实现从IDesk和ITable继承的虚函数。这点与接口设计存在非常明显的不同。
- 名可名,非常名--谈接口和实现
- 道可道,非常道;名可名,非常名
- 名可名,非常名——两种”软件中断“
- 关于继承和接口的一个非常有趣的比喻
- 关于继承和接口的一个非常有趣的比喻
- 定义和实现接口
- 6.3 接口和实现
- 接口和实现
- 实现和接口
- 接口和实现类
- 接口和实现类
- 接口和实现类???
- 接口和实现类
- 定义和实现接口
- 接口测试—-中篇,通过django实现一个非常简单的记事本接口
- SQL语句实现附加数据库,可以改数据库物理文件名,数据库名,非常方便
- Java根据包名获取指定接口的所有实现
- Kotlin编程之接口和实现接口
- [GoF设计模式]Decorator模式和Observer模式的C++实现
- Python线程编程(三)同步队列
- FreeRadius client 安装
- dos命令
- js + dwr 分页
- 名可名,非常名--谈接口和实现
- .net Web Form问题多多
- linked a small .exe
- 探讨找工作问题
- Novell:新的虚拟化解决方案AlacrityVM
- gcc 中 –o 的用法
- [JS]年月日三下拉框无刷新联动
- seo 优化 诗歌‘百雅歌’
- 第二章 函数知识总结