Опытные разработчики хорошо знакомы с объектно-ориентированным программированием (ООП). Новички, вероятно, изучали этот принцип, включая инкапсуляцию — один из его фундаментальных аспектов. Насколько хорошо вы понимаете инкапсуляцию?
Заблуждения об инкапсуляции
На практике встречаются программисты, неправильно понимающие этот термин. Рассмотрим три примера кода (предположим, они приведены здесь):
Можете ли вы определить, какой из этих классов лучше соответствует принципу инкапсуляции?
Ответ: ни один из них.
Что такое инкапсуляция на самом деле?
Распространенное заблуждение — считать инкапсуляцию простым разграничением доступа к полям с помощью модификаторов public, protected и т.д. Даже если поля приватные, но есть публичные методы для изменения их значений, инкапсуляция не соблюдается. В каждом из примеров поля можно произвольно изменять, читая и записывая их значения. Следовательно, ни один из классов не инкапсулирован.
Инкапсуляция — это защита инвариантов объекта, защита его внутреннего состояния от неправильного изменения. Идеально инкапсулированный код не допускает прямого изменения внутренних данных. Изменения происходят только через специально определенные методы, абстрагирующие эти операции. Хотя изначально инкапсуляцию рассматривали как простое объединение методов и данных, главное — защита инвариантов, а не просто упаковка.
Как писать действительно инкапсулированный код?
(Ссылка на курс удалена по просьбе)