Проектирование составных задач
Рассмотрим детальное проектирование составных задач, содержащих вложенные объекты. К ним относятся задачи, выявленные путем применения критериев группировки и инверсии. Обычно такие задачи проектируются в виде составных активных классов, включающих вложенные пассивные объекты.
Отношения между задачами и классами выстраиваются следующим образом. Активный объект – задача – запускается событием: внешним, внутренним или таймера. Затем он вызывает определенную операцию пассивного объекта. Пассивный объект бывает вложенным в задачу или внешним по отношению к ней. Эти два случая рассматриваются отдельно.
Класс, операции которого вызываются исключительно указанной задачей, может вкладываться в нее. Если же операции класса вызываются несколькими задачами, то класс должен оставаться внешним по отношению к каждой из них. В случае, когда обращения к классу осуществляются из разных задач, операции класса должны обеспечивать синхронизацию доступа к инкапсулированным данным.
Иногда полезно разделить обязанности между задачей и вложенными в нее классами. Управление, упорядочение событий и коммуникации поручаются задаче, а все структурные детали оставляются на усмотрение скрывающего информацию класса.
Рассмотрим ввод/вывод с опросом с точки зрения разбиения на задачи и классы. Задача выделяется при помощи критерия периодической (если устройство одно) или темпоральной (если устройств несколько) группировки. Каждое пассивное устройство ввода/вывода инкапсулируется в класс интерфейса устройства. Необходимо определить операции, предоставляемые таким классом, и поместить класс внутрь задачи.
|
|
Рассмотрим теперь динамическое поведение. Задача активизируется событием таймера. Затем она вызывает операции каждого из объектов интерфейса, чтобы получить текущее состояние устройства.
Рассмотрим группировку задач по управлению и объекты, скрывающие информацию. Управляющая задача активизируется асинхронно. Она вызывает операции одного или нескольких объектов.
Синхронизация доступа к классам
Если к классу может обращаться несколько задач, то его операции должны обеспечивать синхронизацию доступа к инкапсулируемым данным. Ниже описываются соответствующие механизмы: алгоритм взаимного исключения и алгоритм нескольких читателей и писателей.
Отделив вопрос о том, что делает класс (спецификация операций), от того, как это делается (проект класса), мы можем изолировать пользователей от модификаций внутреннего устройства класса. Допустимо следующее:
– трансформировать внутренние структуры данных, например применить связанный список вместо массива;
|
|
– заменить внутренний механизм синхронизации доступа к данным, в частности использовать алгоритм читателей и писателей вместо взаимного исключения.
Описанные изменения влияют только на внутреннее устройство класса: на внутренние структуры данных и внутренние операции, которые имеютдоступ к этим структурам.
Пример синхронизации доступа к классу
В качестве примера рассмотрим класс абстрагирования данныхХранилище Показаний Аналоговых Датчиков. При проектировании этого класса нужно принять решение о том, будет ли информация храниться в массиве или в связанном списке. Другое решение касается синхронизации: может ли к объекту такого класса осуществляться параллельный доступ и, если да, следует использовать алгоритм взаимного исключения или алгоритм читателей и писателей. Оба решения относятся только к проектированию класса, не затрагивая его пользователей.
Отделив вопрос о том, что делает класс (спецификация операций), от того, как это делается (проект класса), мы можем изолировать пользователей от модификаций внутреннего устройства класса. Допустимо следующее:
– трансформировать внутренние структуры данных, например применить связанный список вместо массива;
– заменить внутренний механизм синхронизации доступа к данным, в частности использовать алгоритм читателей и писателей вместо взаимного исключения.
Описанные изменения влияют только на внутреннее устройство класса: на внутренние структуры данных и внутренние операции, которые имеют доступ к этим структурам.
Дата добавления: 2018-08-06; просмотров: 209; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!