ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.04.2025
Просмотров: 845
Скачиваний: 1
В объектно-ориентированных языках программирования абстракции объектов и классов формируют логическую структуру системы, при производстве физической структуры, эти абстракции помещаются в модули. В больших системах, где классов много модули помогают управлять сложностью. Модули служат физическими контейнерами, в которых объявляются классы и объекты логической разработки.
Модульность– это свойство системы, связанное с возможностью ее декомпозиции на ряд сильно связанных и слабосцепленных модулей. Общей целью декомпозиции на модуле является уменьшение сроков разработки и стоимости программных систем за счет выделения модулей, которые проектируются и изменяются независимо. Каждая модульная структура должна быть достаточно простой, чтобы быть полностью понятной. Изменение реализации модулей должно проводиться без знания реализации других модулей и без влияния на их поведение. Определение классов и объектов выполняется в ходе логической разработки, а определение модулей – в ходе физической разработки системы. Эти действия сильно связаны и осуществляются итеративно. Примером мощного средства обеспечения модульности в объектно-ориентированных языках программирования является пакет.
Важным дополнением к трем рассмотренным механизмам борьбы со сложностью программных систем является Иерархическая организация. Под иерархией здесь понимается ранжирование или упорядочение системы абстракций, расположения их по уровням. Двумя важными инструментами иерархической организации в объектно-ориентированных системах, являются следующие:
1) Структура из классов
2) Структура из объектов
Первый вид иерархии строится чаще всего с помощью наследования. Наследование – отношение между классами, где класс определяет структуру или поведение, определенные либо в одном другом классе (простое наследование), или в нескольких других классах (множественное наследование). Наследование часто называют отношением «обобщение-специализация».
Второй вид иерархии базируется на отношении агрегации. Агрегация не является понятием уникальным для объектно-ориентированных систем, так любой язык программирования, разрешающий структуры типа запись, поддерживает агрегацию. Агрегация особенно полезна в сочетании с наследованием. При этом агрегация обеспечивает физическую группировку логически связанной структуры, а наследование позволяет легко и многократно использовать эти общие группы в других абстракциях, имеет смысл сравнить элементы иерархий наследования и агрегации с точки зрения уровня сложности. При наследовании нижний элемент иерархии (подкласс) имеет больший уровень сложности, больше возможностей, а при агрегации – наоборот – агрегат обладает большими возможностями, чем его элементы.
Основные понятия объектно-ориентированного подхода
Объект- конкретное представление абстракции. Он обладает тремя свойствами: индивидуальностью, состоянием и поведением. Структура и поведение подобных объектов определены в их общем классе.
Имя объекта
Свойства
Перечень операций
Индивидуальность объекта – характеристика объекта, которая отличает его от всех других объектов.
Состояние объекта характеризуется перечнем свойств объекта (из второй зоны)и текущими значениями каждого из этих свойств.
Поведение объекта характеризует то, как объект воздействует на другие объекты или подвергается воздействию в терминах изменений его состояния и передачи сообщений. Поведение объекта является функцией его состояния и выполняемых им операций.
Операция обозначает обслуживание, которое объект предлагает своим клиентам. Возможны пять видов операций клиента над объектами:
- модификатор - изменяет состояние объекта
- селектор – дат доступ к состоянию, но не изменят его
- итератор – осуществляет доступ к содержимому объекта по частям в строго определенном порядке
- конструктор – создает объект и инициализирует его
- деструктор – разрушает объект и освобождает занимаемую им память
Наличие у объекта внутреннего состояния означает, что порядок выполнения им операций очень важен, иначе говоря, объект может представляться как независимый автомат. По аналогии с автоматами можно выделять объекты активные и пассивные. Активный объект имеет собственный канал (поток управления), а пассивный не имеет. Активный объект автономен, он может проявить свое поведение без воздействия со стороны других объектов, пассивный элемент – наоборот может изменять свое состояние только под воздействием других объектов.
В программной системе находятся не объекты-одиночки, а взаимодействующие объекты. Особо интересны два вида отношений: связи и агрегации. Связь является физическим (смысловым) соединением между объектами. Связь означает соединение, с помощью которого, либо объект-клиент вызывает операции объекта-поставщика, либо один объект перемещает данные к другому объекту. Связи означают равноправные клиент-серверные отношения между объектами (пунктирная линия со стрелкой).
Агрегация обозначает отношение объектов в иерархии «целая часть», агрегация обозначает возможность перемещения от целого (агрегата) к его частям (свойствам). Агрегация может обозначать физическое включение в целое и нефизическое включение частей в целое, тогда говорят, что части включены в агрегат по ссылке.
Агрегация по величине обозначается сплошной стрелкой в виде закрашенного ромбика, агрегация по смыслу аналогично, но не закрашенным ромбиком.
Классы
Понятия объекта и класса тесно связаны, тем не менее, существуют важные различия между ними в том, что класс – это абстракция существующих характеристик объекта. Класс – это описание множества объектов, которые разделяют одинаковые свойства, операции, отношения и семантику. Любой объект – экземпляр класса. Различают внутренние представления класса (реализацию) и внешние представления класса (интерфейс).
Интерфейс объявляет возможности, т.е. услуги класса, но скрывает его структуру и поведение. Иными словами интерфейс демонстрирует внешнему миру абстракцию классов, его внешний облик. Интерфейс, в основном, состоит из объявлений всех операций, применяемых к экземпляру классов, он может также включать объявление типов, переменных, констант и исключений, необходимых для полноты данной абстракции. Интерфейс может быть разделен на три части: публичную (public), объявление которой доступны всем клиентам; защищенную (protected), объявление которой доступны только самому классу и его друзьям, его подклассам; приватную (private), объявление которой доступны самому классу и его друзьям.
Другом класса называется класс, который имеет доступы ко всем частям этого класса (публичный, защищенный и приватный).
Реализация класса описывает секреты поведения класса, включает реализации всех операций, определенных в интерфейсе. Классы, подобно объектам, не существуют в изоляции, напротив, с отдельной проблемной областью связывают ключевые абстракции, отношения между которыми формируют структуру из класса. Между классами существуют четыре основных вида отношений:
- ассоциация
- обобщение-специализация
- целая часть
- зависимость, отражающая влияние одного класса на другой
Ассоциация
Она обозначает семантическое (смысловое) соединение классов, например, в системе обслуживания читателей имеется две ключевые абстракции (книга и библиотека).
Ассоциация предполагает двусторонние отношения, она обозначет только семантическую – смысловую связь, она не указывает направление и точную реализацию отношения между классами. Ассоциация пригодна для анализа проблемы, когда требуется лишь идентифицировать связь.
С помощью создания ассоциаций удается придти к пониманию участников семантических связей (классов), элемент их ролей (роли подписываются снизу под линиями ассоциации), и мощности ассоциации (мощность указывается над линией ассоциации [* - 0 или более]).
В нашем примере введена ассоциация один ко многим, это значит, что для каждого экземпляра класса библиотека есть 0 или более экземпляров класса книга, а для каждого экземпляра класса книга есть один экземпляр библиотеки.
Эту множественность обозначют мощностью ассоциации, она может быть одного из трех типов: один к одному, один ко многим, многие ко многим.
Обобщение специализации
Наиболее популярной разновидностью отношения специализация является наследование.
Под наследованием понимается отношение, при котором один класс (наследник) разделяет структуру и поведение определенные в одном другом или во многих других классах (простое и множественное наследование, соответственно). Говорят, что подкласс наследников является специализацией его супер-класса, за счет дополнения или переопределения существующей структуры или поведения.
Пример системы для записи параметров полета в черный ящик, установленный в самолете.
Целая часть
Отношение этого вида между классами обеспечиваются через отношение агрегации, которые аналогичны отношениям агрегации между объектами, различают также как и для объектов, агрегации по ссылке, по смыслу и по величине. Агрегация по величине – композиция.
Обозначаются сплошной линией со стрелкой на конце, представляющей собой ромб, если ромб не закрашен, то имеем агрегацию по ссылке или по смыслу, а если закрашен – композиция.
Зависимость
Это отношение показывает, что изменение в одном классе может влиять на другой класс (зависимый).