~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ F913C8329520CA45913D96D9BC3AC6CE__1714653720 ✰
Заголовок документа оригинал.:
✰ Encapsulation (computer programming) - Wikipedia ✰
Заголовок документа перевод.:
✰ Инкапсуляция (компьютерное программирование) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Encapsulation_(computer_programming) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/f9/ce/f913c8329520ca45913d96d9bc3ac6ce.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/f9/ce/f913c8329520ca45913d96d9bc3ac6ce__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 09:49:06 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 2 May 2024, at 15:42 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Инкапсуляция (компьютерное программирование) — Википедия Jump to content

Инкапсуляция (компьютерное программирование)

Из Википедии, бесплатной энциклопедии

В программных системах инкапсуляция относится к объединению данных с механизмами или методами, которые работают с данными. Это также может относиться к ограничению прямого доступа к некоторым из этих данных, например к компонентам объекта. [1] По сути, инкапсуляция не позволяет внешнему коду заниматься внутренней работой объекта.

Инкапсуляция позволяет разработчикам представить согласованный интерфейс, независимый от его внутренней реализации. Например, инкапсуляция может использоваться для сокрытия значений или состояния объекта структурированных данных внутри класса . Это предотвращает прямой доступ клиентов к этой информации способом, который может раскрыть скрытые детали реализации или нарушить инвариантность состояния , поддерживаемую методами.

Инкапсуляция также побуждает программистов помещать весь код, связанный с определенным набором данных, в один и тот же класс, что упорядочивает его для облегчения понимания другими программистами. Инкапсуляция — это метод, который способствует развязке .

Все системы объектно-ориентированного программирования (ООП) поддерживают инкапсуляцию. [2] [3] но инкапсуляция не является уникальной особенностью ООП. Реализации абстрактных типов данных , модулей и библиотек также предлагают инкапсуляцию. Сходство было объяснено теоретиками языков программирования с точки зрения экзистенциальных типов . [4]

Значение [ править ]

В объектно-ориентированных языках программирования и других смежных областях инкапсуляция относится к одному из двух связанных, но различных понятий, а иногда и к их комбинации: [5] [6]

  • Языковой механизм ограничения прямого доступа к некоторым компонентам объекта . [7] [8]
  • Языковая конструкция, которая облегчает объединение данных с методами (или другими функциями), работающими с этими данными. [1] [9]

Некоторые исследователи языков программирования и ученые используют первое значение отдельно или в сочетании со вторым как отличительную особенность объектно-ориентированного программирования , в то время как некоторые языки программирования, обеспечивающие лексические замыкания, рассматривают инкапсуляцию как особенность языка, ортогональную объектной ориентации.

Второе определение отражает то, что во многих объектно-ориентированных языках и других связанных областях компоненты не скрываются автоматически, и это можно переопределить. Таким образом, сокрытие информации определяется как отдельное понятие теми, кто предпочитает второе определение.

Функции инкапсуляции поддерживаются с помощью классов в большинстве объектно-ориентированных языков, хотя существуют и другие альтернативы.

Инкапсуляция и наследование [ править ]

Авторы книги «Шаблоны проектирования» обсуждают противоречия между наследованием подробно и инкапсуляцией и утверждают, что, по их опыту, дизайнеры злоупотребляют наследованием. Они утверждают, что наследование часто нарушает инкапсуляцию, поскольку наследование раскрывает подклассу детали реализации его родителя. [10] Как описано в проблеме йо-йо , чрезмерное использование наследования и, следовательно, инкапсуляции может стать слишком сложным и трудным для отладки.

Скрытие информации [ править ]

Согласно определению, согласно которому инкапсуляция «может использоваться для сокрытия членов данных и функций-членов», внутреннее представление объекта обычно скрыто за пределами определения объекта. Обычно только собственные методы объекта могут напрямую проверять его поля или манипулировать ими. Сокрытие внутренних частей объекта защищает его целостность, не позволяя пользователям переводить внутренние данные компонента в недопустимое или противоречивое состояние. Предполагаемое преимущество инкапсуляции состоит в том, что она может снизить сложность системы и, таким образом, повысить ее надежность , позволяя разработчику ограничить взаимозависимости между программными компонентами. [ нужна цитата ]

