powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: шаблон с вложенным наследованием
7 сообщений из 7, страница 1 из 1
Perl: шаблон с вложенным наследованием
    #39450588
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть несколько устройств.
У абстрактного устройства есть несколько свойств и методов. Свойства: серийный номер, заводской идентификатор, производитель, модель, аппаратная версия (ревизия), версия установленного ПО и т.п. Методы: перезагрузить, обновить ПО, выгрузить конфигурацию в файл, загрузить конфигурацию из файла и т.п.
У конкретных устройств разный набор возможностей и разный способ управления устройством. Соответственно для каких-то методов и свойств есть нативные инструменты (например загрузить конфигурацию из файла), а для каких-то их нужно эмулировать (считать файл и конфигурировать устройство построчно). Для того, чтобы со всеми этими устройствами работать абстрактно, у меня будет большое количество классов-адаптеров для каждой модели/ревизии, в которой будут реализованы методы и свойства. При этом на разных моделях в одном модельном ряду возможности устройств могут быть идентичными.
Устройства можно классифицировать так: производитель, серия (тип) устройств, модельный ряд, модель, версия/ревизия. В таком же порядке должны наследоваться методы и свойства для соответствующих конкретным устройствам классов. Например мне нужно для конкретного устройства получить температуру, для чего сделать следующее:
1. Если для конкретной версии ПО или ревизии устройства определен класс-адаптер, то будут использованы его методы.
2. Если класс-адаптер не определен, либо в нем не переопределен требуемый метод, то будет использован класс-адаптер для модели.
3. Если класс-адаптер модели не определен, либо в нем не переопределен требуемый метод, то будет использован класс-адаптер для модельного ряда.
И т.д. до верхнего уровня иерархии.

Подскажите, что почитать или на что посмотреть, чтобы организовать подобную иерархию классов?
Как мне кажется, похожий шаблон используется в библиотеке DBI. Можно ли ориентироваться на эту библиотеку или есть более подходящие примеры?
...
Рейтинг: 0 / 0
Perl: шаблон с вложенным наследованием
    #39450935
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Что мешает сделать обычную иерархию классов, определить общие методы в предках, и при необходимости переопределить их в потомках?
...
Рейтинг: 0 / 0
Perl: шаблон с вложенным наследованием
    #39450949
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на примере можно показать, что это означает?
Может быть я неправильно понял, но список вендоров/моделей не фиксированный, он периодически меняется (дополняется) и глубина иерархии не постоянная (где-то вендор/модель, где-то вендор/серия/модель/ревизия/версия). Поэтому справочник моделей будет вынесен в отдельный конфигурационный файл, а наиболее подходящий класс будет определятся из модели снизу вверх.
...
Рейтинг: 0 / 0
Perl: шаблон с вложенным наследованием
    #39450956
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, есть общий для всей устройств метод GetNumber(). Пусть у всех Siemens он одинаковый, а для каждой Motorola - свой.

Классы:

TDevice = class
procedure Connect; abstract;

TDeviceSiemens = class(TDevice)
procedure Connect; override;

TDeviceMotorola1 = class(TDevice)
procedure Connect; override;

TDeviceMotorola2 = class(TDevice)
procedure Connect; override;

И ваш конфиг: для всех Siemens создается объект класса TDeviceSiemens, для каждой Моторолы - свой TDeviceMotorola1, TDeviceMotorola2. Это получается что-то вроде фабрики классов, которая по модели определяет нужный класс.
...
Рейтинг: 0 / 0
Perl: шаблон с вложенным наследованием
    #39451200
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роли?
...
Рейтинг: 0 / 0
Perl: шаблон с вложенным наследованием
    #39451222
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь про это: https://perldoc.perl.org/perlootut.html#Roles ?
По описанию похоже, но « Perl does not have any built-in way to express roles ».
Гугл в первых позициях выдает Moose::Role, но этот модуль (да и вся коллекция Moose) выглядит непривычно.
Не посоветуете что-нибудь более традиционное и простое?
...
Рейтинг: 0 / 0
Perl: шаблон с вложенным наследованием
    #39452376
Фотография volodin661
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Не посоветуете что-нибудь более традиционное и простое?
не посоветую.

есть perl6, но в нём ни грамма нет традиций и простым его назвать нельзя.
зато встроенная ОО парадигма присутствует.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Perl: шаблон с вложенным наследованием
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]