47得票7回答
依赖倒置原则(SOLID)与封装(面向对象编程的支柱)的比较

最近,我在讨论依赖倒置原则、控制反转和依赖注入。在这个话题上,我们正在辩论这些原则是否违反了面向对象编程的其中一个支柱,即封装。 我对这些东西的理解是: 依赖倒置原则意味着对象应该依赖于抽象而不是具体实现,这是控制反转模式和依赖注入实现的基本原则。 控制反转是依赖倒置原则的一种模式实现,...

46得票7回答
Effective C++ 条款23:更喜欢非成员和非友元函数而不是成员函数

在考虑类设计时,特别是函数应该是成员函数还是非成员函数的问题上,我查阅了Effective c++中的第23条建议:优先使用非成员非友元函数。首先看到其中以Web浏览器为例的内容,感觉有些道理,但是书中所称的"方便函数"(指非成员函数)改变了类的状态,不是吗? 那么,我的第一个问题是,这些...

44得票12回答
为什么方法和属性的可见性很重要?

为什么不应该将所有方法和属性都设置为全局可访问(即 public)? 如果我将一个属性声明为 public,你能给我举一个可能遇到的问题的例子吗?

44得票14回答
在PHP中,封装是什么,有简单的例子吗?

什么是封装(encapsulation),并使用PHP简单示例进行说明?

42得票5回答
如何在JavaScript中实现C#访问修饰符?

摘要 我想在 JavaScript 中像在类语言(如 C#)中一样正确地实现继承和封装。 不好的一点是,受保护成员在私有实例中有多个副本,只能通过闭包访问,我没有别的想法,除了将这些成员刷新到私有实例中。 如果可能的话,我想在Function.extend的代码中摆脱transmit和...

42得票12回答
属性 vs. 字段:需要帮助理解使用属性而不是字段的原因

首先,我已经阅读了关于此主题的一系列帖子,但因为我理解封装和字段修饰符(private、public等)的含义,所以我不认为我掌握了属性的概念。 C#的一个主要方面就是通过封装来保护代码中的数据。我“认为”我理解了使用修饰符(private、public、internal、protected...

40得票8回答
在另一个子类中访问基类的受保护成员

为什么这段代码可以编译通过:class FooBase { protected: void fooBase(void); }; class Foo : public FooBase { public: void foo(Foo& fooBar) { ...

40得票2回答
为什么JUnit 5的默认访问修饰符改为包私有?

为什么JUnit 5中默认的访问修饰符是包可见性? 在JUnit 4中,测试必须是public。 将其改为包可见性的好处是什么?

39得票3回答
Ruby类如何调用私有方法的静态方法?

我有一个包含许多静态方法的类。每个方法都必须调用一个公共方法,但我不想暴露这个后者方法。将其设为私有仅允许从该类的自身实例中访问?protected 看起来也不能解决这个问题。 在静态上下文中如何隐藏 do_calc,以防止外部调用?(仍然可供前两个静态方法调用。)class Foo d...

38得票1回答
C++编译器在封装行为上存在分歧 - 哪一个是正确的?

编译器(clang-5.0.0、GCC-7.3、ICC-18和MSVC-19)在以下A成员的可访问性方面存在差异。 class A { template <class> static constexpr int f() { return 0; } templa...