我是一个用C++进行面向对象编程的学生,我正在慢慢地学习新的东西。作为我课程的学期报告的一部分,我被要求就一项声明发表讲话,声明:
“使用编程模板开发大型系统是合理的吗?”
以下是关于大型软件系统软件体系结构的研究文章:
http://www.crystalclearsoftware.com/publications/2001/RepresentingLargeScaleArchitecture.pdf
但在读完之后,我无法决定在开发这样的系统时是否应该采用模板,或者应该避免使用模板。
我熟悉使用模板的基本概念、运行时和编译时场景,但是对于较大的系统,使用模板或使用模板在大型系统的开发中是否安全?
无论哪种方式,请突出说明模板是否应该被使用的原因。
发布于 2012-01-24 20:17:18
答案是一个确定的可能。说真的,这取决于模板的用途。模板在增加复杂性和耦合性方面有很大的成本。然而,替代方案也可能有很大的成本-当替代方案的成本高于模板的成本时,您就可以使用模板。(当然,无论应用程序的大小如何,这都是正确的。但是像增加复杂性和耦合性这样的事情在大型项目中往往会产生更大的影响。)
在解决这个问题之前,您必须区分使用模板和定义模板。当然没有理由反对使用标准库中定义的模板,例如:任何增加的成本都是由库的开发人员支付的,而不是由您支付的,所以这都是好处。类似的论据也适用于第三方库。但是,对于您自己定义的模板,必须考虑模板定义中的修改对构建时间的影响。定义几乎所有的模板都是而不是,这是一个好主意。另一方面,您也许能够隔离某些功能,并将它们视为内部开发的第三方库,但除非在极端情况下不进行修改。
有趣的是,模板不会引起问题的地方(低级的、非常稳定的元素)通常是它们最有用的地方。对于处理实际应用程序特定代码的“应用程序级”模块,模板通常不是很有用;继承要有用得多。另一方面,对于低级组件来说,就像std::vector一样,它们非常有用;但是这样的组件通常是独立于应用程序的其余部分开发的,无论如何都必须非常稳定。
发布于 2012-01-24 20:03:57
我不会告诉你答案,但我会给你这个提示。
问问你自己:
使用模板的令人信服的理由是什么,不使用模板的令人信服的原因是什么(比如编译时)?
然后问问自己,为什么这些原因中的任何一个在大规模系统中是有用的或有害的?
让我们来看看大规模的系统。是什么让它们变大了?它可以是很多东西,例如:
的代码量
等。
现在考虑一下模板的一些优点
算法的可重用性和组件化
等
这两个是如何帮助上述工作的呢?
的工作量更少
如果你回答第一个问题,后一个问题就会变得容易得多。
没有正确或错误的答案,相反,它是一个论点,每个系统的设计将根据所讨论的系统的实际关注点进行分析和决定。
发布于 2012-01-24 20:29:35
你的问题是非常主观的,我的印象是你不会得到一个让所有大型系统开发人员甚至你所有的老师都满意的答案。就我个人而言,我倾向于使用更简单的方法来做一些事情,这有时意味着不使用模板,有时意味着让模板为你复制代码。编译时间总是可以使用PIMPL或显式实例化进行防火墙保护,但是避免使用模板会导致更加臃肿、模糊的运行时错误和性能损失。
我对你的家庭作业的建议是:提出所有支持和反对使用模板的论点,不要以是或否的答案结束,而是介于两者之间的东西;-)。不要让软件方法论的狂热分子夺走了你编码的乐趣。
https://stackoverflow.com/questions/8986446
复制相似问题