Tag: 信息隐藏

抽象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__', […]

为什么要使用“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() […]