Инструменты пользователя

Инструменты сайта


bbextendnohost

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bbextendnohost [2013/12/21 01:05]
kpmy [Что требуется?]
bbextendnohost [2020/10/29 07:08] (текущий)
Строка 4: Строка 4:
 А при дальнейшем расширении абстракций необходимо учитывать, что платформо-зависимые интерфейсы могут привести к "протеканию" абстракции. А при дальнейшем расширении абстракций необходимо учитывать, что платформо-зависимые интерфейсы могут привести к "протеканию" абстракции.
  
-На примере простой абстракции местоположение файла Files.Locator (далее **локатор**) рассмотрим возможные варианты решения.+На примере простой абстракции местоположение файла ''Files.Locator'' (далее **локатор**) рассмотрим возможные варианты решения.
  
 [[http://oberoncore.ru/projects/bb-docu-ru|Русская документация по BlackBox]] [[http://oberoncore.ru/projects/bb-docu-ru|Русская документация по BlackBox]]
Строка 20: Строка 20:
  
 ===== Что требуется? ===== ===== Что требуется? =====
-Расширить возможности объекта базового типа Files.Locator в ряде задач при сохранении неизменности интерфейса Files.Locator, сохранение возможности работы с альтернативными реализациями локатора, а так же минимизация платформо-зависимости прикладного компонента. +Расширить возможности объекта базового типа ''Files.Locator'' в ряде задач при сохранении неизменности интерфейса ''Files.Locator'', сохранение возможности работы с альтернативными реализациями локатора, а так же минимизация платформо-зависимости прикладного компонента. 
  
 ===== Варианты решения ===== ===== Варианты решения =====
Строка 34: Строка 34:
 ==== Использование возможностей расширения абстракции ==== ==== Использование возможностей расширения абстракции ====
 Учитывая проблему возможного раздувания интерфейса, а так же тот факт, что единственным способом расширения интерфейса локатора является наследование, предлагается выполнить отвязку доступных функций локатора от интерфейса базового класса. Используем возможности шаблона "Объект-сообщение" для обеспечения параметрического полиморфизма методов локатора (в рамках языка Компонентный Паскаль полиморфизм реализуется данным образом). Учитывая проблему возможного раздувания интерфейса, а так же тот факт, что единственным способом расширения интерфейса локатора является наследование, предлагается выполнить отвязку доступных функций локатора от интерфейса базового класса. Используем возможности шаблона "Объект-сообщение" для обеспечения параметрического полиморфизма методов локатора (в рамках языка Компонентный Паскаль полиморфизм реализуется данным образом).
-Для этого опишем класс-наследник локатора: OberFiles.Locator, в интерфейс которого добавим метод .HandleMsg(VAR msg: ANYREC). Реализацию этого локатора разместим в модуле OberHostFiles.Locator. В данной реализации мы используем возможности модуля HostFiles, для простоты. При этом, понятно, что реализация локатора с хэндлером может быть размещена сразу в реализации файловой подсистемы BlackBox, так как OberFiles.Locator по-прежнему является абстрактным типом. +Для этого опишем класс-наследник локатора: ''OberFiles.Locator'', в интерфейс которого добавим метод ''.HandleMsg(VAR msg: ANYREC)''. Реализацию этого локатора разместим в модуле ''OberHostFiles.Locator''. В данной реализации мы используем возможности модуля HostFiles, для простоты. При этом, понятно, что реализация локатора с хэндлером может быть размещена сразу в реализации файловой подсистемы BlackBox, так как ''OberFiles.Locator'' по-прежнему является абстрактным типом. 
-Важной частью системы является механизм автоматического приведения типа Files.Locator к типу HostFiles.Locator, при этом фактический результат операции приведения может содержать объект-обертку, так как с различными реализациями локатора могут быть связаны различные модули-реализации OberFiles.Locator (например, HostFiles <- OberHostFiles).+Важной частью системы является механизм автоматического приведения типа ''Files.Locator'' к типу ''HostFiles.Locator'', при этом фактический результат операции приведения может содержать объект-обертку, так как с различными реализациями локатора могут быть связаны различные модули-реализации ''OberFiles.Locator'' (например, HostFiles <- OberHostFiles).
 <code> <code>
 PROCEDURE GuardLoc*(loc: Files.Locator): Locator; PROCEDURE GuardLoc*(loc: Files.Locator): Locator;
Строка 50: Строка 50:
 </code> </code>
 Опираясь на базовый тип ANYREC мы описываем протокол (набор типов сообщений) взаимодействия с локатором, при этом, сам локатор не зависит от этих протоколов, они обрабатываются только в реализации OberHostFiles.  Опираясь на базовый тип ANYREC мы описываем протокол (набор типов сообщений) взаимодействия с локатором, при этом, сам локатор не зависит от этих протоколов, они обрабатываются только в реализации OberHostFiles. 
-Таким образом, описав сообщение GetPathStringMsg мы получаем возможность запросить у локатора текстовый путь. +Таким образом, описав сообщение ''GetPathStringMsg'' мы получаем возможность запросить у локатора текстовый путь. 
 Также подобные протоколы могут быть описаны в сторонних компонентах. Такие протоколы могут иметь разную детализацию аспектов платформы, тем самым позволяя разработчику гибко регулировать платформо-зависимость своего прикладного компонента.  Также подобные протоколы могут быть описаны в сторонних компонентах. Такие протоколы могут иметь разную детализацию аспектов платформы, тем самым позволяя разработчику гибко регулировать платформо-зависимость своего прикладного компонента. 
 <code>VAR loc: Files.Locator; ober: OberFiles.Locator; gpm: OberProtocol.GetPathStringMsg; <code>VAR loc: Files.Locator; ober: OberFiles.Locator; gpm: OberProtocol.GetPathStringMsg;
Строка 66: Строка 66:
 Таким образом, подсистема с набором подобных уточняющих абстракций, размещенная в общеупотребимой (а возможно и стандартной для сборки BlackBox) подсистеме сможет обеспечить развитие возможностей с сохранением обратной совместимости компонентов и интерфейсов. Таким образом, подсистема с набором подобных уточняющих абстракций, размещенная в общеупотребимой (а возможно и стандартной для сборки BlackBox) подсистеме сможет обеспечить развитие возможностей с сохранением обратной совместимости компонентов и интерфейсов.
 ===== Пример использования ===== ===== Пример использования =====
-Прототип реализации для эталона BlackBox размещен в подсистеме [[https://bitbucket.org/akastargazer/bb.open/src|Sith]].+Прототип реализации для эталона BlackBox размещен в подсистеме [[https://bitbucket.org/petryxa/sith|Sith]].
  
  
  --- //[[petryxa.clever@gmail.com|Кушнир П. М.]] 2013/12/20 21:34//  --- //[[petryxa.clever@gmail.com|Кушнир П. М.]] 2013/12/20 21:34//
bbextendnohost.1387573539.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)