Создание адреса расположения устройств


Вспомним, что если принимать каждое устройство как физическое, то оно должно характеризоваться своим местом расположения. Для задания месторасположения у нас уже создан класс Location, который используется для задания расположения датчика температуры.

Первая мысль, которая приходит в голову, - это включить в класс CPIantDevice переменную, хранящую точку расположения устройства. В данном случае это будет плохим решением.

Совет. Не бросайтесь реализовывать первое пришедшее в голову решение. Оно обычно бывает неоптимально.

Лучшим решением будет создание класса CDevices, из которого будут наследоваться классы исполнительных устройств и датчиков. Этот класс и будет отвечать за обработку расположения устройств. При создании программ без применения Rational Rose вы наверняка отказались бы изменять иерархию уже готовых классов, вспомнив о достаточной трудоемкости такой операции, но с Rational Rose — это сущие пустяки.

Создадим новый класс CDevices. В этом классе создадим новый атрибут m_LastID с типом int и укажем, что атрибут должен быть Static.

Для чего нужен этот атрибут? Допустим, что каждое устройство в системе имеет уникальный номер, который его идентифицирует. Создадим атрибут m_ID с типом int, который будет хранить идентификатор. Для того чтобы при создании устройства каждый раз не задавать этот номер с большой вероятностью ошибиться, создадим статический элемент, который будет хранить последний ID. На рис. 19.9 показаны полученные атрибуты. Для того чтобы установить тип Static, воспользуйтесь окно Model Assistant.

Рис. 19.9.Атрибуты класса CDevices

Для указания местоположения мы уже создали класс Location. Необходимо перенести связь Unidirectionlal Association с класса Temperature-Sensor во вновь созданный класс CDevices. Впоследствии мы будем наследовать класс сенсоров из класса CDevices, и возможность указания местоположения будет и у класса датчиков.

Совет. Не забудьте после переноса связи из одного класса в другой на диаграмме классов удалить лишние связи в окне RCIick=>OpenSpecification=>Relation.

Обычно для работы с переменными класса создаются операции. Воспользуемся для этого окном ModelAssistant и создадим для класса Location операции get_value и set_value, как показано на рис. 19.10.

Рис. 19.10.Операции класса Location

Теперь остается указать наследование ранее созданного класса CPlant-Device из класса CDevices при помощи стрелки Generalization. У вас должно получиться так, как на рис. 19.11.

Рис. 19.11.Иерархия классов устройств после добавления CDevices

Что мы должны получить теперь? В нашей гидропонной системе имеется некоторое количество исполнительных устройств, каждое из которых имеет свой идентификатор, уникальный в системе, и свое местоположение, которое можно устанавливать и считывать. Каждое устройство имеет два состояния — включено/выключено. Можно проверить состояние устройства, включить его или выключить.

Посмотрим на исходный код головного класса CDevices, который получится после генерации: RClick=>Update Code. Однако не забудьте назначить новые классы в проект VC++ при помощи Tools=>Visual C++=> Component Assignment Tool. В противном случае можете получить примерно такое сообщение при генерации кода: «Warning: Class: CDevices; Skipped, supplier not assigned to VC++ component».

Заголовочный файл класса CDevices выглядит так:




Дата добавления: 2016-06-18; просмотров: 995;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.