|
Perl: шаблон с вложенным наследованием
|
|||
---|---|---|---|
#18+
У меня есть несколько устройств. У абстрактного устройства есть несколько свойств и методов. Свойства: серийный номер, заводской идентификатор, производитель, модель, аппаратная версия (ревизия), версия установленного ПО и т.п. Методы: перезагрузить, обновить ПО, выгрузить конфигурацию в файл, загрузить конфигурацию из файла и т.п. У конкретных устройств разный набор возможностей и разный способ управления устройством. Соответственно для каких-то методов и свойств есть нативные инструменты (например загрузить конфигурацию из файла), а для каких-то их нужно эмулировать (считать файл и конфигурировать устройство построчно). Для того, чтобы со всеми этими устройствами работать абстрактно, у меня будет большое количество классов-адаптеров для каждой модели/ревизии, в которой будут реализованы методы и свойства. При этом на разных моделях в одном модельном ряду возможности устройств могут быть идентичными. Устройства можно классифицировать так: производитель, серия (тип) устройств, модельный ряд, модель, версия/ревизия. В таком же порядке должны наследоваться методы и свойства для соответствующих конкретным устройствам классов. Например мне нужно для конкретного устройства получить температуру, для чего сделать следующее: 1. Если для конкретной версии ПО или ревизии устройства определен класс-адаптер, то будут использованы его методы. 2. Если класс-адаптер не определен, либо в нем не переопределен требуемый метод, то будет использован класс-адаптер для модели. 3. Если класс-адаптер модели не определен, либо в нем не переопределен требуемый метод, то будет использован класс-адаптер для модельного ряда. И т.д. до верхнего уровня иерархии. Подскажите, что почитать или на что посмотреть, чтобы организовать подобную иерархию классов? Как мне кажется, похожий шаблон используется в библиотеке DBI. Можно ли ориентироваться на эту библиотеку или есть более подходящие примеры? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2017, 10:03 |
|
Perl: шаблон с вложенным наследованием
|
|||
---|---|---|---|
#18+
Alibek B., Что мешает сделать обычную иерархию классов, определить общие методы в предках, и при необходимости переопределить их в потомках? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2017, 18:00 |
|
Perl: шаблон с вложенным наследованием
|
|||
---|---|---|---|
#18+
А на примере можно показать, что это означает? Может быть я неправильно понял, но список вендоров/моделей не фиксированный, он периодически меняется (дополняется) и глубина иерархии не постоянная (где-то вендор/модель, где-то вендор/серия/модель/ревизия/версия). Поэтому справочник моделей будет вынесен в отдельный конфигурационный файл, а наиболее подходящий класс будет определятся из модели снизу вверх. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2017, 18:30 |
|
Perl: шаблон с вложенным наследованием
|
|||
---|---|---|---|
#18+
Например, есть общий для всей устройств метод 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. Это получается что-то вроде фабрики классов, которая по модели определяет нужный класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.05.2017, 18:52 |
|
Perl: шаблон с вложенным наследованием
|
|||
---|---|---|---|
#18+
Роли? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 11:09 |
|
Perl: шаблон с вложенным наследованием
|
|||
---|---|---|---|
#18+
Речь про это: https://perldoc.perl.org/perlootut.html#Roles ? По описанию похоже, но « Perl does not have any built-in way to express roles ». Гугл в первых позициях выдает Moose::Role, но этот модуль (да и вся коллекция Moose) выглядит непривычно. Не посоветуете что-нибудь более традиционное и простое? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2017, 11:26 |
|
Perl: шаблон с вложенным наследованием
|
|||
---|---|---|---|
#18+
Alibek B.Не посоветуете что-нибудь более традиционное и простое? не посоветую. есть perl6, но в нём ни грамма нет традиций и простым его назвать нельзя. зато встроенная ОО парадигма присутствует. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2017, 20:37 |
|
|
start [/forum/topic.php?fid=23&fpage=33&tid=1460643]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
3ms |
others: | 12ms |
total: | 160ms |
0 / 0 |