挑战基于接口的编程方式

guanwl 2007-02-26 04:22:14
http://blog.csdn.net/guanwl/archive/2007/02/13/1509031.aspx

我把文章前面的内容贴出来, 有兴趣的朋友过去看一看。多提意见。

1.程序员的梦(为什么要进行仿基因编程)
1.1.自由的双向的功能扩充的梦(程序员之盼)
需求的变化在编程工作中非常常见。程序员常常被这样的变化搞的顾此失彼,加班加点。“要是我的程序能够适应这种经常的变化就好了”,程序员们常常这样想。
1.2.自由的组合梦(程序员之惑)
在编程工作中常有这样的情况,要把两个或多个功能组合,以实现更为强大的功能。也会有这样的情况出现,一些功能需要组合,但怎样组合却不是在程序发布时所能确定,而要在程序的使用中确定。怎样让这样的组合能够安全,快捷,直观,易用。是一个很有挑战性的工作。“不就是把已有的功能合并一下吗,怎么就这么不顺利呢?”程序员常常会这样问。
1.3.直截了当的错误处理的梦(程序员之叹)
传统的错误处理采用这样的方式:对于每一种错误定义一个错误ID,并再对应每一个错误ID做一个文本描述。这样的错误管理是繁琐而枯燥的。这样的错误处理模式对于客户程序员来说更是索然无味,他们需要一个一个的记这些错误ID。“这个错误提示怎么就这么不清楚呢!”程序员常常这样叹。
1.4.解梦
要是做到以上这三点,而且还能安全,高效,简单就好了。本文所讲的仿基因编程就是这样的一个安全,高效,简单的方法。下面我分几个小的片断来为大家说明仿基因编程的实现方法。(原谅我用华丽的词做标题吧)
...全文
881 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyd 2007-03-30
  • 打赏
  • 举报
回复
其实我觉得你的文章没有必要再写了

看到标题,我们关心的是“基因编程”,看了好长时间,才发现,楼主没有取错名字,真的是“仿基因”

就我对编程语言的理解,应该要直接了当,简单的问题,有简单的解决方法,复杂的问题也尽量采用简单的解决方法。
对于故弄玄虚的技法,把简单事物复杂化的编程手法,我认为不是编程语言本身的局限,就是用错了地方。


这让我想起伪随机数算法来,曾经有一个多达15个步骤的算法,每一个步骤都采用独特的方式来混淆数据,并且流程从不固定的某个步骤开始,如此看似复杂的一个算法,其产生的随机数序列,循环周期没有上千的。远不如简单的线性同余法有效。
sss_free 2007-03-29
  • 打赏
  • 举报
回复
你挑战接口方式干么?接口不过是一种形式,说明不了啥,或者我没看懂你的文章?
ProjectDD 2007-03-27
  • 打赏
  • 举报
回复
C++啊,不是C#嘛
ProjectDD 2007-03-27
  • 打赏
  • 举报
回复
看一喃,UP
pankun 2007-03-19
  • 打赏
  • 举报
回复
抽像的倒退
cccbuiler 2007-03-16
  • 打赏
  • 举报
回复
支持一下。写的不错。
e_wail 2007-03-16
  • 打赏
  • 举报
回复
你的模型就是个自以为是的模型,得罪了,对不起
e_wail 2007-03-16
  • 打赏
  • 举报
回复
你能告述我你做过几个项目吗
guanwl 2007-03-16
  • 打赏
  • 举报
回复
关于错误处理,e_wail这位朋友可能是光注意了“直截了当”,没有有注意到还要应对不断增长的系统。
guanwl 2007-03-16
  • 打赏
  • 举报
回复
再次感谢,e_wail的精彩回复。
#ifndef ERROR_MSG_001
#define ERROR_MSG_001 "ERROR:ERROR MSG 1 FILE:%s,LINE:%d\n",__FILE__,__LINE__
#endif

#ifndef ERROR_MSG_002
#define ERROR_MSG_002 "ERROR:ERROR MSG 2 FILE:%s,LINE:%d\n",__FILE__,__LINE__
#endif

