Инкапсуляция – это объединение различных элементов в единый блок, обычно в целях безопасности. Обычно инкапсуляция происходит с использованием класса для объединения методов одного типа.
Инкапсулированный объект допускает внешнее взаимодействие только через интерфейс объекта. Все взаимодействие с объектом осуществляется посредством вызова методов, доступных в интерфейсе.
Инкапсуляция играет жизненно важную роль в объектно-ориентированном программировании; это обеспечивает большую безопасность программы, предоставляющей только необходимые данные для общедоступного интерфейса объекта. Это подвергает риску непреднамеренное вмешательство как можно меньшего количества данных.
Ruby реализует инкапсуляцию через:
— Частные ключевые слова
— Открытые ключевые слова.
Частный:
Область доступа для закрытого метода ограничена только областью действия класса. Это означает, что закрытый метод недоступен из-за пределов класса. Единственный способ получить доступ к данным в закрытом методе — это вызвать его из общедоступного метода.
Access Scope: Where in a program a varaible/method can be accessed. Public Method: Method exposed from a public interface. Private Method: Method available only within a class, cutting access from outside of the class.
В строке 1 конструктор определен в строках 3–4 для назначения аргументов name и age переменным экземпляра @name и @age.  Эти переменные экземпляра недоступны из-за пределов класса _5, поскольку в общедоступном интерфейсе не определен метод получения.
Защищено:
Защищенный метод очень похож на частный метод, за исключением того, что защищенный метод может быть вызван только из класса, но не каким-либо несвязанным классом.
Например:
В приведенном выше коде introduce()ссылается на методы получения и установки для переменных name и age.  Методы доступа инициализируются ключевым словом protected, что делает attr_reader :name, :age защищенными методами.
Если теория верна, я должен иметь доступ к :name и :age в классах Pet и Dog, с NoMethodError выброшенным, когда я вызываю sparky.name и sparky.age .
Этот пример кода демонстрирует поведение защищенных методов: когда я пытаюсь вызвать защищенный метод/состояние в его классе или производных классах, я могу. Однако к защищенному методу нельзя получить доступ за пределами его класса/производных классов, это вызовет ошибку.
Кроме того, защищенные методы позволяют производному классу получить доступ к поведению суперкласса, которое в противном случае было бы скрыто от общедоступного интерфейса.  Это демонстрируется с помощью introduce() доступа к защищенным методам получения.  Хотя эти методы получения недоступны из общедоступного интерфейса, использование ключевого слова protected позволяет программисту предоставить доступ к скрытому поведению для повышения производительности программы.
Инкапсуляция также описывает «объединение» данных в отдельные блоки. Это демонстрируется с помощью:
- Классы: инкапсуляция методов
- Методы: инкапсуляция логики
- Объекты: инкапсуляция состояния
Классы «объединяют» методы в отдельные блоки, методы «объединяют» логику в один блок, а объекты объединяют «состояние» в один блок. Доступом к данным в этих блоках можно управлять на основе интерфейса объекта.
Interface: Logical point where objects can communicate with one another.
Резюме:
Эта статья была написана, чтобы четко сформулировать концепции объектно-ориентированного программирования, в частности, инкапсуляции. Я надеюсь, что это помогло вам (читателям) в вашем путешествии по пути к овладению искусством ремесла разработки программного обеспечения.

Большое спасибо чрезвычайно услужливому и дружелюбному персоналу Launch School за то, что они сыграли такую большую роль в этом путешествии.
 
                                                                     
                                                                     
                                                                    