题
有哪些不同类型的封装?
我是否认为这基本上指的是核心面向对象概念,例如抽象、多态性和继承?
我对封装的理解是,它是一种隐藏数据/功能的方法,但我从未真正考虑过多态性或继承是封装的一种形式,尽管我可以看到多态性如何被视为封装,因为它可以隐藏您的对象的确切类型。正在互动。
那么,您认为仅此而已,还是我遗漏了一些核心概念?
编辑 我刚刚注意到在评论中有人提到它可以指私有/公共方法,也许我对这个问题思考太多并期待一个比实际更复杂的答案?
解决方案
你想得太多了,我认为。
http://en.wikipedia.org/wiki/Information_hiding
<强>从本文摘录强>:
信息隐藏在计算机科学中最有可能改变一个计算机程序设计决策隐藏的原则,从而保护从改变程序的其他部分,如果设计决策改变。保护涉及提供稳定的接口,其屏蔽了程序的从执行余数(最有可能来改变详细信息)。
封装的一个常见形式使用属性来隐藏私有数据字段。一个更常见的形式是采用面向对象的封装软件的复杂到井divisoned类与任务和责任。这是OO的关键坦,因为它从一个整体过程的设计风格向更加结构化的风格,努力隐藏除所有不相关的信息,其涉及到你的工作的特定任务。
其他提示
这是我的视图和理解的是,术语封装(封装)被捕获的东西的本质为显示的目的的技术/科学。事实上,顾名思义 - 封装是包装的东西或将其包含在另一个容器。因此,长期的封装,就意味着把你正在尝试如何实现和有用的形式包装,以便它可以根据需要被重用的本质。
因此,为了解释这一点,这将意味着在一个形式,将使稍后更有用包装材料。
所以,真的...将此解释为,你认为合适的。我认为这是采取了一堆的算法和工具,创建可以被用作其他项目的API类结构。这种包封的代码可以被继承和/或扩展到使其成为改性目的是有用的,而不改变API的基本实质。
因此,抽象,多态和继承不包封的形式,而是延伸和修改封装代码的形式。
不同形式的封装将意味着属性,方法,字段和类改性剂 - 即是公共的,私人的,静态的,虚拟的(在C#)。否则(即过载,覆盖,阴影)一切修改或延伸到该封装。
您可以考虑修改后的代码,其然后可以进一步继承/抽象/扩展的封装,但包要被扩展是被包封的产品。
封装由国际标准化组织的国际标准定义:“信息技术 – 开放式分布式处理”,ISO/IEC 10746,1998。
它是根据更原始的定义来定义的:
实体:任何具体或抽象的感兴趣的事物。
目的:实体的模型。一个物体的特征是其行为,并以其状态双重性。
(对象的)行为:一系列限制的动作集合。
界面:对象的行为的抽象由该对象的相互作用的子集以及一组约束可能发生。
封装:仅通过对象支持的接口处的交互才能访问对象中包含的信息的属性。
ISO 没有定义不同类型的封装。
其他帖子提到了信息隐藏。ISO 没有在信息隐藏方面明确定义封装,尽管它看起来确实是隐含的,请参阅“封装理论基础”,位于 http://www.edmundkirwan.com/pub/
埃德。
封装是比简单地信息隐藏更多。这是它的一个方面。它与接口模块做。接口提供了两个非常重要的功能:封装和抽象
抽象是当一个模块的客户端并不需要知道的是什么接口了。
和
封装是当一个模块的客户机不能够知道比是在界面以上。
(来自这两个定义的使用UML 通过珀迪塔史蒂文斯)
由于封装简单地是指“信息隐藏”然后我会想象很多东西可以被归类为封装。不过,我倾向于认为封装为“实施隐藏”的,换句话说,它是一个工具,我用它来创建什么什么,我已经写了我写的东西和客户端之间的松耦合。
所以,我倾向于相信,务实的态度,即封装是任何模式或最佳实践,让我向您介绍一个清洁,固体界面到任何客户端。
通常这个词的使用是非常接近它说什么。您封装的东西,当你包含它,不要让任何交易的松动。想一想,最好的办法是,你正在服用的东西,并把它变成一个黑盒子,没有人可以再看到细节。盒子隐藏一切,提供在其位其他一些接口解除关联。
信息隐藏是封装的一个方面,由于与数据一起还可以隐藏任何的代码本身的详细信息。封装系统的一部分,目的是绘制复杂的是位从整体走,从而更容易理解单独的细节(两侧)。 更多?
保罗。
“封装的候选定义:
- 将相关操作或事物物理分组在一起。
- 状态或数据的 GateKeeper。
- 隐藏实施。”
来源: 封装定义
实现封装有两个部分/方式:
首先,封装是一种将相关数据和行为封装到单个单元中的技术,即操作(行为)的物理分组
例如。:-
class Person {
String name;
int age;
void talk() {
}
void think() {
}
void work() {
}
void play() {
}
}
其次,封装是一种保护数据不被外界滥用的技术,称为“信息隐藏”或“数据隐藏”。
例如。:-
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
来源: Java 中的封装是什么 - 什么、为什么和如何, 剧透作者引用了 Interface 的例子,这是不正确的。接口是为了抽象