标签: information-hiding

为什么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万
查看次数

抽象VS信息隐藏VS封装

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

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

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

glossary encapsulation ooad abstraction information-hiding

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

为什么要使用"PIMPL"成语?

背景资料:

所述PIMPL成语(指针实现)是用于执行隐藏在其中一个公共类包装的结构或类,可以不在库的公共类是的一部分外部看到的技术.

这会隐藏来自库用户的内部实现细节和数据.

在实现这个习惯用法时,为什么要将公共方法放在pimpl类而不是公共类上,因为公共类方法实现会被编译到库中,而用户只有头文件?

为了说明,此代码将Purr()实现放在impl类上并将其包装起来.

为什么不直接在公共类上实现Purr?

// header file:
class Cat {
    private:
        class CatImpl;  // Not defined here
        CatImpl *cat_;  // Handle

    public:
        Cat();            // Constructor
        ~Cat();           // Destructor
        // Other operations...
        Purr();
};


// CPP file:
#include "cat.h"

class Cat::CatImpl {
    Purr();
...     // The actual implementation can be anything
};

Cat::Cat() {
    cat_ = new CatImpl;
}

Cat::~Cat() {
    delete cat_;
}

Cat::Purr(){ cat_->Purr(); }
CatImpl::Purr(){
   printf("purrrrrr");
}
Run Code Online (Sandbox Code Playgroud)

c++ oop information-hiding pimpl-idiom

128
推荐指数
5
解决办法
10万
查看次数

如何隐藏jpg或gif照片中的信息?

如何在不破坏图像的情况下在jpg或gif等照片文件中写入一些信息?当然没有在照片上显示它,因为整个想法是在任何人未检测到的照片文件中发送信息(在某种程度上提供安全/隐私)!

jpeg information-hiding steganography image gif

22
推荐指数
4
解决办法
5万
查看次数

封装与信息隐藏

Ecapsulation和信息隐藏之间究竟有什么区别?

我知道将字段设为私有然后制作字段的setter和getter是ecapsulation.However封装意味着这个?

假设我有一个如下所述的课程.

public Class IsThisEncapsulation
{
    public int age;

    public void setAge(int age)
    {
       this.age=age;
    }

    public int getAge()
    {
       return age;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在是IsThisEncapsulation类是Encapsulation的一个例子吗?

现在是否会让上述类私有领域的'年龄'实现信息隐藏?

能否请您给我一些明确的例子,以帮助我清楚地区分这些概念?

java oop encapsulation information-hiding

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

命令模式似乎不必要复杂(我不明白的是什么?)

我已经阅读了命令模式,我想我错过了一些东西.Command对象的存在是为了抽象出Receiver对象的细节.在我看来,我们可以简单地停在这里,并保持对Command对象的引用,以在适当的时间执行适当的方法.

那么,为什么需要Invoker呢?这种额外的间接提供了什么优势?我们已经隐藏了命令后面的接收器的细节,那么命令随后被客户端隐藏的动机是什么?

abstraction information-hiding design-patterns command-pattern

13
推荐指数
2
解决办法
1396
查看次数

如何在我的项目中实现强大的每个请求会话模式,同时专注于信息隐藏?

我目前正在构建一个ASP.NET MVC项目,NHibernate作为其持久层.

目前,已经实现了一些功能,但只使用本地NHibernate会话:访问数据库(读取或写入)的每个方法都需要使用"using()"子句实例化自己的NHibernate会话.

问题是我想利用NHibernate的延迟加载功能来提高项目的性能.

这意味着每个请求都会打开一个NHibernate会话,直到呈现视图为止.此外,必须支持同时请求(同时多个会话).

我怎样才能尽可能干净地实现这一目标?

我在网上搜索了一下,了解了每个请求的会话模式.我看到的大多数实现使用某种Http*(HttpContext等)对象来存储会话.此外,使用Application_BeginRequest/Application_EndRequest函数很复杂,因为当我只想为每个请求实例化一次会话时,它们会针对每个HTTP请求(aspx文件,css文件,js文件等)被触发.

我担心的是我不希望我的视图或控制器能够访问NHibernate会话(或者更常见的是NHibernate命名空间和代码).这意味着我不想在控制器级别处理会话,也不想在视图级别处理会话.

我有几个选择.哪一个看起来最好?

  • 使用在控制器操作之前和之后触发的拦截器(如GRAILS).这些将打开和关闭会话/交易.这可能在ASP.NET MVC世界中吗?
  • 在Web上下文中使用NHibernate提供的CurrentSessionContext Singleton.以这个页面为例,我认为这很有希望,但仍需要控制器级别的过滤器.
  • 使用HttpContext.Current.Items存储请求会话.这与Global.asax.cs中的几行代码相结合,可以轻松地为我提供请求级别的会话.但是,这意味着将在NHibernate和我的视图(HttpContext)之间注入依赖项.

非常感谢你!

nhibernate asp.net-mvc session information-hiding

11
推荐指数
1
解决办法
6788
查看次数

通过信息隐藏有效封装的一个很好的例子?

" 抽象封装是互补的概念:抽象关注于对象的可观察行为......封装集中于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.物体的秘密对其基本特征没有贡献." - 面向对象分析与设计的Grady Booch

您能否通过信息隐藏向我展示一些有说服力的封装优势的例子?

language-agnostic oop encapsulation abstraction information-hiding

10
推荐指数
2
解决办法
4677
查看次数

隐藏jar文件中的类

是否真的不可能在jar文件中隐藏某些类?

我希望不允许直接实例化类以使其更灵活.这个罐子里只能看到工厂(或立面).

除了创建两个项目之外,还有其他办法解决这个问题吗?(两个项目:第一个包含类(实现),另一个引用第一个并包含工厂;后面只引用第二个)

java information-hiding jar facade factory-pattern

10
推荐指数
2
解决办法
1万
查看次数

是否可以隐藏在C++代码中定义的密码

...这样浏览反汇编不会立即暴露密码(声明为静态变量).举个例子,想象一个附有zip文件的程序,它必须为资产打开,但不容易被窥探.

我知道完全隐藏或保护拉链是不可能的,但我很好奇有什么方法可以至少阻止一个随意的狙击手.

谢谢!

c++ assembly information-hiding

10
推荐指数
5
解决办法
4809
查看次数