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