Спасибо за видео! Как всегда, очень познавательно. Какой view компонент использовался для отображения дерева? Про reduce с удовольствием узнал бы подробнее.
Использовался обычный RecyclerView. Вся логика по представлению дерева заключена в адаптере. Используется дерево, как в этом видео, только добавлены поля, которые обозначают, развернута ли группа или нет. При клике по группе она помечается как развернутая и адаптер вызывает notifyItemRangeInserted(), чтоб сообщить RecyclerView, где и сколько дочерних элементов добавилось. Когда группа сворачивается - логика та же, вызываем notifyItemRangeRemoved(), сообщаем где и сколько элементов надо убрать. То есть, все сводится к согласованному управлению добавлением и удалением дочерних элементов в адаптере.
Ага, пол года назад написал АВЛ дерево на Java, которое самобалансирубщееся. Но видео до сих пор не сделал, потому что не уверен, что смогу понятно объяснить)
Доброго времени суток!!! Отличная подача материала и сам материал шикарный. Есть вопрос: "Для чего у нас модификатор доступа public внутри класса TreeNode - у interface TypeAdapter, а также у статического метода makeTree" Я не так давно занимаюсб java - но по внутреннему ощущению тут тоже protected? Артем, пожалуйста продолжай развивать свой канал - приятно смотреть на мастера своего дела!!!
Если предполагается, что метод будет вызываться кем-то извне класса, то метод public. Если я пишу public, это означает, что согласно моему виденью дизайна класса, этот элемент относится к внешнему интерфейсу класса, а не к его внутреннему устройству, которое снаружи класса не видно.
Добрый день А по объектным графам не планируете видео? Кажется очень удобной структурой данных, в чем-то близкой графовым БД. en.wikipedia.org/wiki/Object_graph Когда пишу на Python всякие поделки, часто пользуюсь вот такой стековой машиной, которая работает поверх графовой структуры: github.com/ponyatov/graph/blob/master/graph.py Базовый класс class Frame: def __init__(self,V): self.type = self.__class__.__name__.lower() # поле нужно только для парсерной библиотеки self.val = V self.slot = {} self.nest = [] Из узлов (наследуемые классы от Frame) формируется направленный граф, можно циклический. Удобно представлять разноообразные связанные данные. Каждый узел может иметь скаларное значение, произвольные атрибуты (имя -> ссылка на фрейм), и упорядоченный список ссылок на другие фреймы Хотелось бы перетащить это под Java, сделать persisstense для больших графов, и добавить штуки типа сопоставления по шаблону. (основное приложение -- базы знаний, и представление исходного кода на произвольных языках для его анализа)
Очень интересно, базы знаний для чего, если не секрет? Искусственным интеллектом занимаетесь? Структуру данных надо рассматривать вместе с задачей, для которой ее удобно применять. По сути речь идет о сетевой базе данных. А у них на сегодняшний момент достаточно узкое применение. Сейчас сходу даже не приходит в голову, как и для чего обосновать применение объектного графа.
@@arhitutorials пара целей для самообучения основная цель -- анализ legacy кода, нахавался вдоволь, всегда удивлялся что нет средств позволяющих работать с отпарсенным кодом в виде атрибутированного графа (запросы, трансформации, генерация кода по спекам и т.п.). Под представление кода объектные графы просто идеальная модель, на них бесшовно ложатся AST, атрибутные грамматики, возможно и другие компиляторные структуры, но мне низкий уровень не нужен. недавно заинтересовался системами для обучения (eLearning), адаптивное обучение -- там тоже кажется перспективным применить фреймы в качестве представления знаний
В некоторых языках есть встроенные возможности для кодогенерации. Например в Java можно писать процессоры аннотаций и запускать их во время компиляции. Можно исходники на лету создавать, манипулировать AST и даже редактировать или создавать байткод. Чем и пользуются многие библиотеки, делая вещи, которые по другому невозможны. Например, аспектно-ориентированное программирование, корутины, автоматизация внедрения зависимостей и т.п. Я кстати думаю, что будущее именно за генерацией кода по спекам. По этому активно интересуюсь этой темой. Мечтаю написать генератор/конструктор приложений)
Вы отличный преподователь
Спасибо за видео, всё шикарно объяснили
Спасибо за видео! Как всегда, очень познавательно. Какой view компонент использовался для отображения дерева? Про reduce с удовольствием узнал бы подробнее.
Использовался обычный RecyclerView. Вся логика по представлению дерева заключена в адаптере. Используется дерево, как в этом видео, только добавлены поля, которые обозначают, развернута ли группа или нет. При клике по группе она помечается как развернутая и адаптер вызывает notifyItemRangeInserted(), чтоб сообщить RecyclerView, где и сколько дочерних элементов добавилось. Когда группа сворачивается - логика та же, вызываем notifyItemRangeRemoved(), сообщаем где и сколько элементов надо убрать. То есть, все сводится к согласованному управлению добавлением и удалением дочерних элементов в адаптере.
@@arhitutorials, спасибо:)
а что есть под десктоп для отображения диаграмм, хотя бы на уровне замены GraphView?
крутое видео, только хочется где делают дерево, которое само себя балансирует, по примеру красно черное дерево
Ага, пол года назад написал АВЛ дерево на Java, которое самобалансирубщееся. Но видео до сих пор не сделал, потому что не уверен, что смогу понятно объяснить)
@@arhitutorials жаль, а тоб мне праздник устроили бы)
Доброго времени суток!!! Отличная подача материала и сам материал шикарный. Есть вопрос: "Для чего у нас модификатор доступа public внутри класса TreeNode - у interface TypeAdapter, а также у статического метода makeTree" Я не так давно занимаюсб java - но по внутреннему ощущению тут тоже protected? Артем, пожалуйста продолжай развивать свой канал - приятно смотреть на мастера своего дела!!!
Если предполагается, что метод будет вызываться кем-то извне класса, то метод public. Если я пишу public, это означает, что согласно моему виденью дизайна класса, этот элемент относится к внешнему интерфейсу класса, а не к его внутреннему устройству, которое снаружи класса не видно.
@@arhitutorials Благодарю, спасибо
Проверь плейлисты, а то смотришь плейлист, думаешь все будет последовательно, а оказывается целых 2 видео прошли мимо.
Добрый день
А по объектным графам не планируете видео? Кажется очень удобной структурой данных, в чем-то близкой графовым БД.
en.wikipedia.org/wiki/Object_graph
Когда пишу на Python всякие поделки, часто пользуюсь вот такой стековой машиной, которая работает поверх графовой структуры:
github.com/ponyatov/graph/blob/master/graph.py
Базовый класс
class Frame:
def __init__(self,V):
self.type = self.__class__.__name__.lower() # поле нужно только для парсерной библиотеки
self.val = V
self.slot = {}
self.nest = []
Из узлов (наследуемые классы от Frame) формируется направленный граф, можно циклический. Удобно представлять разноообразные связанные данные.
Каждый узел может иметь скаларное значение, произвольные атрибуты (имя -> ссылка на фрейм), и упорядоченный список ссылок на другие фреймы
Хотелось бы перетащить это под Java, сделать persisstense для больших графов, и добавить штуки типа сопоставления по шаблону.
(основное приложение -- базы знаний, и представление исходного кода на произвольных языках для его анализа)
Очень интересно, базы знаний для чего, если не секрет? Искусственным интеллектом занимаетесь?
Структуру данных надо рассматривать вместе с задачей, для которой ее удобно применять. По сути речь идет о сетевой базе данных. А у них на сегодняшний момент достаточно узкое применение. Сейчас сходу даже не приходит в голову, как и для чего обосновать применение объектного графа.
@@arhitutorials пара целей для самообучения
основная цель -- анализ legacy кода, нахавался вдоволь, всегда удивлялся что нет средств позволяющих работать с отпарсенным кодом в виде атрибутированного графа (запросы, трансформации, генерация кода по спекам и т.п.). Под представление кода объектные графы просто идеальная модель, на них бесшовно ложатся AST, атрибутные грамматики, возможно и другие компиляторные структуры, но мне низкий уровень не нужен.
недавно заинтересовался системами для обучения (eLearning), адаптивное обучение -- там тоже кажется перспективным применить фреймы в качестве представления знаний
В некоторых языках есть встроенные возможности для кодогенерации. Например в Java можно писать процессоры аннотаций и запускать их во время компиляции. Можно исходники на лету создавать, манипулировать AST и даже редактировать или создавать байткод. Чем и пользуются многие библиотеки, делая вещи, которые по другому невозможны. Например, аспектно-ориентированное программирование, корутины, автоматизация внедрения зависимостей и т.п.
Я кстати думаю, что будущее именно за генерацией кода по спекам. По этому активно интересуюсь этой темой. Мечтаю написать генератор/конструктор приложений)