Tag: 封装

在Java中设置和获取方法?

我怎样才能使用这个方法,并且为什么要使用它们? 他们真的有帮助吗? 你也可以给我一些例子,并获得方法?

为什么std :: pair公开成员variables?

从http://www.cplusplus.com/reference/utility/pair/ ,我们知道std::pair有两个成员variables, first和second 。 为什么STLdevise者决定暴露两个成员variables, first和second ,而不是提供getFirst()和getSecond() ?

PHP的私人常量

我有一个类在内部实现中使用常量,但我想限制这些常量的可见性。 为什么PHP不允许私人常量? 是否有另一种方法来实现这一点,或者是PHP试图阻止某种types的devise失误,我是无知的?

C#:List <T>和Collection <T>之间的区别(CA1002,不要公开通用列表)

试图在这里运行一个项目的运行代码分析,并得到了一些这样的警告: CA1002:Microsoft.Design:更改“ SomeClass.SomeProtectedOrPublicProperty ”中的“List < SomeType >”以使用Collection,ReadOnlyCollection或KeyedCollection 为什么我应该使用Collection<T>而不是List<T> ? 当我看到msdn文档时,他们看起来几乎是平等的。 在阅读警告的错误帮助后,我发现 System.Collections.Generic.List(T)_是为性能而devise的通用集合,而不是inheritance,因此不包含任何虚拟成员。 但是这是什么意思呢? 我该怎么做呢? 我应该在内部继续使用List<T> ,然后在属性中返回一个new Collection<T>(someList)吗? 还是应该开始使用Collection<T>而不是List<T> ?

Java:子包的可见性?

我的项目中有两个包: odp.proj和odp.proj.test 。 有一些方法,我只想看到这两个包中的类。 我怎样才能做到这一点? 编辑:如果没有Java的子包的概念,有没有办法解决这个问题? 我有一些特定的方法,我只想让这个包的testing者和其他成员可用。 我应该把所有东西都扔进同一个包里吗? 使用广泛的反思?

必须dependency injection是以牺牲封装性为代价的吗?

如果我理解正确,dependency injection的典型机制是通过类的构造函数或通过类的公共属性(成员)注入。 这暴露了被注入的依赖关系,违反了封装的OOP原则。 我是否正确地认定这个权衡? 你如何处理这个问题? 请看下面我自己的问题的答案。

使用策略模式和命令模式

这两种devise模式都封装了一个algorithm,并将实现细节从其调用类中分离出来。 唯一的区别是我可以看出,战略模式需要参数执行,而命令模式不。 在我看来,命令模式要求创build时所有的执行信息都是可用的,并且能够延迟其调用(可能作为脚本的一部分)。 什么决定指导是否使用一种模式或另一种模式?

了解__getattr__和__getattribute__之间的区别

我想了解__getattr__和__getattribute__之间的区别,但是,我失败了。 堆栈溢出问题getattr与getattribute之间的区别说, 在查看对象上的实际属性之前调用__getattribute__ ,因此可能会很难正确实现。 你可以很容易地在无限的recursion结束。 我完全不知道这意味着什么。 然后它继续说: 你几乎肯定希望__getattr__ 。 为什么? 我读过,如果__getattribute__失败, __getattr__被调用。 那么为什么有两种不同的方法做同样的事情呢? 如果我的代码实现了新的风格类,我应该使用什么? 我正在寻找一些代码示例来清除这个问题。 我已经尽力search到了,但是我find的答案并没有彻底讨论这个问题。 如果有任何文件,我准备阅读。

抽象VS信息隐藏VS封装

你能告诉我软件开发中的抽象和信息隐藏有什么区别吗? 我很困惑。 抽象隐藏了详细的实现和信息隐藏摘要的东西的全部细节。 更新:我为这三个概念find了一个很好的答案。 请参阅下面的单独的答案 ,从那里引用几个引文。

为什么Python的“私有”方法实际上不是私有的?

Python使我们能够在类中创build'private'方法和variables,方法是在名称前加双下划线,如下所示: __myPrivateMethod() 。 那么如何解释呢? >>> class MyClass: … def myPublicMethod(self): … print 'public method' … def __myPrivateMethod(self): … print 'this is private!!' … >>> obj = MyClass() >>> obj.myPublicMethod() public method >>> obj.__myPrivateMethod() Traceback (most recent call last): File "", line 1, in AttributeError: MyClass instance has no attribute '__myPrivateMethod' >>> dir(obj) ['_MyClass__myPrivateMethod', '__doc__', '__module__', […]