有哪些不同类型的封装?

时间:2008-12-22 01:54:21

标签: oop encapsulation

有哪些不同类型的封装?

我认为这基本上是指中心OO概念,如抽象,多态和继承吗?

我对封装的理解是它是一种隐藏数据/功能的方法,但我从来没有真正考虑过多态性或继承是一种封装形式,虽然我可以看到多态如何被认为是封装,因为它可以隐藏确切的类型你正在与之互动的对象。

那么,你会说是关于它的,还是我错过了一些核心概念?

编辑我刚才在评论中注意到有人提到它可能会引用私人/公共方法,也许我正在考虑这个问题,并期待一个比实际更复杂的答案?

7 个答案:

答案 0 :(得分:3)

你想的太多了。

http://en.wikipedia.org/wiki/Information_hiding

摘自本文

隐藏在计算机科学中的信息是将设计决策隐藏在最有可能改变的计算机程序中的原则,从而在设计决策改变时保护程序的其他部分不被改变。保护涉及提供一个稳定的接口,以保护程序的其余部分免受实现(最有可能改变的细节)。

一种常见的封装形式是使用属性来隐藏私有数据字段。更常见的形式是使用OO将软件的复杂性封装到具有角色和职责的良好分类中。这是OO的一个关键角色,因为它从单一的程序设计风格转变为更加结构化的风格,它努力隐藏所有无关的信息,除了与你工作的特定任务有关的信息。

答案 1 :(得分:1)

我的观点和理解是,术语封装(封装)是为了展示而捕捉某物的本质的艺术/科学。事实上,根据定义 - 封装是封装东西或将其封装在另一个容器中。因此,术语封装将意味着采取您试图实现的目标的本质,并将其打包成有用的形式,以便在必要时可以重复使用。

因此,为了解释这一点,它意味着将材料打包成一种形式,以便以后更有用。

所以真的......按照你认为合适的方式解释这个。我认为这需要一堆算法和实用程序,并创建一个可以在其他项目中用作API的类结构。可以继承和/或扩展此封装代码,以使其在修改目的时有用,而无需更改API的基本要素。

因此,抽象,多态和继承不是封装的形式,而是扩展和修改封装代码的形式。

不同形式的封装意味着属性,方法,字段和类的修饰符 - 即公共,私有,静态,虚拟(在C#中)。其他所有内容(即重载,覆盖,阴影)都是对该封装的修改或扩展。

您可以将修改后的代码视为可以进一步继承/抽象/扩展的封装,但要扩展的是封装产品。

答案 2 :(得分:1)

封装不仅仅是信息隐藏。这是它的一个方面。它与模块的接口有关。接口提供了两个非常重要的功能:封装和抽象。

  

抽象是指模块的客户端不需要知道的内容比界面中的更多。

  

封装是指模块的客户端无法了解接口中的内容。

(来自Perdita Stevens的使用UML 的两个定义)

答案 3 :(得分:1)

封装由国际标准化组织的国际标准定义:“信息技术 - 开放分布式处理”,ISO / IEC 10746,1998。

它是根据更原始的定义来定义的:

实体:任何感兴趣的具体或抽象事物。

对象:实体的模型。一个对象的特点是它的行为, 双重地,由其州。

(对象的)行为:具有一组约束的动作集合 什么时候可能发生。

接口:由a组成的对象行为的抽象 该对象的交互子集以及一组约束 何时可能发生。

封装:对象中包含的信息所属的属性 只能通过支持的接口上的交互访问 对象

ISO没有定义不同类型的封装。

其他帖子提到信息隐藏。 ISO没有明确地根据信息隐藏定义封装,虽然它似乎是隐含的,参见{封装理论基础知识',http://www.edmundkirwan.com/pub/

答案 4 :(得分:0)

由于封装仅仅是指“信息隐藏”,因此我可以想象很多东西可以归类为封装。然而,我倾向于将封装视为“实现隐藏”,换句话说,它是一种工具,我用它来创建我写的任何东西和我所写的任何客户端之间的松散耦合。

因此,我倾向于相信,实际上,封装是任何范例或最佳实践,它允许我向任何客户端提供干净,可靠的界面。

答案 5 :(得分:0)

一般来说,这个词的用法与它所说的非常接近。当你包含它时,你封装了一些东西,并且不要让任何交易松散。考虑它的最佳方式是你正在拿东西把它放进一个黑盒子里,再没人能看到细节了。盒子隐藏了一切,提供了一些其他不相关的界面。

信息隐藏只是封装的一个方面,因为除了数据之外,您还可以隐藏代码本身的任何细节。封装系统的一部分的目的是从整体上提取一点复杂性,从而更容易理解单独的细节(在两侧)。 More?

保罗。

答案 6 :(得分:0)

"封装的候选定义:

  • 将相关操作或事物物理分组。
  • 状态或数据的GateKeeper。
  • 隐藏实施。"

来自:Encapsulation Definition

实现封装有两个部分/方法:

  •   

    首先,封装是一种将相关数据和行为打包到一个单元中的技术,即操作的物理分组(行为)

E.g: -

class Person {
    String name;
    int age;

    void talk() {
    }

    void think() {
    }

    void work() {
    }

    void play() {
    }
}
  •   

    其次,封装是一种保护数据不被外界滥用的技术,被称为“信息隐藏”或“数据隐藏”。

E.g: -

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剧透作者引用Interface作为示例,但事实并非如此。界面用于抽象