VisualData

Программирование без кодирования

Все мы интуитивно воспринимаем программу как некоторый набор действий, которые должен исполнить компьютер. Исторически, корни такого представления начинают расти из архитектуры процессора. Сначала предпринимаются простые попытки абстрагироваться от его системы команд. А затем, многократно усиливая абстракцию при помощи API операционок и фреймворков, такой образ мышления породил великое разнообразие языков и парадигм программирования, объединенных общим девизом: действие — первично. Все это выглядит настолько естественным, что варианты даже не рассматриваются.

Между тем, Вам случаем не доводилось встречать программу вне компьютера, в реальном мире? Лично мне — нет. Реализм окружающего мира устроен как-то иначе. В нем каждое сущее обладает некоторым набором свойств и способностью откликаться на внешние воздействия, воздействуя при этом на другие сущности и/или изменяя собственные свойства согласно общим правилам данного слоя реальности. Программы нет — есть правила поведения. Поведением обладают сущности и их свойства. Это та абстрактная составляющая реальности, вещественная часть которой дана нам в ощущениях в виде объектов с их значениями — экземплярами абстрактных сущностей и их свойств. Что примечательно, в памяти компьютера и абстрактную и вещественную части реальности можно выразить структурами данных, причем со значительной долей взаимной однородности. Структура данных абстракции порождает в общем-то повторяющую ее структуру данных экземпляра.

А может ли некоторая структура данных, образованная экземплярами, быть программой? Почему бы и нет. Возьмем, к примеру, генетику. Всего четыре аминокислоты,… и какое богатство форм жизни на выходе. Сами же аминокислоты образованы комбинацией атомов четырех элементов, причем каждый из которых — тоже комбинация,.. что невольно наводит на раздумья о наличии универсальных способов решения задач. В частности — простым комбинированием экземпляров простых сущностей, образующих минимальный базисный набор элементов.

С информационной точки зрения такой базисный набор включает в себя всего четыре (!) абстракции: сущность - класс, свойство сущности - атрибут, отношение (классов) и зависимость (связь атрибутов). Из экземпляров этого набора можно «составить» модель любой предметной области автоматизации, которая будет являться своего рода логическим эквивалентом программы. Классы модели и их атрибуты порождают производные объекты с их значениями, а отношения и связи образуют совокупность правил их порождения и взаимодействия. И что любопытно: исполнение этих правил обеспечивают всего шесть (!) принадлежащих классам и атрибутам функций. У простой сущности и поведение простое, но вот во множестве экземпляров комплексное поведение может быть сколь угодно сложным.

Каждый элемент базисного набора, а также их события, обладают так называемым интерфейсным представлением, и зачастую не одним. Интерфейсное представление — это такая же структура данных, как и базисные элементы с их экземплярами, и в свою очередь обладает способностью создавать собственные экземпляры. Комбинируя экземпляры интерфейсных представлений базисного набора можно составить сколь угодно сложный интерфейс прикладной программы. И, вишенка на торте: визуальную часть как отдельного представления, так и интерфейса в целом, можно «собрать» из экземпляров всего четырех (!) визуальных примитивов.

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