Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Косарев_Экомическая информатика

.pdf
Скачиваний:
167
Добавлен:
03.05.2015
Размер:
9.05 Mб
Скачать

Подготовка программных средств

361

В случае многократного решения задачи, когда быстродей­ ствие работы вычислительной системы имеет существенное значение, целесообразно использовать другой принцип - компи­ ляцию.

При компиляции процессы трансляции и выполнения разделе­ ны во времени: сначала исходная программа полностью перево­ дится на машинный язык (после чего наличие транслятора в опе­ ративной памяти становится ненужным), а затем оттранслирован­ ная программа может многократно исполняться. Следовательно, для одной и той же программы трансляция методом компиляции обеспечивает более высокую производительность вычислитель­ ной системы при сокращении требуемой оперативной памяти.

Большая сложность в разработке компилятора по сравнению

синтерпретатором с того же самого языка объясняется тем, что компиляция программы включает два действия: анализ, т.е. опре­ деление правильности записи исходной программы в соответствии

справилами построения языковых конструкций входного языка,

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

Полученная в результате трансляции методом компиляции программа называется объектным модулем, который представля­ ет собой эквивалентную программу в машинных кодах, но не "при­ вязанную" к конкретным адресам оперативной памяти. Поэтому перед исполнением объектный модуль должен быть обработан специальной программой операционной системы (редактором связей) и преобразован в загрузочный модуль, т.е. программный модуль с относительными адресами.

Загрузочный модуль может иметь простую, оверлейную или динамическую структуру.

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

362

Глава 7

производительности, так как в ходе исполнения требуют мини­ мального вмешательства управляющей программы ОС.

Если программа функционально достаточно сложна или ве­ лика по размерам, то она реализуется в виде модулей (сегментов) оверлейной структуры (структуры "с перекрытием"). Загрузочный модуль оверлейной структуры состоит из оверлейных сегментов и содержит информацию, используемую оверлейным супервизо­ ром для загрузки отдельных сегментов в основную память. При этом разные сегменты такой программы могут повторно использо­ вать одну и ту же область оперативной памяти. Оверлейная орга­ низация модулей менее эффективна с точки зрения времени их исполнения, так как требует большего вмешательства управляю­ щей программы ОС.

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

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

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

Подготовка программных средств

363

Например, хороший компилятор способен распознать небреж­ ность программиста и исключить из цикла «статические» вычис­ ления. Под «статическими» вычислениями понимается выполне­ ние в цикле определенной операции, результат которой не зависит от итераций цикла. Распознав такую конструкцию, ком­ пилятор выводит ее за рамки цикла. Этот тип оптимизации назы­ вается перемещением выражений.

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

В общем случае в зависимости от выигрыша в производитель­ ности и временных затрат все виды оптимизации можно разде­ лить на несколько уровней. Первый и второй уровни оптимиза­ ции, как правило, повышают быстродействие на 10 - 15% при ми­ нимальных затратах. Третий уровень оптимизации позволяет увеличить производительность еще на 5%, однако это обойдется значительно дороже.

Таким образом, выбор типа алгоритмического языка (см. рис. 7.3) зависит от многих факторов: назначения, удобства написа­ ния исходных программ, эффективности получаемых объектных программ и т.п. Для ПК ведущее место в настоящее время зани­ мают языки высокого уровня, например различные версии язы­ ков: Бейсик, Паскаль, Фортран, Кобол, АПЛ, Ада, Си и т.д.

Среди них доминирующая роль отводится процедурно-ориен­ тированным языкам, называемым также универсальными (хотя некоторые из них, например Фортран, Кобол, Бейсик и т.п., и раз­ рабатывались с ориентацией на конкретную сферу применения).

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

Одним из главных направлений совершенствования языков программирования для задач экономического управления было стремление к разработке таких языков, в которых до минимума сводилась (а в идеале вообще отсутствовала) проблема как. Есте­ ственно, что такие языки не могут быть процедурными.

364

Глава 7

