免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2880 | 回复: 8
打印 上一主题 下一主题

各位有这种编程习惯吗?接口类 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-28 16:36 |只看该作者 |倒序浏览
比如,你要写一个类Session,绝对不是为继承、多态使用。就这么一个Session类。

于是,先写一个接口类 ISession,里边N个纯虚函数;
再写class Session : public ISession
{
public:
  实现那N个纯虚函数;
private:
  自己的数据;
};


有哪位大师推荐过这种写法?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
2 [报告]
发表于 2011-05-28 16:45 |只看该作者
java里面貌似很流行……
动不动先搞一个 IXXX 再说……
也不管 IPoint, IInteger 有无意义……

论坛徽章:
0
3 [报告]
发表于 2011-05-28 16:53 |只看该作者
那C++ 呢
比较赞同你的话,动不动就先搞个IXXXXX,看着好烦,美其名曰不暴露数据
MB的,现在被强迫这么写,cao啊

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2011-05-28 16:57 |只看该作者
作为动态库给别的模块使用,这样做还是有必要的

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
5 [报告]
发表于 2011-05-28 23:27 |只看该作者
回复 3# okocha-jay

要不暴露数据, private就足够了。
要不依赖布局, 二进制兼容, C语言里面有opacity type, C++有 impl(其实与opacity type差不多一回事), 也足够了。
虚函数是为了多态使用的。

论坛徽章:
0
6 [报告]
发表于 2011-05-29 01:53 |只看该作者
貌似这个很流行啊, 我看到个c++项目都是这样写的
这样方便维护, 以后想替换的时候, 方便啊

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
7 [报告]
发表于 2011-05-29 02:11 |只看该作者
回复 6# fanhed

你说到重点了。 维护(演变)时, 究竟是替换还是增加

就以lz的例子来说, 演变的过程中:
1. 是否有可能会有另外的 session-like 与现有的Session同时存在
如果只有一种 session , 改变的是这一种 session 的实现方式, 那就没必要。

2. 是否有代码需要以相同的方式操作这些不同的 session
即使存在多种 session , 如果没有代码需要以相同的方式操作它们, 也没有必要用 ISession。
f 用 sessionA, g 用 sessionB , 关 ISession 什么事?

只有两者都为真是, 才有必要一开始就设计 ISession, 让 f,g 用 ISession。
f,g 的代码就可以被以后产生的新的 SessionA, SessionB 复用。


即使一开始没有预见到这种需求, 以后改也不是不可能:
class Session { ... };
f(Session& s);
g(Session& s);

可改为:
class ISession;
class Session { ISession* s_; };
class SessionA : public ISession { ... };
class SessionB : public ISession { ... };


对那种二话不说, 直接 ISession 开搞的人……  无语……

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
8 [报告]
发表于 2011-05-29 06:57 |只看该作者
我就是這麽做,然後再做一個 c  wrap,哈哈。

论坛徽章:
0
9 [报告]
发表于 2011-05-29 12:13 |只看该作者
多人合作的时候,需要设计代码的统一动作流程的时候,需要,简单的测试代码,没必要
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP