Домашняя работа № 3 (9 p.)

Перед выполнением домашней работы вытяните и слейте изменения из моего оригинального репозитория Для тестирования вашего кода используйте существующие тесты из директории tests или добавьте свои

Для работы с устройствами в нашем SCADA-фреймворке мы определим класс Device который будет представлять интерфейс для произвольного прибора. Определим следующие понятия:

  • trait — изменяемое свойство устройства, которое опционально может быть считано из устройства или наоборот записано в прибор.

  • action — действие, которое может выполнить устройство.

  • логический уровень — текущие значение traits устройства в программе.

  • физические уровень — реальные значения trits устройства.

Таким образом объект представляющий устройство описывает traits и actions этого устройств, а так же связывает физический и логический уровень.

  1. (1 p.) В модуле controls/device.py превратите класс DeviceLifecycleState в перечисление, описывающий одно из трёх состояний прибора: INIT, OPEN, CLOSE.

  2. (1 p.) В модуле controls/device.py в классе Device выполните следующий условия:

    1. Сделайте класс Device абстрактным.

    2. Методы trait_descriptors и action_descriptors сделайте abstract property.

Считывание/запись данных с/в устройства/о можно проводить синхронным или асинхронным образом. Определим класс SynchronyDevice описывающий синхронное взаимодействие с устройством. В нем определенны абстрактные методы для работы с traits и actions устройства (см. docstring методов).

  1. В модуле equipment/turtle_device.py реализуйте класс TurtleDevice (для генерации заготовок абстрактных методов можно использовать иструменты IDE). С помощью экземпляров этого класса мы будем управлять черепашкой (объектом класс Turtle из модуля turtle). Реализуйте следующее поведение:

    1. (1 p.) В методах open и close должен создаваться и уничтожаться объект черепашки, не забудьте вызвать родительские методы для изменения состояния устройства.

    2. (3 p.) Свойства trait_descriptors и action_descriptors должны возвращать описания traits и actions черепашки согласно заданной сигнатуре методов. Traits черепашки это её публичные аттрибуты и они доступны только на чтение. Actions черепашки это её публичные методы. Описания должны генерироваться автоматически путем анализа класса черепашки.

    3. (3 p.) Реализуйте методы read, write, execute, __getitem__, invalidate. Значения полей объекта черепашка считайте физическим уровнем. При необходимости вызывайте реализацию родительского метода.