-
Наследование от родителей к детям не применимо для объектно-ориентированного подхода
-
Наследование – вид связи между классами, при котором класс-наследник обладает всеми возможностями класса-предка, дополняя и расширяя их за счёт использования новых атрибутов и методов
-
Отношение наследования описывает переход от абстрактных классов к конкретным
-
В классе-наследнике может быть ограничено использование атрибутов и методов класса-предка
-
Виртуальные методы позволяют изменять поведение класса-наследника
-
С наследованием связан полиморфизм – разнообразие поведения классов-потомков по отношению к классу-предку при вызове одинаковых методов
Понятие программного интерфейса
-
Интерфейс представляет собой класс, в котором присутствуют только операции (методы)
-
Интерфейсы участвуют в наследовании
-
Интерфейсы помогают обеспечить полиморфизм
-
Интерфейсы предоставляют возможность вызова операций (методов) для неизвестных на момент написания кода классов
-
Наиболее широко применяются в COM
Понятие агрегации
-
Агрегация – отношение между объектами (а не классами, как наследование), указывающее на соотношение часть-целое
-
Пример: автомобиль состоит из одного кузова, одного двигателя и четырёх колёс
-
В агрегации зависимость целого от части является слабой (изменения в объектах агрегации не всегда приводят к изменениям состояния агрегации)
-
Агрегация является динамически гибкой, поскольку количество объектов внутри агрегации может изменяться
Структурированность программного продукта
-
Современные программные продукты не строятся целиком из одного исполняемого модуля
-
Используются разбиение на сборки (компоненты)
-
Приложение может использовать сборки других приложений, разработанные другими производителями
-
Сборки можно заменять без перекомпиляции всего приложения, что может породить DLL Hell
-
Пример использования сборок – одинаковые графические «движки» в играх
-
Сборка – файл, содержащий скомпилированный программный код, ресурсы и метаинформацию
-
Ресурсы – дополнительные данные, необходимые для работы ПО, например, рисунки
-
Метаинформация – информация, поясняющая название, состав, версию и назначение сборки
-
Между сборками устанавливаются отношения агрегации, в результате появляется новая сущность – программный продукт
Принципы разбиения ПО на сборки
-
Масштабируемость – возможность лёгкого и быстрого увеличения производительности приложения
-
Производительность – возможность приложения реагировать на внешние воздействия с заданной скоростью, родственное понятие – время реакции системы
-
Поддерживаемость – степень лёгкости повседневного обслуживания системы
-
Повторное использование – выделение сборок, пригодных для использования в других приложениях
-
Структурированность – определяется количеством сервисов, сгруппированных в рамках одного объекта, а также размером и количеством объектов, размещённых в сборке
Сцепление и связанность
-
Сцепление (cohesion) – связь между различными внутренними элементами внутри одного компонента
-
Связанность (coupling) – связанность данного компонента с другими
-
Правило хорошего разбиения на компоненты (сборки) – тесное сцепление и слабая связанность (tight cohesion and loose coupling)
Виды сцепления
-
Функциональное – модуль выполняет только одну задачу, это самый сильный тип сцепления
-
Последовательное – модуль содержит операции, выполняющиеся в определённом порядке и использующие общие данные
-
Коммуникационное – операции внутри модуля используют общие данные, но никак больше не связаны, так можно снизить нагрузку при передаче данных внутри приложения
-
Временное – операции объединены только потому, что они выполняются совместно
Неэффективное сцепление
-
Процедурное – операции сгруппированы только потому, что они используются последовательно, в отличии от последовательного сцепления операции не используют общие данные
-
Случайное – операции сгруппированы без видимой родственной связи
Связывание
-
Тесное – компонент сильно зависит от других компонентов
-
Слабое – компонент либо совсем независим, либо почти независим от других компонентов
-
Наличие связи между компонентами обязательно должно быть чётко определено и по возможности должно быть очевидным