VisualC 泛型编程实践
2008-04-09 04:09:41来源:互联网 阅读 ()
示例
先来简单介绍一下我所用到的例子:一个简单的商务进销存基本应用(不必关注细节),它应该包含:职员(Employee)、产品(Product)、仓库(Storage)、往来单位(Supply)、帐户(Account)、单据(Bill)等等,由于每种信息均应有唯一标识,所以我在这里选用STL中的map来表示如下(为了说明简单起见,我们只列两种):
std::map<size,Employee*> itsEmployees;
//职员表
std::map<size,Product*> itsProducts;
//产品表
..
第一步:实现
我们将以上map放入多(单)文档应用程序的文档类中,很显然,我们必须对每一个表至少提供以下三种最基本的操作:添加新成员函数、删除指定成员函数、获取指定成员函数。
对于添加新成员,我们可以实现如下:
size addAccountMember(Account* e); //添加帐户
{
//获取下一个可用的ID号
size id=getNextAccountID();
itsAccounts[id]=e;
return id;
}
size addEmployeeMember(Employee* e);//添加职员
{
//获取下一个可用的ID号
size id=getNextEmployeeID();
itsEmployees[id]=e;
return id;
}
..
接下来的删除方法仅有一个size(唯一标识)参数,实现如下:
void delAccount(size ID); //删除指定帐户
{
itsAccounts.erase(ID);
}
void delEmployee(size ID); //删除指定职员
{
itsEmployees.erase(ID);
}
..
获取指定成员的方法如下:
Account* getAccountMember(size ID)
//获取指定帐户
{
return itsAccounts[ID];
}
Employee* getEmployeeMember(size ID) //获取指定职员
{
return itsEmployees[ID];
}
..
另外,我们还要为每一个表提供一个获取下一个可用ID的成员函数:
//获取下一个可用职员号
Size getNextEmployeeID()
{
if (itsEmployees.empty())
return 1;
std::map<size,Employee*>::iterator it=itsEmployees.end();
--it;
return it->first 1;
}
//获取下一个可用帐户号
Size getNextAccountID()
{
if (itsAccounts.empty())
return 1;
std::map<size,Account*>::iterator it=itsAccounts.end();
--it;
return it->first 1;
}
..
第二步:分析
以上实现的确达到了我们的设计目的,但仅从直观上来看我就觉得它应该还有改善的空间,最简单的原因:因为它的命名混乱,没有通用性,如:
addAccountMember, addEmployeeMember,..
delAccount, delEmployee,..
getAccountMember, getEmployeeMember,..
getNextAccountID, getNextEmployeeID,..
对于同一种功能存在这么多不同名称的函数想起来就让我感到可怕,在我们的这个简单的例子中只对6个表实现了三种功能,我们需要为每个表实现4种不同名称的函数,结果,我们需要记住4*6=24个不同名称的函数及它们所对应的功能,如果,如果我们要对更多的表实现更多的功能..,真的不敢相象我们到底要实现多少个不同名称的函数。我想,不用等到函数接口数量爆炸,我的脑子就先爆炸了。如果能够对同一种功能的函数使用一组相同的名字如:
addMember
delMember
getMember
getNextMemberID
那么,我们的接口名称数量就只与实现的功能多少成常数关系,而与我们要操作的表的个数无关了,整个程序就应该清晰多了。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash