- •9. Проектирование классов
- •9.1. Проектирование классов, скрывающих информацию
- •9.2. Проектирование операций классов
- •9.3. Классы абстрагирования данных
- •9.4. Классы интерфейса устройства
- •9.5. Классы, зависящие от состояния
- •9.6. Классы, скрывающие алгоритмы
- •9.7. Классы интерфейса пользователя
- •9.8. Классы бизнес-логики
- •9.9. Классы-обертки базы данных
- •9.10. Внутренние программные классы
- •9.11. Применение наследования при проектировании
- •9.12. Примеры наследования
- •9.13. Спецификация интерфейса класса
9.13. Спецификация интерфейса класса
В спецификации интерфейса класса определяется интерфейс скрывающего информацию класса, в том числе его операции. Спецификация должна включать:
– описание информации, скрываемой классом, например инкапсулированную структуру данных (если речь идет о классе абстрагирования данных) или интерфейс устройства;
– критерий, на основании которого был выделен данный класс;
– предположения, сделанные при специфицировании класса: могут разные задачи получать одновременный доступ к операциям объекта этого класса или доступ должен быть строго последовательным;
– предположительные модификации, побуждающие проектировать с учетом возможных изменений;
– суперкласс (если есть);
– унаследованные операции (если есть);
– операции класса. Для каждой операции необходимо определить:
выполняемую функцию;
предусловие (условие, которое должно выполняться перед вызовом операции);
постусловие (условие, которое должно выполняться после вызова операции);
инвариант (условие, которое должно выполняться всегда);
входные параметры;
выходные параметры;
вызываемые операции других классов.
Спецификацию интерфейса класса можно представить в описательной или табличной форме. Ниже приводится пример описательной документации.
9.13.1. Пример спецификации интерфейса класса. Для иллюстрации возьмем класс, абстрагирующий данные о датчиках и приводах (рис.9.12).
Рис.9.12. Пример класса, для которого составляется спецификация интерфейса
Скрывающий информацию класс. Хранилище Показаний Датчиков и Приводов.
Скрываемая информация. Инкапсулирует структуры данных, связанных с датчиками и приводами. Хранит текущие показатели датчиков и приводов.
Критерий выделения класса. Класс абстрагирования данных.
Предположения. Операции могут вызываться одновременно несколькими задачами.
Предположительные модификации. Сейчас поддерживает только булевские датчики и приводы. Возможно расширение для работы с аналоговыми устройствами.
Суперкласс. Нет.
Унаследованные операции. Нет.
Предоставляемые операции:
1. читатьДатчик (in идДатчика, out значениеДатчика)
Функция. Возвращает текущее значение указанного датчика.
Предусловие. Значение датчика ранее было обновлено.
Инвариант. Значение датчика не изменяется.
Постусловие. Прочитано значение датчика.
Входные параметры. идДатчика.
Выходные параметры. значениеДатчика.
Вызываемые операции. Нет.
2. обновитьПривод (in идПривода, in значениеПривода)
Функция. Обновляет значение указанного привода перед выводом.
Предусловие. Привод существует.
Постусловие. Значение привода обновлено.
Входные параметры. идПривода, значениеПривода.
Выходные параметры. Нет.
Вызываемые операции. Нет.
3. обновитьДатчик(in идДатчика,in значение Датчика)
Функция. Заменяет значение указанного датчика новым показанием, прочитанным с внешнего устройства.
Предусловие. Датчик существует.
Постусловие. Значение датчика обновлено.