OberonCore https://forum.oberoncore.ru/ |
|
Расширение записи в классическом Обероне https://forum.oberoncore.ru/viewtopic.php?f=158&t=6762 |
Страница 3 из 3 |
Автор: | AlexBogy [ Пятница, 21 Октябрь, 2022 14:36 ] |
Заголовок сообщения: | Re: Расширение записи в классическом Обероне |
Comdiv писал(а): Непересекающиеся настройки, лежащие в одном ряду с пересекающимися, звучат как что-то, пригодное для выделения ядра и его расширений. Условно Код: Port = RECORD number, status, speed: INTEGER END; Хотя возможно, что и здесь Port - лишь составляющая соответствующих разъёмов, а не их понятийная основа.LanPort = RECORD(Port) lan: LanSpecific END; OptPort = RECORD(Port) opt: OptSpecific END; И что такое в данном случае лучшая читаемость и приемлемая вложенность? Чем PortNumber лучше port.number? Обычно наоборот - наличие общего префикса - это звоночек, что используется структура, размазанная по отделённым переменным. Если откроете больше кода, то станет ясней. Вот такая структура: Код: E1Config=record
PortNumber: Integer; PortStatus: Boolean; PortSpeed: Integer; PortCode: Integer; PortFrame: Integer; PortImpedance: Integer; PortLBO: Integer; PortCrossConnected: Boolean; end; EthConfig=record PortNumber: Integer; PortStatus: Boolean; PortSpeed: Integer; PortFlow: Boolean; PortPriority: Integer; PortEgressTag: Integer; PortIngressTag: Integer; PortEgressRate: Integer; PortIngressRate: Integer; PortSchedule: Integer; PortLearning: Boolean; PortCrossover: Integer; end; OPTConfig=record PortNumber: Integer; PortStatus: Boolean; PortSpeed: Integer; PortALS: Boolean; PortALSDelay: Integer; PortDCC: Boolean; PortGrouped: Boolean; end; |
Автор: | Comdiv [ Воскресенье, 23 Октябрь, 2022 22:42 ] |
Заголовок сообщения: | Re: Расширение записи в классическом Обероне |
По самим структурам без кода их использования всё равно трудно сказать. Может у Вас, вообще, совпадение первых элементов даже не важно, и их, действительно, можно просто так независимо объявить. Но если есть желание не повторяться и соблюсти такое плоское положение элементов, то, конечно, напрашивается наследование базовой структуры. Вот Вам и "мне удобней агрегирование". Не похоже. |
Автор: | Иван Денисов [ Воскресенье, 23 Октябрь, 2022 22:55 ] |
Заголовок сообщения: | Re: Расширение записи в классическом Обероне |
Если я всё правильно понимаю, то вот такая конструкция понимается под "расширением через агрегирование". Код: Port=record
Number: Integer; Status: Boolean; Speed: Integer; end; E1Config=record port: Port; PortCode: Integer; PortFrame: Integer; PortImpedance: Integer; PortLBO: Integer; PortCrossConnected: Boolean; end; EthConfig=record port: Port; PortFlow: Boolean; PortPriority: Integer; PortEgressTag: Integer; PortIngressTag: Integer; PortEgressRate: Integer; PortIngressRate: Integer; PortSchedule: Integer; PortLearning: Boolean; PortCrossover: Integer; end; OPTConfig=record port: Port; PortALS: Boolean; PortALSDelay: Integer; PortDCC: Boolean; PortGrouped: Boolean; end; |
Автор: | Comdiv [ Понедельник, 24 Октябрь, 2022 01:48 ] |
Заголовок сообщения: | Re: Расширение записи в классическом Обероне |
Судя по истории переписки, сложилось впечатление, что Александру удобней Код: Device = RECORD а не воображаемыйe1: E1Config; opt: OptConfig; eth: EthConfig; END; Код: Device = RECORD(E1Config, OptConfig, EthConfig) для осуществления которого пришлось бы все поля называть по-разному. А о том, что E1Config, OptConfig, EthConfig могут быть расширениями Port с полями Number, Status, Speed он и не думал, ведь это якобы приведёт к лишней вложенности. Поэтому в разных сообщениях он и пишет прямо противоположные вещи - в одном про то, что ему нужен многоэтажный доступ, чтобы все поля не пересекались, а в другом - о лучшей читаемости и приемлемой вложенности, основываясь на перемешанных понятиях расширения и вложения, между которыми он выбирает обобщённо на основе "удобства", а не для каждого случая по разному предназначению.
END; |
Автор: | AlexBogy [ Понедельник, 24 Октябрь, 2022 07:08 ] |
Заголовок сообщения: | Re: Расширение записи в классическом Обероне |
Comdiv писал(а): Судя по истории переписки, сложилось впечатление, что Александру удобней Код: Device = RECORD а не воображаемыйe1: E1Config; opt: OptConfig; eth: EthConfig; END; Код: Device = RECORD(E1Config, OptConfig, EthConfig) для осуществления которого пришлось бы все поля называть по-разному. А о том, что E1Config, OptConfig, EthConfig могут быть расширениями Port с полями Number, Status, Speed он и не думал, ведь это якобы приведёт к лишней вложенности. Поэтому в разных сообщениях он и пишет прямо противоположные вещи - в одном про то, что ему нужен многоэтажный доступ, чтобы все поля не пересекались, а в другом - о лучшей читаемости и приемлемой вложенности, основываясь на перемешанных понятиях расширения и вложения, между которыми он выбирает обобщённо на основе "удобства", а не для каждого случая по разному предназначению.END; Вы совершенно правильно меня поняли, именно так я и сделал в программе. По поводу дальнейшего агрегирования на уровне общих параметров порта - да, можно было сделать и короткую запись с тремя полями. Но смысл был не в том, чтобы делать агрегирование ради агрегирования, а чтобы в записях E1Config, EthConfig, OptConfig все поля были одного уровня, поскольку это одноранговые настройки. Теперь еще раз про наследование - я не против классического наследования. Просто для меня оно удобнее, когда в базовой и расширенной записи нет и не будет пересекающихся полей. Хочу выразить благодарность всем откликнувшимся на мой пост. |
Страница 3 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |