有哪些不同类型的封装?
我认为这基本上是指诸如抽象、多态性和继承之类的核心 OO 概念是否正确?
我对封装的理解是它是一种隐藏数据/功能的方法,但我从来没有真正将多态性或继承视为一种封装形式,尽管我可以看到多态性如何被视为封装,因为它可以隐藏你对象的确切类型正在与之互动。
那么,您会说仅此而已,还是我缺少一些核心概念?
编辑我刚刚在评论中注意到有人提到它可能指的是私有/公共方法,也许我对这个问题的思考太多并期待一个比实际更复杂的答案?
有哪些不同类型的封装?
我认为这基本上是指诸如抽象、多态性和继承之类的核心 OO 概念是否正确?
我对封装的理解是它是一种隐藏数据/功能的方法,但我从来没有真正将多态性或继承视为一种封装形式,尽管我可以看到多态性如何被视为封装,因为它可以隐藏你对象的确切类型正在与之互动。
那么,您会说仅此而已,还是我缺少一些核心概念?
编辑我刚刚在评论中注意到有人提到它可能指的是私有/公共方法,也许我对这个问题的思考太多并期待一个比实际更复杂的答案?
你想太多我觉得。
http://en.wikipedia.org/wiki/Information_hiding
摘自这篇文章:
计算机科学中的信息隐藏是在计算机程序中隐藏最有可能发生变化的设计决策的原则,从而在设计决策发生变化时保护程序的其他部分免受更改。保护包括提供一个稳定的接口,该接口将程序的其余部分与实现(最有可能改变的细节)隔离开来。
一种常见的封装形式是使用属性来隐藏私有数据字段。一种更常见的形式是使用 OO 将软件的复杂性封装到具有角色和职责的良好划分的类中。这是 OO 的关键租户,因为它从单一的程序设计风格转变为更加结构化的风格,努力隐藏所有不相关的信息,除了与您正在处理的特定任务有关的信息。
我的观点和理解是,封装(封装)一词是为了展示而捕捉事物本质的艺术/科学。事实上,根据定义——封装就是将某物打包或封装在另一个容器中。因此,封装一词意味着将您尝试实现的内容的本质并将其包装成有用的形式,以便在必要时可以重用。
因此,为了解释这一点,这意味着将材料打包成一种以后会更有用的形式。
所以真的......按照你认为合适的方式解释这个。我认为它采用了一堆算法和实用程序,并创建了一个可以在其他项目中用作 API 的类结构。这种封装的代码可以被继承和/或扩展,以使其可用于修改目的,而无需更改 API 的基本本质。
因此,抽象、多态和继承不是封装的形式,而是扩展和修改封装代码的形式。
不同形式的封装意味着对属性、方法、字段和类的修饰符——即公共、私有、静态、虚拟(在 C# 中)。其他一切(即重载、覆盖、阴影)都是对该封装的修改或扩展。
您可以将修改后的代码视为封装,然后可以进一步继承/抽象/扩展,但要扩展的包是封装的产品。
封装不仅仅是简单的信息隐藏。这是它的一个方面。它与模块的接口有关。接口提供了两个非常重要的功能:封装和抽象。
抽象是指模块的客户端不需要知道比接口中的内容更多的信息。
和
封装是指模块的客户端无法了解接口中的内容。
( Perdita Stevens的Using UML中的两个定义)
封装由国际标准化组织的国际标准定义:“信息技术 – 开放分布式处理”,ISO/IEC 10746, 1998。
它是根据更原始的定义来定义的:
实体:任何具体或抽象的感兴趣的事物。
对象:实体的模型。一个对象的特征在于它的行为,双重地,它的状态。
(对象的)行为:行为的集合,对何时可能发生具有一组约束。
接口:对象行为的抽象,由该对象的交互的子集以及它们何时可能发生的一组约束组成。
封装:对象中包含的信息只能通过对象支持的接口的交互来访问的属性。
ISO 没有定义不同类型的封装。
其他帖子提到了信息隐藏。ISO 没有在信息隐藏方面明确定义封装,尽管它似乎是隐含的,请参阅http://www.edmundkirwan.com/pub/上的“封装理论基础”
埃德。
由于封装只是指“信息隐藏”,所以我想很多东西都可以归类为封装。然而,我倾向于将封装视为“实现隐藏”,换句话说,它是我用来在我编写的任何内容与我编写的任何客户端之间创建松散耦合的工具。
因此,我倾向于务实地相信,封装是任何范式或最佳实践,它允许我向任何客户呈现干净、可靠的界面。
通常,该词的用法与它所说的非常接近。当你包含它时,你封装了一些东西,不要让任何交易松散。考虑它的最佳方式是,您将某物放入一个黑匣子中,再也没有人可以看到细节。该框隐藏了所有内容,在其位置提供了一些其他不相关的界面。
信息隐藏只是封装的一个方面,因为除了数据之外,您还可以隐藏代码本身的任何细节。封装系统的一部分的目的是从整体中消除那一点复杂性,从而更容易理解单独的细节(双方)。更多的?
保罗。
“封装的候选定义:
来源:封装定义
实现封装有两个部分/方式:
首先,封装是一种将相关数据和行为封装成一个单元的技术,即操作(行为)的物理分组
例如:-
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;
}
}
来源:What is Encapsulation in Java - The WHAT, WHY and HOW,剧透作者以接口为例,这是不正确的。接口用于抽象