Как сокрытие информации помогает в модульности?

StackOverflow https://stackoverflow.com/questions/1641742

  •  10-07-2019
  •  | 
  •  

Вопрос

Как сокрытие информации помогает отделить модули, составляющие систему?

Это было полезно?

Решение

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

Показательный пример. Допустим, вы реализовали структуру данных, которая содержит строки в массиве. Если вы выставите массив, пользователи вашей структуры данных могут просто использовать str [7] , чтобы получить строку в позиции 7.

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

Это сломает ваших клиентов, потому что они будут ожидать строк, а не указателей. Каждый клиент должен был бы измениться, чтобы получить указатели из массива, а затем искать их в дереве.

Однако, если вы полностью скрыли реализацию и просто предоставили функцию:

String getStringAt (int n);

вы просто изменили бы структуру данных и функцию, чтобы она оставалась совместимой.

Клиенты не ломаются, потому что ваш интерфейс прикладного программирования (API) не изменился.

Одно из самых важных правил, которым я следую в классах, - стремиться к максимальной согласованности, минимальной связи . Другими словами, у одного класса должно быть все, что ему нужно (не более), и он должен иметь как можно меньше обмена информацией с внешним миром.

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

Другие советы

Data Hiding не настолько сильно разъединяет модули, что помогает ограничить связь между ними.
Это связано с тем, что ни один из скрытых элементов не может использоваться каким-либо другим модулем, кроме того, в котором они определены, что ограничивает возможные привязки / зависимости / call-it-what-you-may, которые "соединяют" модули вместе.

Другими словами, он ограничивает межмодульные обмены тем, которые специально определены в API , и этот факт очень помогает при изменении реализации данного модуля, потому что так долго поскольку API остается прежним, взаимодействие модуля будет работать. (Нет необходимости просматривать код, чтобы найти, если каким-то образом модуль A использовал переменную x из модуля B (если B скрывает x, он единственный, кто его использует!)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top