Первую попытку создания такого языка предпринял Ломбарди, предложивший и реализовавший в 1963 г. для частного класса задач, связанных с обработкой файлов в сфере управления, язык General business-oriented language baseed on decision expression. В этой же области свои языки предложили фирмы ICL (язык NICOL) и IBM (язык РПГ), в которых многое связанное с процедурой ра­ боты программы носит скорее неявный, чем явный характер. Учи­ тывая, что значительная часть логики программы реализуется автоматически, время создания программ с помощью таких язы­ ков и число отладочных проверок значительно сократились.

Таким образом, наряду с универсальными процедурно-ориен­ тированными языками стали создаваться проблемно-ориентиро­ ванные языки программирования, предназначенные для описания процессов обработки информации в какой-либо узкой (специфи­ ческой) области, в которых решение задачи в большей степени сосредоточивалось на проблеме, что необходимо получить в ре­ зультате, а проблема, как это необходимо сделать, в большей или меньшей степени снималась с программиста. Среди этих языков наиболее известными являются: РПГ - язык для генерации отче­ тов, Лисп - язык для обработки списков, GPSS - язык для моде­ лирования, АПЛ - язык для статистической обработки массивов.

Актуальности решения проблемы разработки языков програм­ мирования, базирующихся на принципах что без как, способство­ вал международный конгресс IFIP (International Federation of Information Processing - Международная федерация по обработке информации), прошедший в Стокгольме в 1976 г. под лозунгом

"В 1980 г. программирование без программистов ". В рамках реали­ зации этой идеи были созданы непроцедурные языки, приближа­ ющиеся по своему синтаксису к естественному языку и ориенти­ рованные на пользователей - специалистов управления, не явля­ ющихся программистами.

Наиболее известными из языков этого типа являются:

Smalltalking - малый разговорный;

QBE (Query By Example-программирование на примере);

Форт, который находит применение при решении сложных задач имитационного моделирования, в системах искусственного интеллекта в графических системах и т.п.

Основной особенностью языка Форт является его открытость, которая позволяет на основе имеющихся определений строить новые функции. При этом программист может вводить новые операции, типы данных или определения. Возможность поддерж-

Подготовка программных средств

365

ки средствами Форт многозадачного режима работы придают ему свойства операционной системы.

Особое место среди языков программирования занимают функциональные языки, в частности Пролог (PROLOG - PROgram-ming in LOGic - логическое программирование), пред­ ложенный А.Калмероэ в 1978 г., являющийся языком логическо­ го программирования, относящимся к языкам пятого поколения. Главное назначение языка - разработка интеллектуальных про­ грамм и систем. Пролог - это язык программирования, создан­ ный специально для работы с базами знаний, основанными на фактах и правилах (одного из элементов систем искусственного интеллекта). В языке реализован механизм возврата для выпол­ нения обратной цепочки рассуждений, при котором предполага­ ется, что некоторые выводы или заключения истинны, а затем эти предположения проверяются в базе знаний, содержащей факты и правила логического вывода. Если предположение не подтверж­ дается, выполняется возврат и выдвигается новое предположение.

Языковые средства СУБД предназначены в первую очередь для разработки прикладных программ решения задач экономи­ ческого управления, информация для которых хранится и поддер­ живается с помощью баз данных. Синтаксис языка программиро­ вания в среде СУБД мало чем отличается от синтаксиса высоко­ уровневых языков программирования, в связи с чем указанные программно-инструментальные средства ориентированы в основ­ ном на профессиональных программистов, хотя наличие раз­ витых средств подсказки и помощи (в виде примеров, демонст­ рирующих использование отдельных языковых конструкций) значительно облегчает работу достаточно широкого круга пользо­ вателей.

Sequel (Structured English QUEry Language) и его усовершен­ ствованный вариант SQL - языки манипулирования данными, основанные на исчислении отношений. Используются в реляци­ онных СУБД в качестве языка запросов к базам данных и языка программирования задач обработки данных.

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

366 Глава 7

логия языка Java (а точнее ее часть - байт-код). Именно его раз­ работка и использование составляют принципиальное отличие, которое выделяет язык Java среди других языков программиро­ вания высокого уровня. Объектно-ориентированный язык Java (разработанный на базе языка Си++) предназначен для создания надежных, переносимых, распределенных сетевых программных приложений, работающих в различных многооконных системах в условиях архитектуры клиент-сервер, а также для админист­ раторов сети, использующих Java-приложения для улучшения интерактивных качеств Web-серверов.

Другим объектно-ориентированным языком программирова­ ния является язык Delphi. Созданный на базе языка Паскаль спе­ циалистами фирмы Borland язык Delphi, обладая мощностью и гибкостью языков Си и Си++, превосходит их по удобству и про­ стоте интерфейса при разработке приложений, обеспечивающих взаимодействие с базами данных и поддержку различного рода работ в рамках корпоративных сетей и сети Интернет.

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

Пользовател ь ЭТ получил удобное инструментальное сред­ ство, позволяющее: вводить исходные данные, необходимые для решения задач; указывать формулы получения результатных дан­ ных; оформлять решение задачи в виде привычных для него таб­ личных документов. При этом способ описания расчетных фор­ мул почти ничем не отличается от принятых правил их представ­ ления в математике (за исключением требования линейной структуры записи). Порядок реализации арифметических действий в формулах совпадает с принятым приоритетом выполнения опе­ раций в математике, а для изменения такого порядка использует­ ся система круглых скобок.

Единственным наследием, доставшимся пользователям ЭТ от программирования на высокоуровневых языках, осталось прави-

Подготовка программных средств

367

ло построения логических выражений, реализуемое по стандарт­ ной для языков программирования схеме построения условных операторов: IF - THEN - ELSE (если условие соблюдается, то

выполняется действие-1, иначе осуществляется действие-2).

Быстрому и широкому распространению ЭТ как инструмен­ тальному средству решения экономических задач, помимо про­ стоты и удобства подготовки решения с их помощью задач, спо­ собствовали также:

наличие большого числа встроенных функций (математичес­ ких, статистических, финансовых и т.п.);

возможность "проигрывания" различных вариантов реше­ ния задач и выбора лучшего из них (за счет быстрого автомати­ ческого пересчета конечных результатов при любом изменении исходных данных);

поддержка ЭТ средствами графической интерпретации, на­ глядное представление результатной информации.

Кроме того, работа с современными электронными таблица­ ми может быть автоматизирована благодаря использованию ко­ мандных языков, макросов и т.п.

Вопросы для самоконтроля

1.В чем состоит специфика технологии создания прикладных про­ граммных средств?

2.В чем заключаются особенности способов описания алгоритмов?

3.Чем различаются тестирование и отладка программных средств?

4.Что понимается под жизненным циклом программной продукции?

5.Каково содержание метода нисходящего проектирования про­ граммных продуктов?

6.Какими свойствами должны обладать программные модули?

7.В чем преимущества использования программно-инструменталь­ ных средств при разработке программ?

8.Что понимается под CASE-технологией?

9.Что характерно для машинно-независимых языков?

10.Каково назначение проблемно-ориентированных языков програм­ мирования?

11.В чем заключаются отличительные особенности трансляторов интерпретирующего и компилирующего типов?

12.Расскажите о структуре загрузочного модуля.

ПРОГРАММИРОВАНИЕ

8.1. ОСНОВНЫЕ СВЕДЕНИЯ О СИСТЕМЕ VBA

Visual Basic for Application (VBA) - подмножество Visual Basic (VB) - включает почти все средства создания приложений VB, его структуры данных и управляющие структуры, возможность со­ здания пользовательских типов данных. VBA, как и VB, является системой визуального программирования, управляемого собы­ тиями: в нем есть возможность создания форм со стандартным набором элементов управления и написания процедур, обраба­ тывающих события, которые возникают при тех или иных дей­ ствиях системы и конечного пользователя. Кроме того, он по­ зволяет применять элементы ActiveX и автоматизации. В общем, это полноценная система программирования, хотя и не облада­ ющая всеми возможностями последней версии VB. VBA - под­ множество Visual Basic, позволяющее работать с огромным на­ бором объектов; по существу, в VBA определены все объекты приложений Office 97.

