Проектирование составных задач 



Рассмотрим детальное проектирование составных задач, содержащих вложенные объекты. К ним относятся задачи, выявленные путем применения критериев группировки и инверсии. Обычно такие задачи проекти­руются в виде составных активных классов, включающих вложенные пассивные объекты.

Отношения между задачами и классами выстраиваются следующим образом. Активный объект – задача – запускается событием: внешним, внутренним или таймера. Затем он вызывает определенную операцию пассивного объекта. Пассив­ный объект бывает вложенным в задачу или внешним по отношению к ней. Эти два случая рассматриваются отдельно.

Класс, операции которого вызываются исключительно указанной задачей, может вкладываться в нее. Если же операции класса вызываются несколькими задачами, то класс должен оставаться внешним по отношению к каждой из них. В случае, когда обращения к классу осуществляются из разных задач, операции класса должны обеспечивать синхронизацию доступа к инкапсулированным дан­ным.

Иногда полезно разделить обязанности между задачей и вложенными в нее классами. Управление, упорядочение событий и коммуникации поручаются зада­че, а все структурные детали оставляются на усмотрение скрывающего информа­цию класса.

Рассмотрим ввод/вывод с опросом с точки зрения разбиения на задачи и клас­сы. Задача выделяется при помощи критерия периодической (если устройство одно) или темпоральной (если устройств несколько) группировки. Каждое пас­сивное устройство ввода/вывода инкапсулируется в класс интерфейса устрой­ства. Необходимо определить операции, предоставляемые таким классом, и поме­стить класс внутрь задачи.

Рассмотрим теперь динамическое поведение. Задача активизируется событи­ем таймера. Затем она вызывает операции каждого из объектов интерфейса, что­бы получить текущее состояние устройства.

Рассмотрим группировку задач по управлению и объекты, скрывающие информацию. Управляющая задача активизируется асинхронно. Она вызывает операции одного или нескольких объектов.

Синхронизация доступа к классам

Если к классу может обращаться несколько задач, то его операции должны обеспечивать синхронизацию доступа к инкапсулируемым данным. Ниже описы­ваются соответствующие механизмы: алгоритм взаимного исключения и алго­ритм нескольких читателей и писателей.

Отделив вопрос о том, что делает класс (спецификация операций), от того, как это делается (проект класса), мы можем изолировать пользователей от моди­фикаций внутреннего устройства класса. Допустимо следующее:

– трансформировать внутренние структуры данных, например применить связанный список вместо массива;

– заменить внутренний механизм синхронизации доступа к данным, в част­ности использовать алгоритм читателей и писателей вместо взаимного ис­ключения.

Описанные изменения влияют только на внутреннее устройство класса: на внутренние структуры данных и внутренние операции, которые имеютдоступ к этим структурам.

Пример синхронизации доступа к классу

В качестве примера рассмотрим класс абстрагирования данныхХранилище Показаний Аналоговых Датчиков. При проектировании этого класса нужно принять решение о том, будет ли информация храниться в массиве или в связан­ном списке. Другое решение касается синхронизации: может ли к объекту такого класса осуществляться параллельный доступ и, если да, следует использовать ал­горитм взаимного исключения или алгоритм читателей и писателей. Оба реше­ния относятся только к проектированию класса, не затрагивая его пользователей.

Отделив вопрос о том, что делает класс (спецификация операций), от того, как это делается (проект класса), мы можем изолировать пользователей от моди­фикаций внутреннего устройства класса. Допустимо следующее:

– трансформировать внутренние структуры данных, например применить связанный список вместо массива;

– заменить внутренний механизм синхронизации доступа к данным, в част­ности использовать алгоритм читателей и писателей вместо взаимного ис­ключения.

Описанные изменения влияют только на внутреннее устройство класса: на внутренние структуры данных и внутренние операции, которые имеют доступ к этим структурам.


Дата добавления: 2018-08-06; просмотров: 209; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!