В общем у меня наклевался абстрактный язык [программирования]. То, что он абстрактный - это точно, но вот язык программирования ли - не факт. Не компилируется потому что.
Язык придумать нетрудно, но вот эффективно использовать его - такая прикладная задача еще не решена.
Элементы языка: все элементы обычного языка программирования + абстрактное множество, абстрактный список, абстрактная функция, абстрактная переменная, абстрактный тип данных...
1. Абстрактное множество - это неполное перечисление чего-либо. Например, "1, 2, 3 и так далее". Или такое: "белый, синий, красный и проч".
2. Абстрактный список - это упорядоченное абстрактное множество. В отличие от абстрактного множества перечисление элементов производится строго в определенном порядке. При этом элементы неопределенности (абстрактности) вроде "и так далее", "и т.п. и т.д.", "..." могут повторяться.
3. Абстрактная функция - это функция, которая может не иметь имени, принимает на вход абстрактный список переменных или абстрактное множество переменных и выдает на выход абстрактный список или множество. Так как имени у функции может не быть, то следует использовать ключевое слово
abstract.
Код:
Set1 := abstract(Set2)
На этих трёх китах я строю все остальное.
4. Абстрактное перечисление (enumeration) - фактически это то же множество, только элементами выступают значения (values).
5. Абстрактный тип данных - это тип данных, построенный на базе абстрактного перечисления.
6. Абстрактный код - это [упорядоченный] абстрактный список инструкций.
Код:
Func1(a);
Func2(b);
бла-бла-бла
for (int = 0, i<n, i++) {}
бла-бла-бла
7. Абстрактное условие в операторах if, for, while - это абстрактная функция. Вообще условие/предикат - это функция, на входе которой список переменных и логических операций над ними, а на выходе переменная типа bool. У условия-функции нет имени, это фактически анонимная функция, привязанная к ключевым словам if, for, while. Поэтому нет необходимости использовать ключевое слово abstract.
Код:
if ((a>1) && etc) {}
8. Абстрактный объект - это абстрактный список или абстрактное множество полей и методов.
9. И так далее. (Дальше нет смысла перечислять языковые конструкции.)
Понятие абстрактной функции очень полезно при дистилляции (рафинировании) кода. Можно подать на вход абстрактной функции некоторый элемент абстрактного или реального кода и получить на выходе ещё более дистиллированный (рафинированный) код.
Например,
Код:
[a, b, c, ...] = abstract(a, b, c, d, e, f)
Вместо "и так далее", "бла-бла-бла", "etc" я применяю многоточие (...).
-- 05.03.2021, 23:07 --Ещё сегодня открыл 3D-модель станка моего коллеги... Станок вживую не видел, он на модели весь кожухами закрыт, а мне нужно было найти все двигатели и редукторы... И тут я понял, что и в конструировании нужно эффективное изложение информации.
Нажал бы кнопочку "скрыть всякую МИШУРУ" и готово!
Да, как говорит
arseniiv, надо грамотно строить архитектуру. Всякие там Автокады и Компасы умеют группировать детали в макроэлементы или блоки. Но у этих всех программ также как и у языков программирования - они группируют код лишь по
одному признаку. В таких условиях правильнее всего группировать по функциональным связям: так в языках программирования все группируется в объекты, а в программах 3D-моделирования группируется по сборочным единицам.
Однако взять и скрыть все метизы я не могу. Хотя, конечно, вру, так как просто не знаю, как это можно сделать. Ну ладно, но вот скрыть из модели все кожуха я не могу однозначно, так как Автокад ко всем деталям относится одинаково. В итоге я сидел и скрывал каждую деталь и никакой помощи от Автокада в этом нет.