English 中文(简体)
为什么许多开发商反对在欧佩组织中使用“受保护”的变体?
原标题:Why are many developers opposed to using the "protected" modifier in OOP?

一位矿工的同事正在参加“<>目标简介<>/em>课程,并询问他的教授:

www.un.org/Depts/DGACM/index_spanish.htm 为什么许多开发商反对使用“受保护”的 mo片/在课堂上使用?

当这个问题在午餐时提出时,我的同事和我不能想为什么有人会用opposed在课堂上使用<条码>受保护的<>条/代码>。 搁置问题的先决条件(假设许多开发商事实上反对<条码>保护<>条码/条码>;是否是?)我们试图说明原因。

个人而言,我使用<条码>受保护的<><>条/代码>进入舱位的唯一时间是我准备在试验环境中补充的书面代码。 例如,我可能写上一个基类,没有收集信息,然后创建新的测试类别,从基类继承,在基数方法使用之前/之后,在减标产出代码中添加其方法。 我认为,我可以很容易地使用一种涉及界面和依赖注射的设计来实现同样的目标,但我唯一关于<条码>受保护的<<>>条码”的经验是用于测试的。 在这种情况下,避免<>受保护的<<>条/代码>的唯一原因是,你能够以更好的方式完成同样的工作。

为什么开发商会反对在其组织设计中使用<条码>受保护的变式?

NOTE:由于教授正在询问一个与任何一种语言不同的一般组织问题,因此我无法确定,由于在C#、Java等地实施不同的<条码>保护,答案是否可以不同加权。

最佳回答

开发商在阻止开发商获得他们想要使用的东西之前不会抱怨保护。 对于那些正在创建儿童班级的开发商来说,由于他们从子女班子中买到货物,因此他们得不到保护。

对于使用<>特定类别(不延伸)的开发商,受保护的区块可以查阅潜在的内部执行细节。 这是他们将要掌握的。

可以说,一些框架设计者在隐私方面过于繁琐,无法接触到所有东西,只能允许接触有具体记载、有支持的特点。 如果你知道你可以用来解决你眼前问题的内部存在良好障碍,但考虑一下问题:如果你的框架是由能够自由接触到所有东西的人设计的,那么,执行的所有内部细节,在今后某个时候更新框架时,你很可能遇到两个问题之一:

  1. The updated framework changes implementation details that your code is dependent upon, and your code breaks
  2. The designers realize they can t change the implementation without breaking lots of code, so they opt to not implement useful features or bug fixes. This is called code paralysis.

尽管看到你能够接触的东西令人沮丧,但比以宽容的方式以限制性(简便、例外地允许)的方式操作的长寿和低修正费用,会更好。

我已经制定了(天、书面)框架,在该框架中,使用框架的开发商抱怨说,框架没有足够允许,也没有内部细节。 这些民俗抱怨说,即便是固定的,也增加了一些特征,而且各种平台的迁移都进行了改写,但公众、支持的界面、法典合同仍然稳定,其法典基本上不受影响。

因此,开发商将抱怨受保护(和私人)的获取者只是因为开发商认为是执行解决办法的最简单和最快的方式,而忽视了今后依靠这种执行细节的成本。

资本是一件好事,即使它阻碍着最短的解决方案。 ;

问题回答

在没有广泛投票的情况下,我只在这里做一个gues子,主要谈的是保护性 mo子,适用于成员的职能。

我怀疑这段话,因为<代码>保护:关于班级成员的明文允许未来用户修改班级行为。 总的来说,这难以规划。 问题在于,有多少不知名的人必须同时处理和记录。

如果你的图书馆允许分流压倒受保护的方法,那么你必须小心,每个受保护方法的电话都对不熟悉图书馆具体要求的节目员安全。 这就需要仔细的文件,目前还缺乏一种限制使用大众语言的良好方法。

例如,假设你有一个相当完整的接口图书馆,提供 CI课程。 你的筛选机制在绘画期间锁定了这个 CI类。 但是,你的客户类别提供了受保护的“植被”功能。 图书馆的用户为了自己在其他地方使用而放弃这一功能,并试图打破形象。 这类问题对于在文件上进行沟通非常重要,只是每个受保护成员的职能或职能范围都难以处理。

