Какой слой отсутствует в разделении программного обеспечения

Обновлено: 02.07.2024

Разделение проблем приводит к большей степени свободы для некоторых аспектов разработки, развертывания или использования программы. Общим среди них является повышенная свобода упрощения и сопровождения кода. Когда задачи четко разделены, появляется больше возможностей для обновления модуля, повторного использования и независимой разработки. Скрытие деталей реализации модулей за интерфейсом позволяет улучшить или изменить отдельный раздел кода проблемы без необходимости знать детали других разделов и без необходимости вносить соответствующие изменения в эти другие разделы. Модули также могут предоставлять различные версии интерфейса, что увеличивает свободу обновления сложной системы по частям без временной потери функциональности.

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

СОДЕРЖАНИЕ

Реализация

Разделение интересов является важным принципом дизайна и во многих других областях, таких как городское планирование , архитектура и информационный дизайн . Цель состоит в том, чтобы более эффективно понимать, проектировать и управлять сложными взаимозависимыми системами, чтобы функции можно было повторно использовать, оптимизировать независимо от других функций и изолировать от возможного отказа других функций.

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

Источник

Пятнадцать лет спустя стало очевидно, что термин разделение интересов становится общепринятой идеей. В 1989 году Крис Рид написал книгу под названием Элементы функционального программирования, в которой описывается разделение задач:

  1. опишите, что нужно вычислить;
  2. организовать последовательность вычислений на небольшие шаги;
  3. организовать управление памятью во время вычислений.

Рид продолжает говорить:

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

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

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

Примеры

Стек интернет-протокола

Разделение проблем имеет решающее значение при проектировании Интернета. В Internet Protocol Suite были приложены большие усилия для разделения проблем на четко определенные уровни . Это позволяет разработчикам протоколов сосредоточиться на проблемах на одном уровне и игнорировать другие уровни. Протокол прикладного уровня SMTP, например, касается всех деталей проведения сеанса электронной почты через надежную транспортную службу (обычно TCP ), но ни в коей мере не озабочен тем, как транспортная служба делает эту службу надежной. Точно так же TCP не заботится о маршрутизации пакетов данных, которая обрабатывается на уровне Интернета .

HTML, CSS, JavaScript

Язык разметки гипертекста (HTML), каскадные таблицы стилей (CSS) и JavaScript (JS) - это дополнительные языки, используемые при разработке веб-страниц и веб-сайтов. HTML в основном используется для организации контента веб-страниц, CSS используется для определения стиля представления контента, а JS определяет, как контент взаимодействует и ведет себя с пользователем. Исторически это было не так: до появления CSS HTML выполнял как функции определения семантики, так и стиля.

Предметно-ориентированное программирование

Аспектно-ориентированное программирование

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

Уровни анализа в искусственном интеллекте

В когнитивной науке и искусственном интеллекте принято ссылаться на уровни анализа Дэвида Марра . В любой момент времени исследователь может сосредоточиться на (1) том, что необходимо вычислить какому-либо аспекту интеллекта, (2) используемому алгоритму или (3) тому, как этот алгоритм реализован на оборудовании. Это разделение задач аналогично разделению интерфейса / реализации в программной и аппаратной инженерии.

Нормализованные системы

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

SoC через частичные классы

Разделение проблем может быть реализовано и принудительно реализовано через частичные классы .

Читайте также: