Косарев_Экомическая информатика
.pdfПодготовка программных средств |
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).