Структурирование информационных систем. Проектирование информационных систем. Понятие декомпозиции, страница 2

  • Наследование от родителей к детям не применимо для объектно-ориентированного подхода
  • Наследование – вид связи между классами, при котором класс-наследник обладает всеми возможностями класса-предка, дополняя и расширяя их за счёт использования новых атрибутов и методов
  • Отношение наследования описывает переход от абстрактных классов к конкретным
  • В классе-наследнике может быть ограничено использование атрибутов и методов класса-предка
  • Виртуальные методы позволяют изменять поведение класса-наследника
  • С наследованием связан полиморфизм – разнообразие поведения классов-потомков по отношению к классу-предку при вызове одинаковых методов

Понятие программного интерфейса

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

Понятие агрегации

  • Агрегация – отношение между объектами (а не классами, как наследование), указывающее на соотношение часть-целое
  • Пример: автомобиль состоит из одного кузова, одного двигателя и четырёх колёс
  • В агрегации зависимость целого от части является слабой (изменения в объектах агрегации не всегда приводят к изменениям состояния агрегации)
  • Агрегация является динамически гибкой, поскольку количество объектов внутри агрегации может изменяться

Структурированность программного продукта

  • Современные программные продукты не строятся целиком из одного исполняемого модуля
  • Используются разбиение на сборки (компоненты)
  • Приложение может использовать сборки других приложений, разработанные другими производителями
  • Сборки можно заменять без перекомпиляции всего приложения, что может породить DLL Hell
  • Пример использования сборок – одинаковые графические «движки» в играх
  • Сборка – файл, содержащий скомпилированный программный код, ресурсы и метаинформацию
  • Ресурсы – дополнительные данные, необходимые для работы ПО, например, рисунки
  • Метаинформация – информация, поясняющая название, состав, версию и назначение сборки
  • Между сборками устанавливаются отношения агрегации, в результате появляется новая сущность – программный продукт

Принципы разбиения ПО на сборки

  • Масштабируемость – возможность лёгкого и быстрого увеличения производительности приложения
  • Производительность – возможность приложения реагировать на внешние воздействия с заданной скоростью, родственное понятие – время реакции системы
  • Поддерживаемость – степень лёгкости повседневного обслуживания системы
  • Повторное использование – выделение сборок, пригодных для использования в других приложениях
  • Структурированность – определяется количеством сервисов, сгруппированных в рамках одного объекта, а также размером и количеством объектов, размещённых в сборке

Сцепление и связанность

  • Сцепление (cohesion) – связь между различными внутренними элементами внутри одного компонента
  • Связанность (coupling) – связанность данного компонента с другими
  • Правило хорошего разбиения на компоненты (сборки) – тесное сцепление и слабая связанность (tight cohesion and loose coupling)

Виды сцепления

  • Функциональное – модуль выполняет только одну задачу, это самый сильный тип сцепления
  • Последовательное – модуль содержит операции, выполняющиеся в определённом порядке и использующие общие данные
  • Коммуникационное – операции внутри модуля используют общие данные, но никак больше не связаны, так можно снизить нагрузку при передаче данных внутри приложения
  • Временное – операции объединены только потому, что они выполняются совместно

Неэффективное сцепление

  • Процедурное – операции сгруппированы только потому, что они используются последовательно, в отличии от последовательного сцепления операции не используют общие данные
  • Случайное – операции сгруппированы без видимой родственной связи

Связывание

  • Тесное – компонент сильно зависит от других компонентов
  • Слабое – компонент либо совсем независим, либо почти независим от других компонентов
  • Наличие связи между компонентами обязательно должно быть чётко определено и по возможности должно быть очевидным