问题标签 [encapsulation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encapsulation - 抽象 VS 信息隐藏 VS 封装
你能告诉我软件开发中的抽象和信息隐藏有什么区别吗?
我很困惑。抽象隐藏了细节实现,而信息隐藏抽象了某物的全部细节。
更新:我为这三个概念找到了一个很好的答案。请参阅下面的单独答案以获取从那里获取的几个引文。
python - 其他语言中的 Python 描述符协议模拟?
有没有其他语言实现的类似 Python 描述符协议的东西?这似乎是一种增加模块化/封装性而不会使包含类的实现膨胀的好方法,但我从未听说过任何其他语言中有类似的东西。由于查找开销,它是否可能在其他语言中不存在?
python - 为什么 Python 的“私有”方法实际上不是私有的?
Python 使我们能够通过在名称前添加双下划线来在类中创建“私有”方法和变量,例如:__myPrivateMethod()
. 那么,如何解释这一点
这是怎么回事?!
我会为那些不太明白的人解释一下。
我用公共方法和私有方法创建了一个类并实例化它。
接下来,我调用它的公共方法。
接下来,我尝试调用它的私有方法。
这里的一切看起来都不错;我们无法调用它。事实上,它是“私人的”。嗯,实际上并非如此。在对象上运行dir()揭示了 Python 为所有“私有”方法神奇地创建的新神奇方法。
这个新方法的名字总是一个下划线,然后是类名,然后是方法名。
封装这么多,嗯?
无论如何,我总是听说 Python 不支持封装,那么为什么还要尝试呢?是什么赋予了?
language-agnostic - 实践中的私人与公共成员(封装有多重要?)
面向对象编程的最大优势之一是封装,我们(或者至少我已经)被教导的“真理”之一是成员应该始终保持私有并通过访问器和修改器提供方法,从而确保验证和验证更改的能力。
不过,我很好奇,这在实践中到底有多重要。特别是,如果您有一个更复杂的成员(例如集合),将其公开而不是制作一堆方法来获取集合的键,从集合中添加/删除项目可能非常诱人,等等
你一般遵守规则吗?您的答案是否会根据它是为自己编写的代码还是供他人使用的代码而改变?我是否因为这种混淆而缺少更微妙的原因?
c++ - 这是封装集合的好(正确)方法吗?
虽然 msdn 说不std::list
应该在删除或插入时执行元素重定位,但返回指向列表元素的指针是否是一种好的和常用的方法?
PS:我知道我可以使用指针集合(并且必须使用delete
析构函数中的元素),共享指针集合(我不喜欢)等。
c++ - 如何在不暴露使用的容器的情况下暴露迭代器?
我已经使用 C# 有一段时间了,回到 C++ 是一件很头疼的事情。我正在尝试将我的一些实践从 C# 带到 C++,但我发现了一些阻力,我很乐意接受你的帮助。
我想为这样的类公开一个迭代器:
我在尝试一些不成问题的事情吗?我应该只是 typedef std::vector< T >::iterator 吗?我希望只依赖于迭代器,而不是实现容器......
python - 用私有成员子类化一个类
关于 python 的真正好处之一是您可以简单地命名与访问器同名的变量:
有没有一种简单的方法可以访问我希望子类化的类的私有成员?通常我希望简单地使用类中的原始数据对象,而不必一直使用访问器和修改器。
我知道这似乎违背了私有和公共的一般概念,但通常我试图子类化的类是我自己的类之一,我很乐意将成员从子类公开,而不是该类的实例. 有没有提供这种区别的干净方法?
php - 为什么不在 PHP 中使用“受保护”或“私有”?
我一直在使用 Joomla 框架,我注意到他们使用约定来指定私有或受保护的方法(他们_
在方法名称前加上下划线“”),但他们没有明确声明任何方法public
,private
或protected
. 为什么是这样?跟便携有关系吗?旧版本的 PHP 中是否不提供、public
或private
关键字?protected
c++ - 使用矢量作为私有/公共成员的类设计?
将容器类或其他类作为私有或公共成员放入类中的最佳方法是什么?
要求:
1.Vector< someclass> 在我的班级里
2.需要向量的添加和计数接口