Модульность – это свойство системы, которая была разложена на внутренне связные, но слабо связные между собой модули.
· Правильное разбиение программы на модули является столь же важной задачей, что и выбор правильного набора абстракций
· В ООП модули выполняют роль физических контейнеров и области определения для типов.
· Модуль является минимальной единицей переиспользования и размещения
(части модуля нельзя перетащить в другой проект)
Принцип инверсии зависимостей (DIP – dependency inversion principle) – модули высокого уровня не должны зависеть от модулей низкого. И те и другие должны зависеть от абстракций
При разработке большой объектно-ориентированной программной системы одной из основных проблем становится наличие очень большого количества
абстракций (классов и интерфейсов), взаимодействующих друг с другом.
Основная задача при этом состоит в том, чтобы в один модуль попадали подпрограммы, использующие друг друга или изменяемые вместе. В ООП модули выполняют роль физических контейнеров и областей определения типов. Модули могут содержать определения классов, интерфейсов, а также глобальные объекты и данные.
Согласно Барбаре Лисков «модульность — это разделение программы на фрагменты, которые компилируются по отдельности, но могут устанавливать связи с другими модулями». В языке C++ это определение по прежнему может быть признано актуальным. В языке C и раннем C++, препроцессор и раздельная компиляция служили основными средствами поддержки рассматриваемого принципа. В процессе эволюции и стандартизации в С++ были введены пространства имен, которые являются средством логического разделения области видимости включаемых в них классов и данных.
Основные принципы объектного подхода. Иерархия.
Иерархия – это упорядочивание абстракций путем расположения их по уровням
Виды иерархических отношений :
· Иерархии классов (отношение «is a») – отношение вида родитель-потомок, общее-частное. Реализуется с помощью наследования типов (генерализации)
· Иерархии объектов (отношение «part of») – отношение вида целое часть. Реализуется агрегацией и композицией
1. Наследование означает такое отношение между классами, когда один класс заимствует, а также расширяет и/или специализирует структуру и функциональный контракт одного или нескольких родительских классов.
Часто подкласс достраивает или переписывает компоненты вышестоящего класса. В наследственной иерархии общая часть структуры и поведения сосредоточена в наиболее общем суперклассе.
В С++ можно наследоваться от нескольких классов, в то время как, например в Java можно наследоваться только от одного класса, но нескольких интерфейсов, каждый из которых также может наследоваться от одного или нескольких интерфейсов.
2. В отличие от классов, образующих иерархии наследования, объекты образуют агрегационные иерархии. Следует различать понятия агрегации и композиции.
При композиционном отношении между объектами существует зависимость по времени жизни. Так, агрегант (часть) не может существовать без агрегата (целого). При уничтожении объекта-целого, уничтожаются и объекты-части. При ассоциативном отношении объекты могут существовать независимо друг от друга по времени жизни.
Если в программе, написанной на C++, один объект объявлен как обычная (не ссылка и не указатель) переменная (поле) другого объекта, то эти объекты будут находиться в отношении композиции. Связь по времени жизни, в этом случае, обеспечивается самим компилятором (при создание объекта-агрегата будет создан и объект-агрегант; при уничтожении агрегата, агрегант будет уничтожен). В остальных случаях композиция определяется логикой программы (в С++ с помощью ссылок и указателей).
Дата: 2019-02-19, просмотров: 362.