Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
bbextendnohost [2013/12/20 22:14] kpmy добавил подпись, добавил результаты |
bbextendnohost [2013/12/21 01:05] kpmy [Что требуется?] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Метод расширения абстракций System ====== | ====== Метод расширения абстракций System ====== | ||
===== Предпосылки ===== | ===== Предпосылки ===== | ||
- | Системный слой BlackBox представлен набором абстрактных интерфейсов, | + | Системный слой BlackBox представлен набором абстрактных интерфейсов, |
+ | А при дальнейшем расширении абстракций необходимо учитывать, | ||
На примере простой абстракции местоположение файла Files.Locator (далее **локатор**) рассмотрим возможные варианты решения. | На примере простой абстракции местоположение файла Files.Locator (далее **локатор**) рассмотрим возможные варианты решения. | ||
Строка 12: | Строка 13: | ||
В большинстве случаев реализация локатора содержит указание на физическую папку на диске компьютера или в сети, и путь к такой папке представлен [[http:// | В большинстве случаев реализация локатора содержит указание на физическую папку на диске компьютера или в сети, и путь к такой папке представлен [[http:// | ||
- | Однако расширяемый интерфейс локатора позволяет реализовать местоположение файла, | + | Однако расширяемый интерфейс локатора позволяет реализовать местоположение файла, которое не поддерживает выражение в виде |
Поэтому в Files.Locator подобная возможность отсутствует. | Поэтому в Files.Locator подобная возможность отсутствует. | ||
Строка 19: | Строка 20: | ||
===== Что требуется? | ===== Что требуется? | ||
- | Расширить возможности базового типа Files.Locator в ряде задач при сохранении неизменности интерфейса Files.Locator, | + | Расширить возможности |
===== Варианты решения ===== | ===== Варианты решения ===== | ||
Строка 51: | Строка 52: | ||
Таким образом, | Таким образом, | ||
Также подобные протоколы могут быть описаны в сторонних компонентах. Такие протоколы могут иметь разную детализацию аспектов платформы, | Также подобные протоколы могут быть описаны в сторонних компонентах. Такие протоколы могут иметь разную детализацию аспектов платформы, | ||
+ | < | ||
+ | BEGIN | ||
+ | loc: | ||
+ | ober: | ||
+ | IF ober#NIL THEN | ||
+ | ober.HandleMsg(gpm); | ||
+ | ELSE Log.String(' | ||
+ | IF gpm.path# | ||
+ | END;</ | ||
Но само наличие таких протоколов не гарантирует, | Но само наличие таких протоколов не гарантирует, | ||
===== Результаты ===== | ===== Результаты ===== | ||
- | Реализовав описанный способ расширения мы решили проблему наращивания функциональности локатора без изменения базового типа, избежав проблему появления хрупкого базового класса с помощью параметрического полиморфизма. | + | Реализовав описанный способ расширения мы решили проблему наращивания функциональности локатора без изменения базового типа, избежав проблему появления хрупкого базового класса с помощью параметрического полиморфизма, а платформо-зависимость клиентских модулей может регулироваться посредством выбора нужного протокола. |
Таким образом, | Таким образом, | ||
+ | ===== Пример использования ===== | ||
+ | Прототип реализации для эталона BlackBox размещен в подсистеме [[https:// | ||
+ | |||
--- // | --- // |