1

来自: http: //www.parashift.com/c++-faq-lite/basics-of-inheritance.html#faq-19.9

三键:ROI、ROI、ROI。

您构建的每个界面都有成本和收益。您构建的每个可重用组件都有成本和收益。每一个测试用例,每一个结构清晰的东西——a-ma-bob,每一项投资。如果该投资没有积极的回报,您永远不应该在任何事情上投入任何时间或任何金钱。如果您的公司花费的成本超过节省的成本,请不要这样做!

不是每个人都同意我的观点;他们有权犯错。例如,生活在离现实世界足够远的地方的人表现得好像每一项投资都是好的。毕竟,他们的理由是,如果你等待的时间足够长,有一天它可能会为某人节省一些时间。也许。我们希望。

整个推理过程是不专业和不负责任的。你没有无限的时间,所以要明智地投资。当然,如果你住在象牙塔里,你就不必担心那些被称为“时间表”或“客户”的讨厌的东西。但在现实世界中,您是按计划工作的,因此您必须只将时间投入到能够获得良好回报的地方。

回到最初的问题:什么时候应该花时间构建受保护的接口?答:当您从该投资中获得良好回报时。如果要花费你一个小时,请确保它为某人节省了一个多小时,并确保节省的钱不是“有一天会越过彩虹”。如果您可以在当前项目中节省一个小时,那就很容易了:去吧。如果有一天它会为其他项目节省一个小时,也许我们希望,那就不要这样做。如果介于两者之间,您的答案将取决于您的公司究竟如何权衡未来与现在。

要点很简单:不要做会破坏你的日程安排的事情。(或者如果你这样做了,请确保你永远不要和我一起工作;我会让你头疼的。)如果投资有回报,投资是好的。不要天真幼稚;长大后意识到有些投资是不好的,因为总的来说,它们的成本高于回报。

好吧,我不明白如何将它与受 C++ 保护的接口相关联。

请提供任何真实的 C++ 示例来说明此常见问题解答的内容。

4

2 回答 2

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类内部。因此,如果您使用访问器方法,您以后可以更好地更改底层实现:也许您希望它从网络中读取该变量?

然而,这是大量的额外代码(就字符而言)和实现它的一些额外的复杂性。把事情做好其实是有代价的!就代码的正确性而言,这不是成本 - 直接 - 但您花了几分钟的时间“做得更好”,而您本可以花在做其他事情上,并且维护您编写的所有内容都涉及非零工作量,无论多么微不足道。

所以,在我看来,这段话中所说的是一个好建议:总是仔细检查,当你去做某事时,你会得到比你投入更多的东西。理智检查你不是遵循理想会损害您作为程序员或人类的实际效率。

这些建议将在任何编程语言和任何行业中为您提供良好的服务。

于 2012-02-04T05:54:53.293 回答
0

从你上面的引述来看,这家伙听起来像一个迂腐的混蛋:)

查看他的常见问题解答中的先前条目,他实际上是在说以下内容:

1) 一个类对于两组不同的客户端有两个不同的接口:

  • 它有一个为不相关的类提供服务的公共接口
  • 它有一个受保护的接口,为派生类提供服务

2) 你是否应该总是为每个类创建两个不同的接口?

3)回答:“不,不一定”

  • 有时值得付出额外的努力来创建受保护的 getter 和 setter 方法,并使所有数据“私有”

  • 其他时候——他说——它“足够好”以使数据本身“受到保护”。无需编写大量额外代码的所有额外工作,并招致随之而​​来的大小和性能损失。

    对我来说听起来很合理。做你需要做的事——但不要过火,以“理论”的名义做一堆不必要的事情。

这就是他所说的——使用良好的判断力,不要过火。

你不能对此争论:)

PS:

链接中的常见问题解答 19.5 到 19.9 处理“派生类”。除了“我应该如何构造基类以进行继承?”这个问题之外,所有这些讨论都无关紧要。换句话说,这不是关于一般“类”的讨论 - 只是关于“超类应该如何最好地使其子类可见?”。

于 2012-02-04T05:55:29.400 回答