Лекция 11. Парадигмы программирования (часть 2)

При разработке сложных систем с использованием парадигмы объектно-ориентированного программирования возникает несколько проблем:

  • Поскольку классы в ООП соответствуют отдельным понятиям предметной области, различные классы тесно связаны друг с другом. Это затрудняет модификацию системы для повторного использования в других условиях.
  • Сильная связь между классами также препятствует выделению независимых или хотя бы слабо связанных между собой модулей. Модули упрощают не только повторное использование кода, но и его тестирование и сопровождение.
  • Связанность отдельных классов системы нарушает базовое правило программирования — принцип разделения ответственности (separation of concerns). Это приводит к дублированию кода и возможным плохо отслеживаемым ошибкам.

Эти проблемы решаются за счет использования парадигм программирования, расширяющих ООП:

  • компонентно-ориентированное программирование;
  • аспектное программирование;
  • сервисное программирование.

Презентация: Лекция 11.

Краткое описание парадигм

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

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

Сервисное программирование — развитие идеи компонентного программирования для распределенных приложений. В отличие от компонентов, которые, как правило, являются составными частями системы (например, в виде библиотек), сервисы расположены вне системы. Общение между системой и сервисом происходит при помощи высокоуровневых сетевых протоколов на основе HTTP. Большинство современных архитектур, поддерживающих компоненты, представляют их именно в виде сервисов.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *