Приходится иногда сталкиваться с ситуацией, когда на этапе проектирования добавляется защита от всего подряд. Подменяя необходимость анализа, верой в универсальность наработанных методов. В результате получается нечто сложнореализуемое, состоящие из нагруженных компонентов. Что неизбежно приводит к негативным последствиям. Поэтому, уже давно хочу написать программу позволяющую правильно оценить осведомлённость в решаемой задаче. А для этого, было бы правильно обзавестись ТЗ, чтобы не получилось чего-то плохого.

За основу программы хочу взять метод работы с карточками Цеттелькастен, немного его модифицировав. Каждому объекту (задаче/явлению) должна соответствовать своя карточка. Каждая карточка имеет два столбца ссылок, один столбец содержит свойства (признаки) рассматриваемого объекта, второй столбец – факторы влияющие на объект.

Правило работы с карточками простое: не объект определяет набор своих признаков, а признаки определяют объект. Кот мяукает и именно поэтому он кот. А ещё, чтобы считаться котом он должен иметь определённый окрас, черты характера и особенность зрения. Объект можно определить только по совокупности признаков.

 Признаки объекта появляются не сами по себе, есть факторы влияния, определяющие набор признаков. Например, за окрас отвечает среда обитания и наследственность, которые не позволяют коту быть зелёным. И если у объекта есть свойство, но нет влияющего на это свойство фактора, то можно рассчитывать на существование неизвестных рисков, которые необходимо устранить.

Такой подход работает и без программы, показывая часть слабых мест в сформировавшемся представлении о проекте. Программа должна находить неочевидные свойства объектов, что позволит выявлять неизвестные факторы влияния. Это возможно если сам объект будет выступать в качестве фактора влияния для других объектов, передавая им свои свойства и получая новые свойства.

Каждая карточка является своеобразным классом, и для её использования нужно создавать экземпляр класса. Например, есть класс «Кот», а есть конкретный экземпляр «Кот Василий» у которого класс «Кот» выступает в качестве фактора влияния. При этом, если в экземпляре объекта потребуется добавить новые свойства, то такие изменения возможны только в базовой карточке объекта. В таком случае, чем больше базовый объект будет использоваться, тем больше будет перечень свойств объекта, а значит он сможет передать больше свойств другому объекту.

Но в отличии от базовой карточки, её конкретный экземпляр содержит не сами свойства, а конкретные значения этих свойств, если они есть. Кот Василий в таком случае будет наглым, любопытным, рыжим, обладать ночным зрением и будет уметь мяукать. Значения свойств, это точно такие же объекты имеющие свои карточки. В данном случае значение – это контекстно зависимые свойства тех объектов, которые были использованы в качестве свойств текущей карточки.

В процессе наполнения базы данных программы, формируются структуры со сложными связями между элементами. Для наглядного представления этих структур можно использовать два дерева проекта. Одно из них отображает базовые структуры представления о объектах. Во втором дереве отображается представление конкретных объектов, структура представления которых построена на основе базовых структур.

Анализ проводится путём постепенного разворачивания ветки дерева проекта относящейся к конкретному объекту, с целью уточнения значений и связей. Анализ завершается, когда все возможные пути заканчиваются значениями. При этом, все значения должны согласовываться с другими объектами над которыми был проведён анализ ранее. Если нужен такой анализ. 

На этом, проработанное т.з. всё. Если возникнет такое желание, то с черновым вариантом программы можно ознакомится скачав исходник на C#. Предупреждаю сразу, код выполнен в стиле «что вижу то пою». Черновик создавался для написания т.з. 

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

В очень далёкой перспективе, где-то ближе к никогда, сделать онлайн сервис. Такая система начнёт полноценно работать только при массовом использовании и большом выборе разнообразных базовых структур. При этом, если ударится в блокчейн, каждая структура идеальный NFT-токен. Ведь карточку или структуру не только нужно создать, за ней нужно следить. И чем качественней результат, тем выше заинтересованность. Оно ведь как-то должно работать. 

