这个问题何时使用私人和当类使用受保护的让我去思考。(由于与之相关,我还将这个问题扩展到最终的类和方法。我使用Java编程,但是我认为这与每种OOP语言都相关)
一个好的经验法则是:使所有内容尽可能私密。
- 除非您需要立即对它们进行子类化,否则将所有类定为最终类。
- 使所有方法最终化,除非您需要立即子类化并覆盖它们。
- 除非需要在方法主体中进行更改,否则将所有方法参数都设置为最终值,这在大多数情况下还是很尴尬的。
这非常简单明了,但是如果我主要是编写库(GitHub上的开源)而不是应用程序怎么办?
我可以说很多图书馆和情况,
- 库以开发人员从未想过的方式扩展
- 由于可见性限制,必须使用“类加载器魔术”和其他技巧来完成此操作
- 库的使用方式不是为它们而建,而是以所需的功能“入侵”
- 由于存在小问题(错误,功能缺失,“错误”行为),无法使用库,原因是可见度降低,无法更改
- 无法解决的问题导致了巨大的,丑陋的和错误的解决方法,在这些解决方法中,覆盖简单的功能(私有或最终的)可能会有所帮助
实际上,我开始命名它们,直到问题过长,然后我决定将其删除。
我喜欢这样的想法,即没有多余的代码,比可见性更多的可见性,比需求更多的抽象性。当为最终用户编写应用程序时,这可能会起作用,因为最终代码仅由编写该应用程序的人员使用。但是,如果代码打算供其他开发人员使用,而原始开发人员则不可能事先考虑到每种可能的用例,并且很难/不可能进行更改/重构,那么这将如何保持呢?
既然大型开源库不是什么新鲜事物,那么在使用面向对象语言的此类项目中处理可见性的最常用方法是什么?