Can you summarize the following document?
        
  在面向对象的语言里,封装往往指以下两个相关联但是独立的概念,有时候这两者是存在因果关系。  一些编程语言的研究者和学者将定义1或者定义1+2作为辨认一门语言是否为面向对象语言的标准之一。一些编程语言提供了闭包作为封装,但是这种功能不属于面向对象的范畴。  在许多编程语言里,组件并不会自动隐藏并且能够被重写,因此,一些倾向于定义2的人会将信息隐藏(information hiding)作为一个单独的定义3列举出来。  在使用类的大多面向对象的编程语言中,虽然封装是被支持的,但是仍有其他替代品可以选择。

  《Design Patterns》的作者们曾经大篇幅地讨论封装和继承的矛盾。根据他们自身的经验,设计师们滥用继承。他们认为继承将破坏封装,考虑父类的实现细节将暴露给子类。  父类的内部实现对于子类来说是不透明的(实现一个子类时, 你需要了解父类的实现细节, 以此决定是否需要重写某个方法)。同时,一旦父类被修改,因为子类依赖着父类,所以子类的实现也需要被重新审视。

  封装可以隐藏成员变量以及成员函数,对象的内部实现通常被隐藏,并用定义代替。举个例子,仅仅对象自身的方法能够直接接触或者操作这些成员变量。隐藏对象内部信息能供保证一致性,当用户擅自修改内部部件的数据,这可能造成内部状态不一致或者不可用。隐藏对象内部信息能阻止这种后果。一个众所周知的好处是,降低系统的复杂度和提高健壮性。  大多数语言(如:C++、C#、 Delphi、Java)通过设定等级去控制内部信息隐藏,经典的是通过保留字codice_1 暴露信息和 codice_2去隐藏信息。一些语言(如: Smalltalk 和 Ruby )只允许对象去访问隐藏信息。  通常,也是存在方法去暴露隐藏信息,如:通过反射(Ruby、Java、C#、etc.),名字修饰(Python)

  

  

  这是一段C#代码,演示了如何使用codice_2关键字限制变量的访问:

  下面是Java的演示程序:

  下面是Python的要给实例,Python并不支持隐藏变量。然而约定俗成,codice_4 形式的变量被认为是私有变量。 class Car: redcar = Car() redcar.drive() # 打印'maximum speed is 200'  redcar._maxspeed = 10 redcar.drive() # 打印'maximum speed is 10'
在物件导向程序设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部分包装、隐藏起来的方法。同时,它也是一种防止外界呼叫端,去存取物件内部实作细节的手段,这个手段是由程序语言本身来提供的。封装被视为是物件导向的四项原则之一。