Некоторые языки, такие как Smalltalk и Ruby, допускают доступ только через объектные методы, но большинство других (например, C++ , C# , Delphi или Java) [11] ) предлагают программисту некоторый контроль над тем, что скрыто, обычно с помощью таких ключевых слов, как public и private. [8] Стандарт ISO C++ относится к protected, private и publicкак « спецификаторы доступа » и что они «не скрывают никакой информации». Сокрытие информации достигается путем предоставления скомпилированной версии исходного кода, которая подключается через файл заголовка.

Почти всегда есть способ обойти такую ​​защиту — обычно через API отражения (Ruby, Java, C# и т. д.), иногда с помощью такого механизма, как искажение имен ( Python ), или использования специальных ключевых слов, например friendв С++. объекта Системы, которые обеспечивают безопасность на основе возможностей (придерживаясь модели возможностей объекта ), являются исключением и гарантируют строгую инкапсуляцию.

Примеры [ править ]

Ограничение полей данных [ править ]

Такие языки, как C++ , C# , Java , [11] PHP , Swift и Delphi предлагают способы ограничить доступ к полям данных.

Ниже приведен пример на C# , показывающий, как можно ограничить доступ к полю данных с помощью private ключевое слово:

класс   Program 
 { 
     общественный   класс   Account 
     { 
         частное   десятичное   _accountBalance   =   500,00  м  ; 

          общественный   десятичный   CheckBalance  () 
         { 
             return   _accountBalance  ; 
          } 
     } 

     static   void   Main  () 
     { 
         Учетная запись   myAccount   =   новая   учетная запись  (); 
          десятичное число   myBalance   =   myAccount  .   Проверить баланс  (); 

          /* Этот метод Main может проверять баланс через общедоступный 
 * метод «CheckBalance», предоставляемый классом «Account» 
 , * но он не может манипулировать значением «accountBalance» */ 
     } 
 } 

Ниже приведен пример на Java :

общественный   класс   Сотрудник   { 
     частная   BigDecimal   зарплата   =   новый   BigDecimal  (  50000.00  ); 
    
      public   BigDecimal   getSalary  ()   { 
         верните   это  .   зарплата  ; 
      } 

     Public   static   void   main  ()   { 
         Сотрудник   e   =   новый   сотрудник  (); 
          BigDecimal   sal   =   e  .   получить зарплату  (); 
      } 
 } 

Инкапсуляция также возможна в необъектно-ориентированных языках. В C , например, структура может быть объявлена ​​в общедоступном API через файл заголовка для набора функций, которые работают с элементом данных, содержащим элементы данных, которые недоступны для клиентов API с extern ключевое слово. [12]

// Заголовочный файл "api.h" 

 struct   Entity  ;             // Непрозрачная структура со скрытыми членами 

 // Функции API, которые работают с объектами 'Entity' 
 extern   struct   Entity   *    open_entity  (  int   id  ); 
  extern   intprocess_entity                (  *  struct   Entity   ;  info  ) 
  extern   void               close_entity  (  struct   Entity   *  info  ); 
  // Ключевые слова extern здесь излишни, но это не помешает. 
  // extern определяет функции, которые можно вызывать вне текущего файла, поведение по умолчанию даже без ключевого слова 

Клиенты вызывают функции API для выделения, обработки и освобождения объектов непрозрачного типа данных . Содержимое этого типа известно и доступно только реализации функций API; клиенты не могут напрямую получить доступ к его содержимому. Исходный код этих функций определяет фактическое содержимое структуры:

// Файл реализации "api.c" 

 #include   "api.h" 

 struct   Entity   { 
     int       ent_id  ;            // Идентификатор 
     char      ent_name  [  20  ];      // Имя 
     ...   и   другие   члены   ... 
 }; 

 Реализации функций API 
 struct   Entity   *   open_entity  (  int   id  ) 
 {   ...   } 

 intprocess_entity   {  (  struct   Entity   *  info  ) 
 {   ...   } 

 void   close_entity  (  struct   Entity   *  info  ) 
 ...   }    // 

Искажение имени [ править ]

Ниже приведен пример Python , который не поддерживает ограничения доступа к переменным. Однако соглашение заключается в том, что переменная, имя которой начинается с подчеркивания, должна считаться частной. [13]

class   Car  :  
     def   __init__  (  self  )   ->   None  : 
         self  .   _maxspeed   =   200 
 
     def   Drive  (  self  )   ->   Нет  : 
         print  (  f  «Максимальная скорость равна  {  self  .  _maxspeed  }  ) 
 
 redcar   =   Car  () 
 redcar  .   привод  ()    # Это напечатает «Максимальная скорость 200». 

  Красная машина  .   _maxspeed   =   10 
 красная машина  .   привод  ()    # Это напечатает «Максимальная скорость 10». 

См. также [ править ]

Цитаты [ править ]

  1. ^ Перейти обратно: а б Роджерс, Вм. Пол (18 мая 2001 г.). «Инкапсуляция — это не сокрытие информации» . JavaWorld . Проверено 20 июля 2020 г.
  2. ^ «Что такое объектно-ориентированное программирование (ООП)?» . Архитектура приложения . Проверено 2 марта 2024 г.
  3. ^ «Инкапсуляция в объектно-ориентированном программировании (OOPS)» . www.enjoyalgorithms.com . Проверено 2 марта 2024 г.
  4. ^ Пирс 2002 , § 24.2 Абстракция данных с помощью экзистенциалов
  5. ^ Скотт, Майкл Ли (2006). Прагматика языка программирования (2-е изд.). Морган Кауфманн. п. 481. ИСБН  978-0-12-633951-2 . Механизмы инкапсуляции позволяют программисту группировать данные и подпрограммы, которые с ними работают, в одном месте и скрывать ненужные детали от пользователей абстракции.
  6. ^ Дейл, Нелл Б.; Уимс, Чип (2007). Программирование и решение проблем с помощью Java (2-е изд.). Джонс и Бартлетт. п. 396. ИСБН  978-0-7637-3402-2 .
  7. ^ Митчелл, Джон К. (2003). Концепции в языках программирования . Издательство Кембриджского университета. п. 522. ИСБН  978-0-521-78098-8 .
  8. ^ Перейти обратно: а б Пирс, Бенджамин (2002). Типы и языки программирования . МТИ Пресс. п. 266. ИСБН  978-0-262-16209-8 .
  9. ^ Коннолли, Томас М.; Бегг, Кэролайн Э. (2005). «Глава 25: Введение в объектную DMBS § Объектно-ориентированные концепции». Системы баз данных: практический подход к проектированию, внедрению и управлению (4-е изд.). Пирсон Образование. п. 814. ИСБН  978-0-321-21025-8 .
  10. ^ Гамма, Эрих; Хелм, Ричард; Джонсон, Ральф; Влиссидес, Джон (1994). Шаблоны проектирования . Аддисон-Уэсли. ISBN  978-0-201-63361-0 .
  11. ^ Перейти обратно: а б Bloch 2018 , стр. 73–77, Глава §4, пункт 15. Минимизируйте доступность классов и членов.
  12. ^ Кинг, КН (2008). Программирование на C: современный подход (2-е изд.). WW Нортон и компания. п. 464. ИСБН  978-0393979503 .
  13. ^ Бадер, Дэн. «Значение подчеркиваний в Python» . Улучшите свои навыки Python . Проверено 1 ноября 2019 г.

Ссылки [ править ]

  • Блох, Джошуа (2018). «Эффективная Java: Руководство по языку программирования» (третье изд.). Аддисон-Уэсли. ISBN  978-0134685991 .
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: F913C8329520CA45913D96D9BC3AC6CE__1714653720
URL1:https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)
Заголовок, (Title) документа по адресу, URL1:
Encapsulation (computer programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)