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

Инкапсулированный объект допускает внешнее взаимодействие только через интерфейс объекта. Все взаимодействие с объектом осуществляется посредством вызова методов, доступных в интерфейсе.

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

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 за то, что они сыграли такую ​​большую роль в этом путешествии.