Сила ОО дизайна в семантике или инкапсуляции? - PullRequest
19 голосов
/ 21 марта 2009

Объектно-ориентированное проектирование (OOD) объединяет данные и их методы. Это, насколько я вижу, позволяет достичь двух замечательных вещей: обеспечивает инкапсуляцию (поэтому мне все равно, какие данные есть, только как я получаю нужные значения) и семантику (она связывает данные вместе с именами и методы последовательно используют данные, как первоначально предполагалось).

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

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

Или инкапсуляция является ключом ко всему стоящему коду?

Редактировать: я имею в виду именно тот тип инкапсуляции, который ОО предоставляет здесь. changeColor(door,blue) становится door.changeColor(blue).

Ответы [ 11 ]

0 голосов
/ 05 апреля 2009

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

Наличие возможности обеспечить семантический контекст и инкапсуляцию это только основные возможности класса в ОО. (Как кирпичная банка выдерживать определенную силу и требовать определенного пространства.)

Чтобы продолжить аналогию: Чтобы получить максимум от кирпичей, просто сложите их вместе. То же самое относится и к классам и объектам.

Существует множество шаблонов , которые можно использовать для OO программирование. Большинство из них полагаются на способности «инкапсуляции» и "семантика", о которой Вы упомянули.

Некоторые из этих шаблонов являются даже ответом на третий абзац вашего вопроса:

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