在c++中,以类.虚函数等为代表的数据抽象功能一直是c++的核心与难点.我认为c++的抽象应该是指:从我们需要解决的问题出发,在与该问题相关的一组关联对象中提取出主要的或共有的部分――说简单一点,就是用相同的行为来操作不同的对象.
1. pop3.smtp需要的底层接口很简单.除了连接,仅需要发送.接收一块数据的功能 【程序编程相关:在C#中使用ADO.Net部件来访问Ac】从提出问题到找出与该问题相关的对象,这是一个互动的.反复的过程.在对相关对象的抽象中,随着认识的深入,我们可能会修改最初的目标,而最初目标的修改又可能使一组新的相关对象被加入进来.如:假设现在要设计一个基于广域网的邮件服务器,首先可能需要通过socket对底层协议进行封装,为高层的pop3.smtp协议提供一组标准的接口.开始为了使问题简化我们可能计划只封装tcp/ip协议,不过基于以下两点我们有理由修改最初的需求: 【推荐阅读:C#数据库事务原理及实践(1)】
现在决定修改需求,除了tcp/ip协议,还要支持一些其他的的常用协议.通过对最初目标的修改,除了tcp/ip协议对象,又会有一组相关的协议对象被加入进来.我们可以很容易从这组相关对象中提出共有的部分,将他抽象到另一个公共对象中.当然,根据具体应用环境不同,这可能并不是最佳方案. 【扩展信息:实现DataList和Repeater控】2. 用socket进行网络编程,大多数常见协议间的差别很小,有许多都仅仅只是初始化与连接不同而已我们只需要做很小的努力就可以兼容大多数常用协议(如:atm.ipx.红外线协议等).c++中常规的抽象是在一组相互间有“血缘”关系的类中展开的.如:class parent{virtual ~parent(){};virtual void getvalue(){ .... };virtual void test(){ ... };};class child1 : public parent{virtual ~child1(){};virtual void getvalue(){...};virtual void test(){ ... } const;};class child2 : public parent{virtual ~child2(){};virtual void getvalue(){...};virtual void test(){ ... } ;};(顺便说一句,child1::test() const 不是基类 parent::test() 的重载.... 下一页