- •Н.Е. Сапожников
- •Севастополь
- •Оглавление
- •Список сокращений
- •Предисловие
- •Введение
- •Глава 1 Информация: ресурс, продукт, услуга
- •Глава 2 Информация как экономическая категория
- •Глава 3 Информационный рынок
- •Глава 4 Материальные носители информации
- •Глава 5 Языки программирования для решения экономических задач
- •Глава 6 Современное программное обеспечение информационных систем
- •Глава 7 Кодирование и классификация экономической информации
- •Раздел 2. «Национальные единицы измерения, включенные в ескк» содержит дополнительные национальные единицы измерения, отсутствующие в международных классификациях.
- •Глава 8 Проектирование информационных систем
- •Глава 9 Стандартизация информационных экономических систем
- •Глава 10 Новые направления развития экономических информационных систем
- •Глава 11 Сбор и анализ данных и прогнозирование тенденций
- •Глава 12 Выработка стратегии управления
- •Глава 13 Обзор возможностей пакета Marketing Expert
- •Глава 14 Построение и анализ имитационных моделей
- •Глава 15
- •Глава 16 Оптимальное планирование модельных экспериментов
- •Глава 17 Обработка и анализ результатов моделирования
- •Глава 18 Обзор программных пакетов matlab и jpssw
- •Глава 19 Сетевые информационные технологи
- •Глава 20 Защита информации в ивс
- •Глава 21
- •Решение задач анализа экономических
- •Зависимостей и линейной оптимизации
- •С применением пакета ms Excel
- •Глава 22 Анализ рынка экономических информационных управляющих систем
- •Глава 23 Принципы построения икис «галактика»
- •Решения и ответы на контрольные вопросы
- •Литература
- •Глоссарий
- •Николай Евгеньевич Сапожников
Глава 6 Современное программное обеспечение информационных систем
К современным видам программирования, непрерывно развивающимся, относятся объектно-ориентированное программирование (ООП), программирование, управляемое событиями, визуальное программирование (в том числе интерфейса), обеспечение взаимодействия программ в информационных системах, разработка и использование баз данных.
Объектно-ориентированное программирование
Объектно-ориентированное программирование (ООП)— логически следующая за структурным ступень развития. ООП начинает бурно развиваться с конца восьмидесятых годов. Начало девяностых отмечено повсеместным внедрением новых объектно-ориентированных языков программирования. К их числу в первую очередь относится C++ [15] и объектно-ориентированный Pascal. Развитие ООП привело к такому существенному изменению стиля программирования, что даже новые операционные системы стали разрабатываться под влиянием этих концепций. Так, в системах Windows 9x/NT многие сущности ориентированы на ООП. Например, одним из назначений реестра Windows является регистрация в ОС классов, входящих в состав программных комплексов.
Классы (в некоторых версиях Pascal они названы объектами) — основные элементы ООП, расширяющие понятие типов данных и объединяющие (инкапсулирующие) в единое целое данные (в ООП они называются поля) и программный код (в ООП — методы), обрабатывающий их. Здесь структура данных объединена в единое целое с основными методами, осуществляющими доступ к ним и их обработку. После разработки класса программист, использующий его, не нуждается в знании о структуре данных внутри класса. Если изменить структуру данных и при этом соответственно изменить внутренние алгоритмы обработки этих данных, то программист, использующий класс во внешних модулях, не заметит изменения структуры. Если в традиционном структурном программировании изменение структуры данных приведет к необходимости переработать практически все модули, использующие эту структуру, то в ООП переработка затронет только методы класса. Таким образом, ООП является расширением концепции структурного программирования.
Базируется ООП на следующих основных принципах:
инкапсуляция (описана выше),
наследование,
полиморфизм (многообразность),
в последнее время к основным понятиям относят скрытие данных
Механизм наследования позволяет использовать структуры данных и методы уже разработанного класса в новых классах, которые имеют много общего со старым, но отличаются от него некоторыми деталями. Старый является родительским классом, а новый — дочерним классом. Если бы при создании нового класса все приходилось бы начинать с нуля, то эффективность использования классов могла быть поставлена под сомнение. Однако, построив генеалогическую структуру реальных объектов, выделив их общие стороны и отличия, программист может программно реализовать эту структуру благодаря наследованию. При этом для дочернего класса он опишет только его отличительные признаки, а все общее дочерний класс автоматически «заимствует» у родительского.
Полиморфизм подразумевает возможность для конкретного экземпляра объекта во время выполнения принимать образ различных классов программы. Это позволяет организовать массив объектов разного типа, и обрабатывать в головной программе каждый из них по единому алгоритму, не задумываясь над тем, какому классу реально принадлежит очередной объект. Скрытие данных запрещает внешней программе оперировать непосредственно с полями класса. Чтение или запись данных в поля можно выполнять только посредством специальных методов, которые называются свойствами.
Программирование, управляемое событиями
Раньше программе соответствовал некоторый жесткий алгоритм, единственным образом определявший последовательность выполнения операторов. Ветвление программ было прозрачным для программиста — в программе жестко задавались условия переходов в ту или иную точку.
Программирование, управляемое событиями, является развитием ООП и сегодня воспринимается в едином контексте с моделью ООП. Однако этот механизм был включен в программирование только в начале девяностых годов двадцатого века, уже после основного внедрения ООП.
В программировании, управляемом событиями, приложение — это не последовательность каких-то операторов, не некий жесткий алгоритм. Здесь программа выступает как совокупность объектов и способов их взаимодействия. При этом в роли главного объекта во многих случаях можно считать самого пользователя программы. Он же является и основным, но не единственным источником событий, которые управляют работой приложения.
Программные объекты как бы существуют в некоторой среде взаимодействия друг с другом. Основой этой среды являются сообщения, которые генерируются в результате наступления каких-то событий. События могут порождаться действиями пользователя (например, при работе с мышкой или клавиатурой), но могут наступать и в результате других причин (внешних). Например, отключение питания, получение письма по электронной почте или локальной сети, Также события могут являться результатом работы самой программы, результатом работы ее объектов, сбой дисковода и т.д. Например, программа моделирует процесс движения нескольких тел, и в случае «столкновения» каких-либо из них генерируется событие с посылкой соответствующего сообщения. В каждом объекте программист определяет множество событий, на которые объект должен реагировать. При получении соответствующего сообщения, объект реагирует на него «автоматически», запуская на выполнение соответствующий метод. В этом контексте объект можно определить как совокупность свойств и методов, а также событий, на которые он должен реагировать и сообщений, которые он может генерировать.
Теперь код программы состоит из отдельных, непосредственно не связанных друг с другом фрагментов. Последовательность их выполнения определяется не явно (т.е., не операторами перехода внутри программы), но соответствующей настройкой программной среды. Например, если отключить реакцию кнопки ДА в какой-то форме на щелчок мышки, то при выполнении программы эта кнопка станет недоступной. Однако программный текст до и после отключения реакции кнопки останется неизменным.
Визуальное программирование интерфейса
Надо заметить, что ранее в большинстве программ интерфейс с пользователем отсутствовал. Пользователь должен был составить текстовый файл исходных данных, используя инструкцию к программе, а далее программа обрабатывала эти данные без вмешательства пользователя. При изменении данных требовалось составить новый или откорректировать имеющийся файл данных. Однако сегодня невозможно представить себе ни одной серьезной программы, у которой отсутствует интерактивный интерфейс с пользователем. Качественная разработка подобного интерфейса позволила «оживить» программу, предоставив пользователю удобные функции управления процессом ее выполнения.
Однако разработка удобного интерфейса с пользователем — т.е. системы окон, кнопок, меню, горячих клавиш и т.д. — являлась одной из наиболее трудоемких задач при программировании. Программирование «вручную» интерфейса и сервиса занимало до 90% объема текста программы. Т.е., объем смысловой части программы, объем того, ради чего она и разрабатывалась, становился гораздо меньшим, чем объем вспомогательной, сервисной части. Соответственно и дорогостоящие ресурсы труда программистов использовались в основном для выполнения достаточно рутинной работы.
Одним из подходов снижения трудоемкости при разработке стандартных интерфейсов был связан со стандартизацией и развитием специальных функций API (Application Program Interface — стандартные библиотеки процедур и функций, входящие в состав операционной системы, которые программист может использовать в своем приложении).
Вторым, революционным шагом, явилось появление визуального программирования, появившегося в Visual Basic и значительно развитого в системах Delphi и C++ Builder. Этот шаг позволил серьезно развить так называемую CASE - технологию (Computer Aided Software Engineering - автоматизированное проектирование программного обеспечения).
Визуальное программирование позволило свести проектирование пользовательского интерфейса к серии простых и наглядных операций, позволяющих программисту оформить внешний вид своей программы практически так же просто, как выполнить его прорисовку в несложных графических редакторах. При этом программист видит оформление своей программы еще на стадии разработки, до ее запуска на выполнение.
Более того, именно в этой среде программист проводит настройку реакций визуальных объектов (кнопок, переключателей и т.д.) на различные события. То есть проектирование сводится к размещению компонентов на форме, заданию некоторых их свойств (например: цвет, подпись) и написанию обработчиков необходимых событий.
Благодаря визуальному объектно-ориентированному программированию, управляемому событиями, создана RAD — технология (Rapid Application Development - быстрая разработка приложений). Благодаря этой технологии, программисты имеют гораздо больший резерв времени для программирования сути задачи, для оптимизации своего приложения, для вариантной разработки программных проектов.
Взаимодействие программ в информационных системах
Сказанное выше относилось к технологиям разработки отдельных программ. Но в настоящее время программы, как правило, должны являться частью некоторой информационной системы (ИС), т.е. функционировать не сами по себе, а во взаимодействие с большим количеством других программ. Также программы должны уметь «использовать» другие программы и системы, разработанные сторонними организациями. Например, ваша программа может подготовить некоторый отчетный документ в формате Microsoft Word, и этот документ будет доступен на всех компьютерах, на которых установлен Word (но на которых может не быть вашей программы). Аналогично, можно из прикладной программы создать итоговые чертежи в формате распространенных графических систем (например, в формате AutoCAD или Corel Draw). В этом случае один из основных вопросов — организация взаимного общения программ друг с другом и с источником данных. В качестве последнего в ИС выступают базы данных (БД), вместе с системой управления базами данных (СУБД). Программы, работающие в составе ИС, получают информацию из БД, к которым имеют доступ и другие программы. В этом случае естественным образом создается возможность взаимосвязи приложений через данные. Например, одна программа записывает результаты своей работы, а другая использует их как начальные данные для своей работы. Этот простейший уровень взаимосвязи требует одного — унификацию данных и форматов их хранения. Для целей унифицированного доступа к данным используются специальные языки, например SQL (Structured Query Language — язык структурированных запросов).
Но во многих случаях этого простейшего механизма общения недостаточно для современной ИС — например, программа не должна ожидать, когда кем-то будет запущена другая программа — поставщик данных. Необходимо иметь возможность запускать из одной программы другую, передавая при этом ей управляющую информацию. Запуск основного приложения порождает в среде операционной системы процесс, для которого операционная система выделяет необходимые ресурсы компьютера (память и время процессора). Дочерняя программа может выполняться как в адресном пространстве вызвавшей ее программы, так и в собственном адресном пространстве и в другом потоке.
Однако часто требуется обмен информацией между программами, выполняющимися одновременно (параллельно). Желательно, чтобы этот обмен не зависел от языка программирования, на котором написаны разные программы, а в сетевых системах не зависел и от операционных систем, установленных на разных компьютерах. Яркий пример подобной организации взаимосвязи — Интернет, в глобальную сеть соединены компьютеры с различными операционными системами (Windows, Unix, Solaris, сотовые телефоны и др.).
Простейшими средствами параллельного общения вначале были файлы совместного доступа, или разделяемые файлы (файлы, к которым могут иметь одновременный доступ несколько программ), которые появились еще на заре Windows. Также ранним средством является буфер обмена ClipBoard, доступный практически всем приложениям Windows, в котором можно временно хранить для передачи другим программам информацию различного формата — текстовую, графическую и т.п. Несколько позже для межпрограммного взаимодействия использовалась технология DDE — динамический обмен данными. Сегодня актуальность DDE ниже из-за появления новых технологий, а использование БД, буфера обмена и разделяемых файлов как простейшего варианта межпрограммного взаимодействия остается актуальным.
Позднее появилась технология связывания и внедрения объектов OLE1 (Object Linking and Embedding). Благодаря OLE1 появилась возможность создавать составные документы (например, в документ Word вставлять таблицу Exel, при ее редактировании из Word используются возможности Exel). На смену ей пришла технология OLE2, позволяющая различным программам предоставлять друг другу свои функции (сервис). Программа, предоставляющая свои функции, называется сервером, а программа, их использующая — клиентом. В этой технологии одна программа может не просто вызвать другую, но использовать ее отдельные функции.
Следующим шагом на пути совершенствования межпрограммного обмена явилась технология компонентной модели объектов (СОМ — Component Object Model). Эта технология заключается в стандартизированном описании служб программы, к которым она дает доступ другим программам. В технологии СОМ неважно, на каких языках написаны программы и где они выполняются: в одном потоке, в разных потоках, на разных компьютерах. Расширение этих возможностей дает технология DCOM — распределенная модификация СОМ. Отметим, что СОМ подразумевает взаимосвязь на уровне специальных объектов, структура которых во многом схожа с рассмотренными ранее объектами внутри одной программы.
Необходимо сказать о еще одной стремительно развивающейся технологии — Интернет. В Интернете располагаются и базы данных, и серверы, с которыми общаются приложения пользователя.
Базы данных и системы управления базами данных
Говоря о развитии технологий программирования, невозможно обойти вниманием тему разработки и управления базами данных. Базами данных (БД) называют электронные хранилища информации, доступ к которым осуществляется с помощью одного или нескольких компьютеров. БД создается для хранения и доступа к данным, содержащим сведения о некоторой предметной области, т.е. некоторой области человеческой деятельности или окружающего нас мира. Системы управления базами данных (СУБД) — набор программных средств, предназначенных для создания, наполнения, обновления, выборки, формирования отчетов и удаления информации в базах данных.
Классификацию современных СУБД можно выполнить по различным признакам.
По назначению различают три основных вида СУБД: промышленные универсального назначения, промышленные специального назначения и разрабатываемые для конкретного заказчика. Специализированные СУБД создаются для управления БД конкретного назначения — бухгалтерские, складские и т.д. Универсальные СУБД не имеют четко обозначенных границ применения, рассчитаны на произвольные задачи. Поэтому они достаточно сложны и требуют от пользователя специальных знаний.
По размещению отдельных частей БД различают локальные и сетевые СУБД.
Все части локальных СУБД размещены на одном компьютере. Если с локальной БД должны работать несколько пользователей одновременно, то на их компьютерах должны храниться точные копии этой БД. Существенной проблемой при этом является синхронизация копий данных. Если один пользователь внес изменения в свою копию БД, то они станут доступными на других компьютерах только после их копирования. Сегодня применение локальных БД ограничено.
Сетевые СУБД делятся на файл-серверные, клиент-серверные и распределенные. Обязательным атрибутом сетевых СУБД является сеть, обеспечивающая аппаратную и программную связь компьютеров и позволяющая корпоративно работать множеству пользователей с одними и теми же данными.
В файл-серверных СУБД данные размещаются на одном достаточно мощном компьютере, постоянно подключенном к сети. Такой компьютер называется файл-сервером. Достоинством такой СУБД является относительная простота ее создания, обслуживания и настройки. Заметим, что между локальной и файл-серверной СУБД практически нет различий, т.к. все фрагменты программного обеспечения СУБД (за исключением данных) находятся на всех компьютерах сети. Отличие между ними состоит в том, что программы обращаются к данным через сеть. Для многих вариантов архитектуры сети на уровне прикладного программного обеспечения это различие «скрыто» от программиста. Из этого вытекает основной недостаток файл-серверных СУБД. Он связан со значительной нагрузкой на сеть, т.к. любое обращение к данным, их корректировка вызывает пересылку значительных объемов информации по сети. Например, если пользователю требуется выбрать несколько фамилий из списка персонала по определенному признаку, то на его компьютер вначале пересылается весь список, и затем поиск производится на пользовательском компьютере. При увеличении числа пользователей СУБД пропускной способности сети становится недостаточно для объемов пересылаемой информации, что приводит к существенному замедлению скорости работы, а иногда и к системным сбоям.
В клиент-серверных БД нагрузка на сеть существенно снижена. Клиентская программа работает с данными через специализированное программное обеспечение (посредника) – сервер базы данных. Сервер размещается на машине с данными. Клиентская программа посылает серверу запрос, сервер принимает его, отыскивает в данных нужные записи и передает их клиенту. Поэтому через сеть передаются только сравнительно короткие запросы и только ограниченное количество найденных записей, а не вся таблица. Запрос к серверу формируется на специализированном языке структурированных запросов — SQL. Поэтому часто серверы БД называют SQL-серверами. Серверные программы являются достаточно сложными, производятся различными фирмами. Наиболее известными являются серверы:
Microsoft SQL Server компании Microsoft,
Sybase SQL Server компании Sybase,
Oracle компании Oracle,
DB2 компании IBM,
InterBase компании Inprise.
Разновидностью клиент-серверных БД являются трехзвенные системы. В них используется промежуточное программное обеспечение между клиентом и сервером, которое называется сервером приложений. Назначение сервера приложений состоит в том, чтобы избавить клиента от многих рутинных аспектов работы с данными, в результате клиентские программы становятся более компактными и содержат в основном код смысловой обработки данных (такие клиентские программы называют тонкие клиенты).
Распределенные БД включают большое количество серверов, а число клиентских мест может достигать сотен тысяч. Обычно такие БД работают в организациях государственного масштаба, данные разделены между серверными компьютерами по территориальному признаку. Информация на отдельных серверах может дублироваться для снижения вероятности отказов и сбоев и максимального обеспечения сохранности наиболее важной информации.
Контрольные вопросы и задачи
6.1. Что Вы знаете об объектно-ориентированном программировании?
6.2. Какие основные принципы ООП?
6.3. Что дает механизм наследования в ООП?
6.4. Что такое полиморфизм в ООП?
6.5. Что такое скрытие данных в ООП?
6.6. Возможности программирования, управляемого событиями?
6.7. Поясните основные возможности визуального программирования.
6.8. Что Вы знаете о принципах взаимодействия программ в информационных системах?
6.9. Что понимается под БД и СУБД? В чем их различие?
6.10. Классификация СУБД по назначению и по размещению.
