【问题标题】:In OOP, Private membes are private for who?在 OOP 中,私有成员对谁来说是私有的?
【发布时间】:2011-10-15 10:41:45
【问题描述】:

例如,在 OOP 中为什么需要放一些东西 Private 。我知道任何私有成员都不能被访问,但具有相同的类对象。但是为什么我需要这样做,而我是我项目的唯一编码员。同样的问题延伸到Protected,受到谁的保护!

【问题讨论】:

    标签: java c++ oop


    【解决方案1】:

    privateprotected 不是为了防止其他编码人员访问类的内部,而是(也)防止你自己创建一个没有明确定义接口的程序。 p>

    如果您项目中的每个类都可以修改其他所有类,那么您不仅容易因为巨大的状态空间而引入错误,而且还会阻止自己:

    • 更改任何类的实现(同时保持接口相同)。
    • 曾经向不熟悉所有类的所有内部结构的人介绍项目。除非你有完美的记忆力并且可以背诵你写过的每一行代码,包括未来的你。
    • 为单元测试模拟对象
    • 与您的程序/库的其他版本交互。假设您确实更改了一个类的内部结构,并且您设法跟踪项目中对该内部属性的每个引用。即使这样,您也可能需要再次与旧版本的程序交互。如果使用属性而不是 getter/setter 方法,这将变得特别困难。

    【讨论】:

      【解决方案2】:

      访问修饰符实现两个不同的目的:

      1. 它们限制了可能导致副作用的代码数量,从而更容易建立不变量。

      2. 它们保护类的客户端免受内部表示的更改。

      对于小型项目,这些优势可能不会立即显现出来,尤其是对于初学者。

      【讨论】:

        【解决方案3】:

        保护你未来的自己,否则他们可能会不小心忘记对象的哪些部分是应该与系统的其余部分分离的细节,以及哪些部分是可以被系统的其余部分依赖的可靠接口系统。

        【讨论】:

          【解决方案4】:

          语言试图强迫你写出“好”的代码。 “好”意味着代码结构化、干净且不易出错。所以你必须声明类型、私有成员等等。如果你不想这样,你可以使用在这方面较少的语言,比如python。但这意味着,您的程序可能(可能!)更不安全,或者如果它变得非常大,很容易被误解。与 cmets 相同。你不必写它们。特别是当你是唯一的程序员时。但这是一种很好的风格,如果你在半年后再次阅读你的程序,你会非常感激的。

          【讨论】:

            【解决方案5】:

            您标记了类private 的成员,这些成员不得从类外部访问。例如,您使用它来隐藏实现细节,因此您可以更改实现而不影响其他代码使用您的类。隐藏实现细节是 OOP(封装)的关键方面之一。如果你创建了一个Car 类,然后你写了很多使用Car 类的代码,然后你突然意识到你的实现性能很差,你需要重构它,如果所有的Car 实现Car 类的详细信息是私有的,您知道使用 Car 的代码都不会访问这些内容,您可以随意更改它们。如果您没有将它们标记为private,那么您可能在其他代码中使用了它们中的一些,然后会中断。

            同样,protected(无论如何在 Java 中)也是出于同样的目的,但允许从您的类中派生的类访问这些成员。这是相当弱的保护,因为这当然意味着您不能在不影响派生类的情况下更改基类的实现细节。

            【讨论】:

              【解决方案6】:

              这样想:保护级别定义了您以后可以更改的内容,无需关心除此类之外的任何其他代码(私有),无需关心除此类和继承自此的每个类之外的任何其他代码类(受保护),除了使用此类(公共)的每段代码外,无需关心任何其他代码。

              【讨论】:

                【解决方案7】:

                privateprotected 来自封装概念。它来自数据隐藏概念。我相信这个归纳至少对我来说是清楚和有用的:

                封装是将数据和函数组合成一个 单个单元称为类。使用封装的方法, 程序员不能直接访问数据。数据只能访问 通过类中存在的函数。数据封装 导致了数据隐藏的重要概念。数据隐藏是 对用户隐藏的类的实现细节。这 受限访问的概念导致程序员编写专门的 对隐藏成员执行操作的函数或方法 类的。必须注意确保班级是 设计得当。 (Sripriya Rajagopalan)

                注意:答案很好,这个答案是为了完成它们

                【讨论】:

                • 并没有真正回答关于私有/受保护的问题。
                • 我第一次看到这张纸条。你还没有回答关于private的问题。
                【解决方案8】:

                如果您将一个类的成员(变量或方法)定义为私有,您将无法从外部使用它,使用另一个类,使用点运算符。 Protected 帮助您保护成员变量或方法不被继承。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-09-04
                  • 2011-08-23
                  • 2017-12-22
                  • 1970-01-01
                  • 2012-11-27
                  • 2020-03-22
                  • 2011-02-26
                  相关资源
                  最近更新 更多