Комментарии (6)


  1. dyadyaSerezha
    19.05.2024 09:00
    +3

    Поздравляю, вы только что "изобрели" иерархию классов, вложенность объектов, структуры данных и переиспрльзуемые библиотеки в языках программирования. Забыли только, что у объектов есть ещё поведение кроме свойств. Всё это существует десятки лет, автоматизированно "от и до" и реализовано в куче продуктов, включая даже распространение (как платное, так и бесплатное).

    Но как всё это может заменить ТЗ, особенно по ГОСТу, в котором отписываются требования, а не просто детали будущей системы (и даже не детали предметной области)?

    P.S. Лучше попробуйте стихи. Вот, например, я утром сочинил "я помню чудное мгновенье, передо мной явилась ты..." Неплохо, да? Осталось только в виде карточек Цеттелькастен оформить.


    1. Philistine1917 Автор
      19.05.2024 09:00

      Сразу хочется задать вопрос, потратив на это единственную возможность. Что такое Цеттелькастен и на что будет похожа его реализация? Вот есть у меня уверенность, что выглядеть это будет именно так.

      И сразу второй вопрос, кому нужно гостовское тз? Я к вам, обращаться не собирался. А любому программисту будет достаточно черновика. Проще переписать черновик чем собирать с нуля, что неоднократно проверено на практике. И так гораздо дешевле - идёт по цене рефакторинга.


  1. JuryPol
    19.05.2024 09:00
    +2

    Правило работы с карточками простое: не объект определяет набор своих признаков, а признаки определяют объект. Кот мяукает и именно поэтому он кот.

    А в чем смысл такого извращения уточнения? Я правильно понимаю, что «мяуканье» мы, конечно, занесем в чудесным образом имевшуюся задолго до этого карточку «кот»… Тут эта карточка и вздохнет с облегчением.

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

    При этом, если ударится в блокчейн, каждая структура идеальный NFT-токен.

    Сова и глобус уныло поплелись навстречу друг другу…


  1. randomsimplenumber
    19.05.2024 09:00

    Кот мяукает и именно поэтому он кот

    Посмотрел на кота - не мяукает, спит шерстяной. Может это и не кот?

    По древовидным структурам не топтался только ленивый. Выглядит красиво, А про Цеттелькастен впервые соышу. Что это?


    1. asantat
      19.05.2024 09:00

      Это не то, по всей видимости, о чем писал автор. Просто ленивые на чтение люди во всех воплощениях семантики или реляционных взаимоотношениях между сущностями в домене управления знаниями видят Zettelkasten. Я здесь тоже, даже приложив усилия, не увидел ничего похожего на Zettelkasten по Луману или в его более обобщенных вариациях типа как видят авторы zettelkasten.de. Если бы автор дал бы контекст и примеры, как можно использовать такой подход, и в каких случаях эта органическая классификация на основе свойств будет хорошо работать, было бы легче понять, зачем нужны yet another отдельная программа и пост.


  1. itGuevara
    19.05.2024 09:00
    +1

    Подход с карточками, типизацией и т.п. - базовый и не только в ZettelKasten. Что-то подобное делал в Excel (поля это - свойства объектов, каждый набор объектов одного типа - отдельный лист, связи, теги и т.п.).

    Один из ключевых вопросов остается про графическую визуализацию и семантику:

    Родственное направление: semantic ZettelKasten – как «младший брат» semantic Wiki, семантическая база знаний и т.п. Напомним, что обычный ZettelKasten (Obsidian, Logseq, Joplin и т.п.) изначально имеют графовую подсистему, но такую же убогую (см. «Вопрос»). Такой sZK/ sPKM: Personal Knowledge Models with Semantic Technologies обсуждается, но широкого применения не нашел и имеет ту же проблему – задание сложной графической нотации отображения (визуализации) ...

    Если есть opensource ZettelKasten на RDF, подскажите.