标签: encapsulation

私有,公共和受保护继承之间的区别

是什么区别public,private以及protected用C++继承?我在SO上发现的所有问题都涉及具体案例.

c++ inheritance encapsulation c++-faq access-specifier

952
推荐指数
14
解决办法
65万
查看次数

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

Python使我们能够通过在名称前加上双下划线来在类中创建"私有"方法和变量,如下所示:__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__', 'myPublicMethod']
>>> obj._MyClass__myPrivateMethod()
this is private!!
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?!

我会对那些没有那么做的人解释一下.

>>> class MyClass:
...     def myPublicMethod(self):
...             print 'public method'
...     def __myPrivateMethod(self):
...             print 'this is private!!'
... 
>>> obj = MyClass()
Run Code Online (Sandbox Code Playgroud)

我在那里做的是使用公共方法和私有方法创建一个类并实例化它.

接下来,我称之为公共方法.

>>> obj.myPublicMethod() …
Run Code Online (Sandbox Code Playgroud)

python encapsulation information-hiding python-2.7

632
推荐指数
11
解决办法
41万
查看次数

什么时候应该在C++中使用'friend'?

我一直在阅读C++常见问题,并对该friend声明感到好奇.我个人从未使用它,但我有兴趣探索这种语言.

什么是使用的好例子friend


阅读常见问题更长一点我喜欢<< >>运算符重载的想法,并添加为这些类的朋友.但是我不确定这是如何不破坏封装的.这些例外何时可以保持在OOP的严格范围内?

c++ oop encapsulation friend

343
推荐指数
11
解决办法
16万
查看次数

329
推荐指数
22
解决办法
38万
查看次数

理解__getattr__和__getattribute__之间的区别

我试图理解上的差异之间__getattr____getattribute__,但是,我在它失败.

Stack Overflow问题的答案vs 之间的差异__getattr____getattribute__说:

__getattribute__在查看对象的实际属性之前调用,因此正确实现可能很棘手.您最终可以轻松地进行无限递归.

我完全不知道这意味着什么.

然后继续说:

你几乎肯定想要__getattr__.

为什么?

我读到如果__getattribute__失败,__getattr__就会被调用.那么为什么有两种不同的方法做同样的事情呢?如果我的代码实现了新的样式类,我应该使用什么?

我正在寻找一些代码示例来清除这个问题.我已经用Google搜索了我的能力,但我找到的答案并没有彻底讨论这个问题.

如果有任何文档,我准备阅读.

python oop encapsulation getattr getattribute

192
推荐指数
4
解决办法
7万
查看次数

抽象VS信息隐藏VS封装

你能告诉我在软件开发中抽象信息隐藏有什么区别吗?

我很迷惑.抽象隐藏了细节实现和信息隐藏抽象的东西的整个细节.

更新:我找到了这三个概念的好答案.请参见下面的单独答案从采取了一些引文出现.

glossary encapsulation ooad abstraction information-hiding

161
推荐指数
6
解决办法
14万
查看次数

我应该退回收藏品还是流?

假设我有一个方法将只读视图返回到成员列表:

class Team {
    private List < Player > players = new ArrayList < > ();

    // ...

    public List < Player > getPlayers() {
        return Collections.unmodifiableList(players);
    }
}
Run Code Online (Sandbox Code Playgroud)

进一步假设所有客户端都立即迭代一次列表.也许将玩家放入JList或其他东西.客户端就不能存储到列表的引用以便稍后进行检查!

鉴于这种常见情况,我应该返回一个流吗?

public Stream < Player > getPlayers() {
    return players.stream();
}
Run Code Online (Sandbox Code Playgroud)

或者在Java中返回非惯用的流?设计的流是否始终在它们创建的同一表达式中"终止"?

java collections encapsulation java-8 java-stream

152
推荐指数
2
解决办法
3万
查看次数

Java:Subpackage可见性?

我的项目中有两个包:odp.projodp.proj.test.我希望某些方法只对这两个包中的类可见.我怎样才能做到这一点?

编辑:如果Java中没有子包的概念,有什么方法可以解决这个问题吗?我有一些方法,我希望只有测试人员和该软件包的其他成员才能使用.我应该把所有东西扔进同一个包里吗?使用广泛的反思?

java encapsulation visibility package

138
推荐指数
6
解决办法
6万
查看次数

必须依赖注入以牺牲封装为代价吗?

如果我理解正确,依赖注入的典型机制是通过类的构造函数或通过类的公共属性(成员)注入.

这暴露了注入的依赖性并违反了封装的OOP原则.

我在确定这种权衡时是否正确?你是如何处理这个问题的?

另请参阅下面我对自己问题的回答.

oop encapsulation dependency-injection inversion-of-control

123
推荐指数
7
解决办法
9531
查看次数

使用策略模式和命令模式

两种设计模式都封装了算法,并将实现细节与其调用类分离.我能辨别的唯一区别是策略模式接受执行参数,而命令模式则没有.

在我看来,命令模式要求所有执行信息在创建时都可用,并且它能够延迟其调用(可能作为脚本的一部分).

什么决定指导是使用一种模式还是另一种模式?

encapsulation design-patterns strategy-pattern command-pattern

118
推荐指数
6
解决办法
4万
查看次数