1243得票17回答
831得票12回答
为什么Python的“私有”方法实际上并不是私有的?

在Python中,我们可以通过在方法或变量名前面添加双下划线(如__myPrivateMethod())来创建一个“私有”的方法或变量。那么,如何解释这一特性呢? >>>> class MyClass: ... def myPublicMethod(self)...

451得票41回答
抽象和封装的区别是什么?

封装和抽象有什么精确的区别?

397得票31回答
在C++中,何时应该使用'friend'?

我一直在阅读 C++ FAQ,对 friend 声明很好奇。我个人从未使用过它,但我有兴趣探索这门语言。 有没有使用 friend 的好例子? 继续阅读FAQ,我喜欢重载 << >> 操作符并将其添加为那些类的友元的想法。但我不确定如何做到不破坏封装性。这些例外...

227得票5回答
C#中的“friend”对应什么?

可能有重复: 为什么C#不提供类似C++的“friend”关键字? 我希望在不将私有成员变量暴露给其他类的情况下,让Tester类可以访问类的私有成员变量。 在 C++ 中,我只需将Tester类声明为友元类即可,那么在C#中该如何实现?能否给出一个示例?

186得票9回答
我应该返回一个集合还是一个流?

假设我有一个方法可以返回成员列表的只读视图:class Team { private List<Player> players = new ArrayList<>(); // ... public List<Player> get...

186得票22回答
抽象 VS 信息隐藏 VS 封装

您能告诉我软件开发中抽象和信息隐藏之间的区别吗? 我感到困惑。抽象隐藏详细实现,而信息隐藏则抽象了某物的全部细节。 更新: 我找到了一个关于这三个概念的好答案。请参见下面单独的答案,其中引用自此处的几篇文章。

145得票21回答
依赖注入是否必须以封装为代价?

如果我理解正确,依赖注入的典型机制是通过类构造函数或类的公共属性(成员)进行注入。 这会暴露被注入的依赖项,并违反了面向对象编程中的封装原则。 我对这种权衡做出的判断是否正确?如何处理这个问题? 请参阅下面我自己的答案。

144得票22回答
125得票7回答
使用策略模式和命令模式

两种设计模式都封装了算法并将实现细节与调用类解耦。我唯一能区分的区别是策略模式需要传入参数执行,而命令模式则不需要。 在我看来,命令模式需要在创建时可用于执行的所有信息,并且它能够延迟其调用(例如作为脚本的一部分)。 是什么决定指导我们使用一种模式还是另一种模式?