В посте
я показал (сократив подробности)), как из реляционной базы можно программным способом строить силуэты. Теперь обсудим возможности динамичной компоновки веток. Чтобы программно осуществлять такую компоновку, необходима именно реляционная модель данных, потому что, как и в случае построения сетевых деревьев, при каждом таком построении
требуется огромный объём обработки поисковых запросов, а для этого реляционные базы и предназначены!.. Силуэты здесь изображу особым способом, допускающим параллельную обработку потоков (логические элементы).
Программы с применением булевой логики – это конфетка для программистов: настолько в них проще можно реализовать (и понимать)) многие вещи. Думаю, что синтаксис логических элементов навсегда войдёт во все современные языки программирования.
Обратите внимание на поля динамической компоновки веток (расположенные справа). Для каждой ветки показано только одно поле, но, вообще-то, для полноценной сортировки рекурсивных обращений их должно быть два:
- Ветки, заканчивающиеся хотя бы одним входящим вызовом текущей (чем раньше, тем правее)
- Исходящие вызовы (чем правее, тем позже) – эти ветки вызываются из текущей
То есть, "встав" на любую ветку силуэта, можно скомандовать: покажи мне для этой веточки места в программе, откуда она вызывается! Или все места в программе, куда из неё осуществляется переход. Или и то, и другое. Причем, речь именно о рекурсивности: среда программирования покажет ветки, которые вызываются "проездом" через промежуточные. И уровень рекурсии можно задать для любого из направлений (входящая или исходящая).
Соответственно, из такого силуэта можно управлять листингом кода: на экране будут показаны лишь строчки, соответствующие отсортированным веткам. Отрицательный смысл рекурсии вызова означает, что ветки нужно не показывать
(, а скрывать).В следующем рисунке 'расшифрованы' ещё кое-какие интерфейсные возможности динамичного силуэта.