这样的定义,有这样一个说不过去的地方。那就是你必需是要先知道要有什么错误。而我们的整个模型要求可以不停的扩充。你是没有办法定义那些以后扩充出来的内容的错误的。
另外,把文件名和行号,提示出来。这对于有这个程序源码的人才会有用,而没有源码的人。得到一个文件名和行号,是没有用的。
我想问一下w_wail这位朋友: 依你的方法,能真的能够应付将来可能会出现的错误情况吗?我没有看出来。

答ELEMENT就是个废物:
子类型向是转型会丢失子类型信息。“能被鉴别身份”是用来找回那些丢失了子类型信息的。


请其它的朋友也发表一下看法。在这里先谢了。
e_wail 2007-03-15
  • 打赏
  • 举报
回复
to guanwl()

guanwl:“是对编程中所能遇到的所有概念的高度抽象。它被抽象的只剩下了一个特性:能被鉴别身份”

看了你这话,我想比较刻薄的说一句:那就没必要抽了。
因为你这样设计就是ELEMENT这父亲只要求自己儿子认识
名字就行了,其他也就没啥本事了,你看你文章底下的阐
述,ELEMENT就是个废物,几乎没有使用价值。

既然你说ELEMENT是高度抽象的基类,那我得跟你讨论下
“抽象”了,构造一个高度抽象基类的过程就是一个
“求同存异”的过程,将不同子类的共性存放于基类之中,
从而使得基类成为一个共同遵守的接口,你看你ELEMENT抽
成这样也就说明他跟底下子类没啥共性,从软件设计角度看
属于三个不同的功能模块,想统一它们那我们可以将它们组
合成组件,你底下设计用到大量的模板就是对我观点正确性的
最大证明。
e_wail 2007-03-15
  • 打赏
  • 举报
回复
to guanwl()
要是只要求明示错误出处
你觉得是这样好:
class ErrorInfo:public Data
{
public:
unsigned int id; //一个标号
string info; //错误的详细说明
WHO
};
还是我在一个.h文件中这样好:
#ifndef ERROR_MSG_001
#define ERROR_MSG_001 "ERROR:ERROR MSG 1 FILE:%s,LINE:%d\n",__FILE__,__LINE__
#endif

#ifndef ERROR_MSG_002
#define ERROR_MSG_002 "ERROR:ERROR MSG 2 FILE:%s,LINE:%d\n",__FILE__,__LINE__
#endif
起码我觉得在系统内存开辟方面我的优于你的
e_wail 2007-03-14
  • 打赏
  • 举报
回复
对你的文章提出以下两点疑问:
1.在ELEMENT类用WHO的存在有必要吗?派生向上映射的功能不能完成WHO的定位功能吗?
2.“直截了当的错误处理”,有必要那样处理吗?
这样处理(class Element:public ErrorInfo)这样不是更
能实现错误信息的工厂化管理吗?
guanwl 2007-03-14
  • 打赏
  • 举报
回复
“直截了当的错误处理”,有必要那样处理吗?
补充回答:
如果用的的方法,ErrorInfo自己的类型不能表明这个错误的出处。
guanwl 2007-03-14
  • 打赏
  • 举报
回复
感谢e_wail的精彩回复:
关于你所提的问题我作如下的回答,不知道能不能为你所认可。

在ELEMENT类用WHO的存在有必要吗?
答:element是company,processor,和data的基类。因为who这个功能不仅data要用,其它两个也要用。

派生向上映射的功能不能完成WHO的定位功能吗?
答:向上转型的过程中会丢失子类型信息,而who正是为找回这些子类型信息而设的。

“直截了当的错误处理”,有必要那样处理吗?
答:错误要随着,程序的增长而增长,并且新增出来的错误要能被使用者一目子然,而不用先去读你的开发文档。
如果不考虑这个,你所用的方法是要好的多。
laiwusheng 2007-03-13
  • 打赏
  • 举报
回复
6
iambic 2007-03-02
  • 打赏
  • 举报
回复
花心思的原创要支持下。
qhgary 2007-03-02
  • 打赏
  • 举报
回复
4
lidongri 2007-02-26
  • 打赏
  • 举报
回复
拜读了大哥您的文章
感觉不错
只是有点深奥,非我等能迅速理解
从里面我的感觉就是类似于设计模式一样
将现实中的方法进行归纳和总结
也就是所谓的经验复用
期待大哥能继续深化
lidongri 2007-02-26
  • 打赏
  • 举报
回复
2
加载更多回复(1)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