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)是指,一種將抽象性函式介面的實作細節部分包裝、隱藏起來的方法。同時,它也是一種防止外界呼叫端,去存取物件內部實作細節的手段,這個手段是由程式語言本身來提供的。封裝被視為是物件導向的四項原則之一。