Описание алгоритмов и чёрный ящик

velkin velkin

Чёрный ящик


Чёрный я́щик — термин, используемый для обозначения системы, внутреннее устройство и механизм работы которой очень сложны, неизвестны или неважны в рамках данной задачи. «Метод чёрного ящика» — метод исследования таких систем, когда вместо свойств и взаимосвязей составных частей системы, изучается реакция системы, как целого, на изменяющиеся условия.

Модель чёрного ящика

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


Работа с кодом по документации это по сути работа с чёрным ящиком. Тем не менее выделение алгоритма из кода тоже не простая задача. Этому мешает архитектура, которая может размазать даже простой алгоритм по огромному количеству классов, обёртывая его всевозможными шаблонами проектирования.

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

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

Описание алгоритма


Виды мышления по зарождению в сознании:
1) Восприятие.
2) Воображение.
3) Словесное.
4) Абстрактное.

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

Таким образом я бы выделил следующие виды описаний алгоритмов:
1) Описание (словесное).
2) Модель (чертёж).
3) Использование (код).
4) Алгоритм (код).

Возможно есть какие-то особые случаи. К таким можно было бы отнести тесты или что-то ещё.

Описание


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

Модель


Модель несёт в себе геометрический смысл алгоритма. Ту же окружность можно определить разными способами, координатами и радиусом (диаметром), вектором и так далее. Однако эта информация ничего не сообщает о самом объекте.

В этом плане UML является отличным примером обмана.

UML (англ. Unified Modeling Language — унифицированный язык моделирования) — язык графического описания для объектного моделирования в области разработки программного обеспечения, для моделирования бизнес-процессов, системного проектирования и отображения организационных структур.


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

https://upload.wikimedia.org/wikipedia/commons/d/da/Circle_arc.svg

Использование


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

Алгоритм


И наконец в этом разделе записывается сам алгоритм в строгом виде, то есть в виде кода. Всякие досужие размышления почему так, а не иначе идут в описании и здесь не нужны.