Отметим одну, может быть главную, особенность программи­ рования в среде VBA: в ней нельзя создавать проект независимо от этих приложений. Приступая к очередному сеансу работы, про­ граммист открывает одно из приложений Office 97, и в этот мо­ мент в VBA автоматически становится доступным объект Application, определяющий это приложение, а также все встроен­ ные в него объекты. Можно определить и создать объект Application для любого приложения Office 97, получив тем самым доступ ко всем его объектам.

Итак, VBA отличается от Visual Basic и прочих языков про­ граммирования тем, что он предоставляет возможность непосред­ ственной работы с объектами Office 97. Это позволяет эффектив­ но применять его для автоматизации деятельности, связанной с

Программирование

369

обработкой различных типов документов. Обычные средства VBA, унаследованные от Visual Basic, важная, но не определяю­ щая часть языка.

Поскольку VBA является визуальной системой, программист (пользователь) может создавать видимую часть приложения, ко­ торая является основой интерфейса «программа - пользователь». С его помощью осуществляется взаимодействие пользователя с программой. Программный интерфейс разрабатывается на прин­ ципах объектно-ориентированного подхода, реализованного в VBA применительно к приложениям, выполняемым под управ­ лением Windows.

Для таких приложений характерно существование на экране в любой момент множества объектов: окон, кнопок, меню, тек­ стовых и диалоговых окон, линеек прокрутки и т.п. Пользова­ тель имеет определенную (в зависимости от алгоритма програм­ мы) свободу выбора относительно использования этих объектов: он может сделать щелчок по кнопке, перетащить объект, ввести данные в окно и т.п. В большинстве случаев не предполагается заранее установленная последовательность действий. Как прави­ ло, программист, создавая программу, не должен ограничивать действия пользователя. Он должен разрабатывать программу, ко­ торая правильно реагирует на любое действие пользователя, даже неправильное.

Для каждого объекта определен ряд возможных событий. Одни из них возникают от действий пользователя: щелчок или двойной щелчок мыши, перетаскивание объекта, нажатие клави­ ши клавиатуры, ввод текста в окно и т.п. Некоторые события происходят в результате свершения других событий: например, окно открывается или закрывается, элемент управления стано­ вится активным (доступным) или теряет активность.

Каждое событие проявляется в определенных действиях (от­ кликах, реакции, поведении) программы. Эти действия можно разделить на две группы.

Действия первой группы являются следствием свойств объек­ та. Эти свойства устанавливаются из некоторого стандартного перечня свойств, заданного системой программирования VBA и самой системой Windows. Примером таких действий является свертывание окна после щелчка по кнопке Свернуть. Изменить поведение объекта в подобных ситуациях программист не может.

370

Глава 8

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

Вторая группа действий (отклика) на события полностью оп­ ределяется программистом. Это обеспечивается созданием про­ цедуры VBA для каждого возможного события. Первоначально «тело» такой процедуры пустое, и, следовательно, когда проис­ ходит событие, оно не обрабатывается. Теоретически можно со­ здать процедуру для любого события, но на практике програм­ мист заполняет кодом процедуры только для тех событий, кото­ рые в данной программе представляют интерес.

8.2. ИНСТРУМЕНТАЛЬНАЯ СРЕДА VBA

8.2.1. АКТИВИЗАЦИЯ РЕДАКТОРА VBA

Редактор VBA активизируется из приложения MS Office од­ ним из следующих способов:

командой меню Сервис/Макрос/Редактор Visual Basic;

комбинацией клавиш [Alt]+[F11];

щелчком по кнопке панели инструментов Редактор Visual

Basic.

Вернуться из редактора VBA в приложение можно, нажав ком­ бинацию клавиш [Alt]+[F11] или выполнив команду меню Вид приложения, из которого он был активизирован.

8.2.2. ИНТЕРФЕЙС РЕДАКТОРА VBA

Интерфейс редактора VBA включает следующие компонен­ ты: окно проекта, окно редактирования кода, окно редактирова­ ния форм, панели инструментов и окно свойств.

Окно проекта. Окно проекта активизируется выполнением команды меню Вид/Окно проекта. В окне проекта отображается иерархическая структура файлов форм и модулей текущего про­ екта (рис. 8.1).