首先,<条码>保护不能保证隐私,除非您继承链中唯一可消费的阶层被封起来(即所有基类都属于议会内部)。 任何了解OOP公司情况的发展者,都可以学习你的班子,使你们的所有内部都暴露于世界。

成员使用<条码>内称通常可以解决这个问题;只有Your代码,位于你重新发展的同一组,才能见内部成员。 你接触的供他人使用的公共儿童可以从集会之外获得,但你想要藏匿的内部仍然隐藏着。 在同一个大会中制造儿童或其他物体的研发者,如果你的内部真正从操作角度敏感,就应当与你沟通,了解他们重新使用什么。 注意<条码>保护内部是指保护内部的、不受保护的和内部的。

其次,<条码>保护一般表明,在班级设计上存在一些缺陷,尤其是在使用受保护和公共保护的情况下。 如果你有秘密,但你必须与你的孩子分享,那就不是秘密的,可能应该公开。 如果是个秘密,那么你的孩子就应当得到信任,因为除非你给孩子们一个va子,使其与<条码>密封<>。 关键词是,你可以阻止他们告诉儿童,他们可能不再认为自己是秘密的,与家人或世界分享。

使用<条码>保护<>/条码>并非可怕,它仅仅没有达到许多开发商希望使用该编码的目标;使“受委托”的个人能够进入一个类别,而不会受到微妙的内部程序的影响。 它减少了准入管制和更多的准入建议;通过使用受保护手段,你表示,这种方法对儿童有用,但本身对非儿童不利,如果接触和滥用,则对群体有害。 这非常好像在你前面的院子里张贴一个信号,说“我的门被锁住,我不会给你钥匙,但我的所有家都有一个”。 这甚至不是其中的一半,因为“堡垒”能够使MAKE成为你的一个孩子,并利用他们打开大门。

关于方法的<条码>受保护的<>条/代码”的常用和公认使用是“模版方法”课程;这些课程是具有公共骨.工作流程的抽象课程,但允许或要求将其功能的具体内容加以推广。 这些功能通常具有高度凝聚力,范围不大。 这种模式将暴露出一种公共、非虚拟的“衍生功能”,一些操作者将“帮助者”作为受保护的抽象或虚拟方法。 这使得消费者能够学习这一类别,并落实帮助者。

在这种情况下,你通常不关心儿童的执行情况,也不希望限制可能的解决办法;儿童可能需要公共包裹,以了解帮助者的方法,以便与《公约》的受抚养人沟通。

<条码>保护也是集体测试某类动物的最直接途径。 单位测试是一件好事,但如果你想写出一种使用方法的测试装置,那么该方法必须从班外获得。 私人只是一种禁忌。 内部通常也存在类似的问题。 为了允许对纳尔多人进行检测,他们至少必须受到保护,以便你能够找到向纳尔多人进行治疗的班级。 否则,你就真的需要思考一下,以找到你的私人方法,并援引这种方法(加上天空化化学文摘社的许可)。

超过<条码>受保护 可能违反Liskov Substitution Principle (L in SOLID) - PDFLink。 这项原则规定,各班级应以任何子级都能替代其基类的方式书写。 Robert C. Martin在Agile Principles, Formats, and Practices in C#上进行了很好的讨论。 论点的核心是,subtype 只是一个子类,因为它为基类提供了substitutable,而不是仅仅建立了IS-A关系。

因此,通过保护性方法使功能变得太大,你可能允许该子级过于宽松,使子级不成为真正的子类。

这远非黑白,不能发布一条总括规则,说明是否<条码>保护<>条码>。 应当使用/应当使用t。 在一些情况下,它确实是必要的,有些情况并非如此。 需要对个案作出判决。

资本构成是一种良好做法,通过使成员得到保护,你打破了资本,因为子类可以直接修改变量。

我本人几乎从未使用保护区。 这种做法可能很危险,简单易行者将避免任何不想要的变化。

