来自:http://www.parashift.com/c++-faq-lite/basics-of-inheritance.html#faq-19.9
三个关键:投资回报率,投资回报率和投资回报率。
您构建的每个界面都有成本和收益。每个可重复使用的 您构建的组件具有成本和收益。每个测试用例,每个 干净整洁的东西-a-ma-bob,各种投资。您 如果没有,任何事情都不应该投入任何时间或金钱 这笔投资的积极回报。如果你的公司花费更多 比它节省,不要这样做!
并非所有人都同意我的意见;他们有权利出错。 例如,居住在远离现实世界的人们的行为 像每一笔投资都是好的。毕竟,如果你等了,他们会推理 很长一段时间,它可能会在某一天拯救某人。也许。我们希望。
整条推理都是不专业和不负责任的。您 没有无限的时间,所以要明智地投资。当然,如果你住在一个 象牙塔,你不必担心那些讨厌的事情 “时间表”或“客户”。但在现实世界中,你在一个人中工作 时间表,因此您必须将时间投入到您的目的地 得到很好的回报。
回到最初的问题:你应该什么时候投入时间进行建设 受保护的界面?答:当你得到一个好的回报 投资。如果它花费你一个小时,请确保它节省 有人超过一个小时,并确保节省不是“有一天 在彩虹上。“如果你能在当前项目中节省一个小时, 这是一个明智的选择:去吧。如果它要保存一些其他项目 有一天我们可能希望一小时,然后不要这样做。如果是的话 之间,您的答案将取决于您公司的交易方式 关于现在的未来。
重点很简单:不要做可能损害你的事情 时间表。 (或者,如果你这样做,请确保你永远不和我合作;我会 你的头放在盘子上。)投资是好的,如果有回报的话 那个投资。不要幼稚和幼稚;长大并意识到这一点 有些投资很糟糕,因为它们总的来说比它们花费更多 返回。
好吧,我不明白如何将它与C ++保护的接口相关联。
请提供任何真实的C ++示例,以显示此常见问题解答的内容。
答案 0 :(得分:2)
首先,不要将任何编程参考视为最终。永远。一切都是某人的意见,最后你应该做最适合你的事情。
所以,那就是说,这篇文章基本上试图说的是“不要使用比他们节省更多时间的技术”。他们描述的“受保护接口”的一个例子如下:
class C {
public:
int x;
};
现在,在Java中,所有Java EE编程书都会告诉你总是像这样实现这个类:
class C {
public:
int getX() { return x; }
void setX(int x) { this.x = x; }
private:
int x;
};
......这是正确的封装的实现(技术术语:简化一点,它意味着最小化离散部分之间的共享)。使用您的代码的类担心您有某种方式获取和设置一个整数,而不是它实际存储在类中的int
。因此,如果您使用访问器方法,您可以在以后更好地更改底层实现:也许您希望它从网络中读取该变量?
然而,这是大量的额外代码(就字符而言)以及实现它的一些额外复杂性。正确地做 实际上是有代价的!这不是代码正确性的代价 - 直接 - 但你花了一些时间来做“更好”,你可以用来做其他事情,并且有很多工作涉及维护你写的所有内容,无论多么微不足道。
所以,在这篇文章中所说的内容在我看来是一个很好的建议:总是仔细检查,当你去做某事时,你会得到更多的东西而不是你投入的东西。理智检查那个你没有遵循理想,不利于你作为程序员或人类的实际有效性。
这个建议可以在任何编程语言和任何行业中为您提供良好的服务。
答案 1 :(得分:0)
从上面的引文中,这个家伙听起来像个迂腐的混蛋:)
查看常见问题解答中之前的条目,他真的说了以下内容:
1)一个类有两个不同的接口,用于两组不同的客户端:
2)你是否应该总是为每个类创建两个不同的接口?
3)答案:"不,不一定"
有时需要额外的努力来创建受保护的getter和setter方法,并使所有数据"私有"
其他时候 - 他说 - 它足够好"使数据本身"受保护"。没有完成编写大量额外代码的额外工作,并导致随之而来的大小和性能损失。
对我来说很合理。做你需要做的事情 - 但是不要过多地做一些不必要的的东西,而不是理论&#34;。< / p>
他所说的一切 - 使用良好的判断力,不要过分。
你无法辩解:)
PS:
常见问题&解答19.5到19.9在您的链接中处理&#34;派生类&#34;。这个讨论在问题之外都不相关&#34;我应该如何构建用于继承的基类?&#34;换句话说,它不关于&#34;类&#34;的讨论。总的来说 - 只有&#34;超级班怎样才能最好地让它的子类可见?&#34;。