Систему называют "информационной", если она поддерживает информационную поддержку бизнеса (любой деловой человек знает, сколько сил и средств уходит на поддержание необходимой информации). Соответствующая программа называется "системой", если она (в некоторых случаях последовательно, а иногда параллельно) выполняет более одной функции (одним из распространенных примеров являются информационные системы, поддерживающие ведение складского хозяйства: они отслеживают поступление товаров на склад, отпуск их покупателю, а также контролируют наличие на складе необходимого количества каждого продукта).
В большинстве случаев для создания собственной информационной системы невозможно обойтись без использования баз данных. Чем отличается "база данных" от какого бы то ни было склада данных, поддерживаемого в файлах ОС? Основное отличие состоит в том, что набором данных, входящих в состав базы данных, управляет специальная системная программа, обычно называемая "системой управления базами данных" (СУБД), которая обладает знаниями по поводу связи между разнородными данными. Например, в случае складской системы, СУБД, управляющая соответствующей базой данных, должна знать, что для всех единиц любого товара, перечисленных в общей складской ведомости, должно быть проставлено правильное число в документе, регулирующем поступление товаров на склад. Такого типа свойства называются целостностью базы данных. При создании базы данных информационной системы разработчик сообщает СУБД, какого рода ограничения целостности система должна поддерживать в базе данных, а далее ответственность берет на себя СУБД, без требования вмешательства прикладной программы. Обычно механизм обеспечения целостности баз данных интегрируется с механизмом управления транзакциями - последовательностью операций модификации базы данных, воспринимаемыми СУБД как одна атомарная операция.
Второй важной особенностью СУБД является обеспечение выполнения так называемых "незапланированных" (ad hoc) запросов к базе данных. Представим себе, что при проектировании информационной системы, предназначенной для автоматизации управления складом, было запланировано выполнение запросов о наличии на складе товаров, операций модификации данных при отпуске товаров со склада и их получении, а впоследствии возникла необходимость в информации об общем объеме поставок от данного поставщика. При отсутствии СУБД понадобилась бы переделка информационной системы. Однако СУБД, обладая достаточными знаниями о предметной области (например, о структуре и смысле данных складской информационной системы), может обеспечить универсальный язык запросов (обычно SQL), позволяющий сформулировать произвольный запрос на выборку информации из соответствующей базы данных. Такой запрос может быть в любой момент подан с терминала (без участия информационной системы) или встроен в одну из прикладных программ, входящих в информационную систему.
Не менее важно и то, что большинство современных СУБД способно обеспечить так называемый "режим мультидоступа". Сегодня развитые компьютерные архитектуры обычно относятся к одной из двух категорий (или к их комбинации): информационно-вычислительный сервер с подключенными к нему терминалами, либо локальная или распределенная сеть серверов и клиентских рабочих станций, обеспечивающая совместное использование ресурсов. В любом случае каждый из потенциальных пользователей вправе в любой момент времени воспользоваться услугами информационной системы. Соответственно, информационная система должна иметь возможность параллельно (или квазипараллельно - главное, чтобы конечный пользователь не замечал задержки ответа) выполнить операции, задаваемые несколькими пользователями одновременно (или почти одновременно). При этом такое "параллельное" выполнение вполне корректно, т.е. результат получается таким, как если бы несколько параллельных транзакций выполнялось последовательно (в литературе по базам данных используется термин "сериализованное выполнение пользовательских транзакций"). Подавляющее большинство современных развитых СУБД поддерживает эту возможность, избавляя разработчиков информационных систем от необходимости заботиться об обеспечении режима мультидоступа. Базовые знания в области систем управления базами данных кажутся необходимыми для проектировщиков и разработчиков информационных систем (независимо от того, какая конкретная СУБД будет использоваться).
Итак, современные СУБД предназначены именно для разработчиков и последующих пользователей информационных систем. Однако достаточно ли этих базовых программных средств? Довольно часто проектирование и разработка информационной системы сложны даже в том случае, если система опирается на какую-либо современную СУБД. Приходится решать задачи трех видов: проектирование и разработка логической структуры самой информационной системы как набора программ; проектирование лежащей в основе общего проекта информационной системы базы данных; проектирование и разработка интерфейсных подсистем, как тех, которые относятся к взаимодействиям информационной системы с конечным пользователем, так и тех, что связывают прикладные программы с СУБД. Если проектируемая информационная система достаточно сложна (а это обычное явление), то решение подобных задач "вручную", без привлечения программных инструментальных средств, как правило, превышает человеческие возможности.
К счастью, о нас позаботились софтверные компании, которые производят средства, служащие инструментом при проектировании и разработке информационных систем. Конечно, прежде всего это системы класса CASE (Computer Aided Software Enginering), ориентированные на поддержку разработки информационных систем. Наиболее развитые CASE-системы позволяют автоматизировать процесс проектирования и разработки прикладной системы, поддерживая полную документацию (возможно, с разными версиями) обо всем этом процессе. Может быть, наиболее важно то, что такие системы существенно помогают создавать схему базы данных, лежащей в основе проекта информационной системы. CASE-системы позволяют естественно (и достаточно просто) пройти путь от интуитивного представления структуры и поведения нужной предметной области до формализованного представления в терминах языка SQL. Такие возможности CASE-систем может оценить каждый, кому приходилось вручную проектировать схему достаточно сложной базы данных.
Другой класс программных средств (часто интегрированных с CASE-системами) составляют программные системы языков четвертого поколения (4GL). Это, может быть, чересчур громкое название означает лишь то, что такие, как правило, интерпретируемые языки предоставляют пользователю более или менее удобные средства для формирования интерфейса с конечным пользователем (например, в виде меню или форм), обеспечивают сравнительно простые возможности для взаимодействия с системой управления базами данных, а также предоставляют (обычно достаточно примитивные) средства программирования. Основное достоинство языков четвертого поколения в том, что они обеспечивают возможность так называемого "быстрого прототипирования приложений" (rapid prototyping).
Это значит, что при использовании 4GL можно действительно быстро соорудить работающий прототип будущей системы, обеспечивающий требуемый интерфейс с конечным пользователем и взаимодействующий с макетом базы данных (а возможно, и с реальной базой данных, если она к этому времени подготовлена). Приходится говорить про "прототип", поскольку большинство современных систем 4GL не обеспечивают той эффективности прикладных систем, какую дают обычные языки программирования. Вместе с тем, стоит заметить, что уже существует масса реально используемых информационных систем, разработанных исключительно на том или ином 4GL. Кто знает, что будет завтра, но тенденция к увеличению использования 4GL очевидна.
Наконец, несколько замечаний по поводу методологии проектирования и разработки информационных систем. Для профессиональных программистов постоянной проблемой являлся разрыв между данными и программой. При наличии сложно структурированной информации проектирование схемы базы данных - не менее сложная задача, чем написание собственно прикладной системы. Очевидно, что всегда предпочтительнее иметь не две сложные задачи, а одну. В этом случае выручает объектно-ориентированный подход. Если говорить совсем коротко, суть этого подхода состоит в том, что проектируются не данные и программы в отдельности, а объекты, сочетающие в себе и данные, и программы, информационно и функционально характеризующие соответствующие сущности предметной области. Подход полезен как с методологической точки зрения (исчезают две разнородные характеристики предметной области - данные и программы объединяются в объекты), так и с точки зрения техники проектирования и разработки программных систем (вместо двух технически не связанных, но логически переплетенных веток образуется один надежный ствол).
Заметим, что в последнее время подавляющее большинство CASE-систем и 4GL если не ориентируются, то обращают внимание на объектно-ориентированный подход. Более того, стали появляться методики по объектно-ориентированному использованию средств автоматизированного проектирования и разработки информационных систем, изначально для этого не предназначавшихся. Итак, как же сделать информационную систему? Сегодня ее создателю, как минимум, нужно иметь базовые знания о современных СУБД, ориентироваться в мире инструментальных средств разработки программных систем и иметь представления об объектно-ориентированном подходе к проектированию и разработке программ. Конечно, при этом неплохо еще уметь программировать :-).
Сергей Кузнецов - главный редактор журнала "Открытые системы", консультант Центра Информационных Технологий. С ним можно связаться по телефону (095) 932-9212.