有了受保护的田地/方法,你的子阶级取决于你父母的阶层内部结构,这种结构确实不利于政变。 它是一种说法,即“我有私人的方法/领域,但是它为我的子阶级使用这一方法而证明是正确的,更糟糕的是,“要战胜/改变这种方法”。

这实际上不是我的意见,但我可以理解,一些开发商发现“<>受保护的<>>>条/代码” mo误使用。


<>Resources>:

<条码>保护 成员使本级具有两个接口:一个是选择不下级的客户,另一个是选择下级的客户。 课程类型相同——它们重新加入<条码>。 所谓“thing,但只有某些客户才能这样做。

有时,这是你想要做的事:你仔细设计了两个不同用途的接口。 摘要班可归入这一类:使用<代码>受保护+<>公开/编码>接口的“执行人”和仅使用<代码>的公开接口的“用户”。 你们可以向实施者提供一些有用的功能,即用户不需要,而组合可能会遇到用户不触及的难题,但实施者必须建立起来。 采用受保护的方法这样做,只会使你避免为某些工厂确定单独的接口,以返回“用户”。 因此,我认为这并不有害,尽管它可能被视为一种bit,因为它不是确定两个接口的“正常”方法。

虽然在你使用<条码>受保护的<>条/条码>时,可以肯定的是,在你想要打破这一条码的情况下,你实际上就是要打上子。 如果“should”改为 private,则将其编成protected,即打破你原先打算采用的上限。 坏的接口仍然是坏的接口,无论它是否向世界提出,还是只是向下级。 就此而言,街上的任何洗ple都有可能使你们的阶级分崩离析。 因此,即使“对子类进行调整”也具有非常限制性――贵重的<代码>受保护的接口远离<代码>的公开<<>。 我认为,为什么有人对<>受保护的<>条/条码”表示怀疑——它认为,它通过限制谁看到这一条,实际上就是限制它。

the only reason to avoid protected is because you can accomplish the same thing in better ways.

是否足够了? 更好地做事......更好;-

“保护”的一个原因是,某类人员在其合同中列入确实属于该类但不一定属于衍生类别的事项,可能是有益的。 根据Leskov替代物原则,任何可以通过带有“Q”物体的公共接口做的,也应当与任何具有“Q”类的物体有关。 因此,Q不应公布在Q某些衍生工具下可能不存在的任何能力。

而另一方面,推测Q具有某些能力,对一些衍生工具,而不是对其他产品,例如克隆技术,都是有益的。 只要满足某些条件,基类Q就可以被打上,但某些子类可能不会支持克隆。 在这种情况下,Q应暴露为支持克隆技术所需的“保护”。 能够有益地加以掩饰的子类可使用这些hoo子并暴露一种克隆方法。 那些不能被掩盖的人不会暴露出hoo。

源自基类(仅使用受保护方法支持克隆技术)的密封类别可以确定任何种类的物品都将支持克隆。 即使该类别没有封印,除非有人(不适当>)从该类别中产生不能支持克隆的类别,但衍生类别中的代码仍可以肯定,只能使用能够被掩饰的物体。

相比之下,如果某一类别与原产地的转产物有某种关系,则不可能以汇编时间的方式知道它所投的物品是支持克隆的。 采用低层次的克隆方法,将邀请他们在得到支持的情况下使用。

由于受保护者是 公开至,因此受保护者是亚类。 它对客户看好许多公共方法。

在java,受保护的寺院往往没有意义。

如果你正在开发单一包裹申请,而且你预计不会延长(不是图书馆),那么最好使用违约变体——私人包裹。

If you are developing a multi-package application, then you may need the protected modifier to allow beta.Son to invoke the alpha.Father superclass constructor (but otherwise the alpha.Father constructor is unavailable). I will speculate without proof that developers prefer single-package applications.

如果你正在开发一个图书馆,那么受保护的出租人将是有益的。 我不想证明开发商比图书馆花更多的时间建造应用程序。

There s a rule.."Use Private unless you have a good reason not to" You have to think if someone gonna use your packages/classes and decide what is really needed. I never use protected unless I m going to release a lib to someone else and only if it s needed.





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...