OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 29 Ноябрь, 2022 18:19

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Пятница, 21 Октябрь, 2022 14:36 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 24
Comdiv писал(а):
Непересекающиеся настройки, лежащие в одном ряду с пересекающимися, звучат как что-то, пригодное для выделения ядра и его расширений. Условно
Код:
Port = RECORD number, status, speed: INTEGER END;
LanPort = RECORD(Port) lan: LanSpecific END;
OptPort = RECORD(Port) opt: OptSpecific END;
Хотя возможно, что и здесь Port - лишь составляющая соответствующих разъёмов, а не их понятийная основа.

И что такое в данном случае лучшая читаемость и приемлемая вложенность? Чем 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;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Октябрь, 2022 22:42 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1382
Откуда: Киев
По самим структурам без кода их использования всё равно трудно сказать. Может у Вас, вообще, совпадение первых элементов даже не важно, и их, действительно, можно просто так независимо объявить. Но если есть желание не повторяться и соблюсти такое плоское положение элементов, то, конечно, напрашивается наследование базовой структуры. Вот Вам и "мне удобней агрегирование". Не похоже.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Октябрь, 2022 22:55 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3271
Если я всё правильно понимаю, то вот такая конструкция понимается под "расширением через агрегирование".
Код:
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;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 24 Октябрь, 2022 01:48 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 1382
Откуда: Киев
Судя по истории переписки, сложилось впечатление, что Александру удобней
Код:
Device = RECORD
   e1: E1Config;
   opt: OptConfig;
   eth: EthConfig;
END;
а не воображаемый
Код:
Device = RECORD(E1Config, OptConfig, EthConfig)
END;
для осуществления которого пришлось бы все поля называть по-разному. А о том, что E1Config, OptConfig, EthConfig могут быть расширениями Port с полями Number, Status, Speed он и не думал, ведь это якобы приведёт к лишней вложенности. Поэтому в разных сообщениях он и пишет прямо противоположные вещи - в одном про то, что ему нужен многоэтажный доступ, чтобы все поля не пересекались, а в другом - о лучшей читаемости и приемлемой вложенности, основываясь на перемешанных понятиях расширения и вложения, между которыми он выбирает обобщённо на основе "удобства", а не для каждого случая по разному предназначению.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 24 Октябрь, 2022 07:08 

Зарегистрирован: Суббота, 30 Июль, 2022 12:02
Сообщения: 24
Comdiv писал(а):
Судя по истории переписки, сложилось впечатление, что Александру удобней
Код:
Device = RECORD
   e1: E1Config;
   opt: OptConfig;
   eth: EthConfig;
END;
а не воображаемый
Код:
Device = RECORD(E1Config, OptConfig, EthConfig)
END;
для осуществления которого пришлось бы все поля называть по-разному. А о том, что E1Config, OptConfig, EthConfig могут быть расширениями Port с полями Number, Status, Speed он и не думал, ведь это якобы приведёт к лишней вложенности. Поэтому в разных сообщениях он и пишет прямо противоположные вещи - в одном про то, что ему нужен многоэтажный доступ, чтобы все поля не пересекались, а в другом - о лучшей читаемости и приемлемой вложенности, основываясь на перемешанных понятиях расширения и вложения, между которыми он выбирает обобщённо на основе "удобства", а не для каждого случая по разному предназначению.


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

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

Хочу выразить благодарность всем откликнувшимся на мой пост.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 45 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2022, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB