Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика_ЗФ / 2013_Информатика УМО_легпром.doc
Скачиваний:
359
Добавлен:
22.03.2016
Размер:
50.51 Mб
Скачать

Более подробных комментариев заслуживает пример 1 из таблицы 21. Оператор присваивания здесь задаёт значения переменных a, b, c, d, e, f.ОператорSubEnd Subзадаёт описание подпрограммы-процедуры с именемq, внедрённой в данный электронный документ и запускаемой нажатием следующей кнопки.

Примечание: предполагается, что параметры безопасностиMicrosoftOfficeWordразрешают запуск макросов (активного содержимого). Более подробные сведения о выполнении программ в средеVBAможно получить, изучая справочную систему, соответствующую учебную литературу [14], а также выполняя задания лабораторного практикума и делая соответствующие выводы [19, 23].

Оператор Const задаёт значение константыpi, а операторDimобъявляет переменные, причём все они относятся к разным типам (см. табл. 17). Именно поэтому присваивание разным переменным значения одного и того же выражения приводит к получению совершенно различных результатов.

В операторе, задающем значение строковой переменной f, использованы предопределённые константыvbCr, обозначающие непечатаемый символ возврата каретки – переход на новую строку. Поэтому на экране значение переменнойfотображается не в одну, а в несколько строк. Символ подчёркивания в этом же выражении играет аналогичную роль в синтаксисе программы, позволяя продолжить запись текущего оператора со следующей строки.

В качестве оператора, отображающего на экране в окне сообщения значение переменной f, выступаетфункция MsgBox.

Достаточно простые примеры 2 и 3 позволяют лучше понять работу оператора присваивания и заодно закрепить понятие переменной. Особенность примера 4 заключается в последнем операторе a=a=a. Здесь второй знак равенства означает не присваивание, а сравнение, результатом которого в данном случае будет логическое значение «Истина», которому соответствует число -1.

В примерах 5 и 6 выполняется обмен значениями двух переменных аиb, причём в примере 5 это делается с помощью третьей переменнойс, а в примере 6*демонстрируется один из способов, не требующих использования дополнительной переменной. Последовательность операторов присваивания в примере 7*эквивалентна вычислению выражения, содержащего несколько операций.

    1. Условный операторIf … then

Далеко не всякий алгоритм можно описать только линейными структурами. Условный оператор позволяет реализовать алгоритмическую структуру «Ветвление», показанную на рисунке 11.1, и выполнить нужный вариант вычислений из двух (или более) предусмотренных в зависимости от выполнения некоторых условий (логических выражений).

Рис. 11.42. Базовая алгоритмическая структура «Ветвление»

Для реализации структуры «Ветвление» (Если – То – Иначе) и её частного случая «обход» (Если – То) в VBA используется так называемый строчныйвид оператораIF … THEN. Его синтаксис имеет следующий вид:

IF условиеTHEN операторы_А[ELSE операторы_В]

В качестве условия (англ. condition) может выступать любое выражение, значение которого расценивается как истина (не ноль) или ложь (ноль). А в качестве операторов А и В – один или несколько, разделённых двоеточиями, операторов. Если опустить часть оператора в квадратных скобках, то будет реализована структура «обход». Приведём пример использования оператораIF … THEN, в котором можно обойтись без комментариев:

IF рейтинг < 60THEN итог = «незачёт»ELSE итог = «зачёт»

Блочныйвид оператораIF … THENпозволяет, кроме того, реализовать более сложное вложенное ветвление. Синтаксис этого оператора имеет следующий вид:

IFусловие_1THEN

[блок_операторов_1]

[ELSEIFусловие_2THEN

[блок_операторов_2]]

[ELSE

[блок_операторов_иначе]]

ENDIF

В отличие от строчной, блочная форма оператора IF … THENдопускает использование нескольких условий, после каждого из которых следует (необязательный) блок операторов, выполняющийся только в случае истинности соответствующего выражения. Следующее условие проверяется только в случае ложности предыдущего. В случае же истинности одного из условий (и последующего выполнения соответствующего блока операторов) никакие дальнейшие условия блочного оператораIF … THENуже не проверяются, а выполнение программы продолжается с оператора, следующего за ключевым словомENDIF.

Исчерпывающее рассмотрение базовой управляющей алгоритмической структуры «Ветвление» даётся в практикуме [20]. Мы же ограничимся приведением ещё одного примера, комментарии к которому могут быть составлены заинтересованным читателем самостоятельно:

IFрейтинг < 55 THEN

итог = «неудовлетворительно»

ELSEIFрейтинг < 70 THEN

итог = «удовлетворительно»

ELSEIFрейтинг < 85 THEN

итог = «хорошо»

ELSE

итог = «отлично»

ENDIF

    1. Оператор выбора варианта*

Разновидность структуры «ветвление» – выбор одного из нескольких блоков – показана на рисунке 11.2. Реализуется эта структура оператором выбора варианта SELECT CASE … END SELECT. Логика работы оператора выбора очень похожа на блочную форму оператора IF … THEN. Также выполняется только один из нескольких блоков операторов (вычислительных процессов). Отличие заключается в том, что все условия выбора связаны с проверкой значения одного общего тест-выражения, а в условиях оператора IF … THENмогут проверяться совершенно независимые значения.

Рис. 11.43.Структура «выбор»

Приведём синтаксис оператора SELECT CASE … END SELECT, который выполняет один из нескольких блоков операторов (на рис. 11.2 – процессов) в зависимости от значениятест-выражения:

SELECT CASEтест_выражение

CASEсписок_выражений_1

[блок_операторов_1]

[CASEсписок_выражений_2

[блок_операторов_2]]

[CASEELSE

[блок_операторов_иначе]]

ENDSELECT

В качестве тест-выражения может выступать любое числовое или даже строковое выражение. А выбор блока операторов осуществляется последовательным сравнением значения тест-выражения со списками выражений, которые могут содержать один или более разделённых запятыми элементов, каждый из которых относится к одному из трёх видов: выражение, определяющее единственное значение; пара выражений, разделённых ключевым словом TОи определяющая ограниченный значениями этой пары диапазон; выражение, начинающееся с ключевого словаISи следующего за ним знака операции отношения (сравнения), также определяющее соответствующий диапазон.

Работу оператора SELECT CASE … END SELECTможно проиллюстрировать на примере следующего фрагмента программы, запускаемой щелчком по кнопкеи выполняющей пересчёт рейтинговой оценки из стобалльной шкалы в четырёхбалльную:

Select Case Rating ' тест-выражение

Case Is < 0, Is> 100 'выбор по списку_выражений

txtОценка.Value = "Вне диапазона"

Case Is >= 85 '"Отлично",еслиRating >= 85

txtОценка.Value = "Отлично"

Case 70To85 '"Хорошо",еслиRating в диапазоне 70 – 85

txtОценка.Value = "Хорошо"

Case Is >= 55 'не хорошо, но вполне удовлетворительно

txtОценка.Value = "Удовлетворительно"

Case Else ' иначе – всё, что осталось…

txtОценка.Value = "Неудовлетворительно"

End Select

Результат выполнения программы при значении тест-выражения равном 77 представлен на рисунке 11.3.

Рис. 11.44. Форма с результатом для примера 2

Забегая немного вперёд и используя терминологию объектно-ориентированного программирования, поясним, что идентификатор txtОценка.Valueв приведённом фрагменте означает содержимое текстового поля (значениесвойстваValueобъектаTextBoxс именемtxtОценка). Текстовые поля и другие объекты-элементы управления (метки –Label, командная кнопка –CommandButton, рисунок –Image) размещены на форме пользователя (объектUserFormс именемПример2_Select)

    1. Операторы цикла

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

На рисунке 11.4 показаны блок-схемы циклических алгоритмических структур с предусловием(Цикл-Пока) ис постусловием(Цикл-До). Напомним, что их различие заключается в том, что действие (процесс) в зависимости от истинности условия в первой схеме может не выполниться ни разу, а во второй – выполняется не менее одного раза.

Рис. 11.45. Циклические алгоритмические структуры

Для реализации цикла с предусловием в VBAможет использоваться операторWHILE … WENDи более универсальный операторDO … LOOP(см.*), с помощью которого можно реализовать также и цикл с постусловием.

Программный код примера 3 на алгоритмическом языке VBA

Private SubcmdStart_Click()

Dim I As Integer

I = 0

txtIn.Value = I

Do While I < 10

I = I + 1

Loop

txtIk.Value = I

End Sub

Результат выполнения программного кода цикла с предусловием с использованием универсального оператора цикла DO … LOOPпредставлен на рисунке 11.5. Фрагмент программного кода данного примера отображается на форме внутри элемента управления типаLabel(метка).

Рис. 11.46. Форма для примера 3 (Цикл-Пока)

Для реализации так называемого цикла со счётчиком (с параметром) используется оператор FOR … NEXT(см.). Блок-схема соответствующей алгоритмической структуры показана на рисунке 11.6. По сути, это частный случай цикла с предусловием. При этом действие, изменяющее значение счётчика с заданным шагом, вынесено из тела цикла непосредственно в заголовок (символ подготовки).

Рис. 11.47. Цикл с параметром

Фрагмент программного кода для примера 4 на языке VBA

Dim strY As String * 15

Dim strX As String * 7

Dim I As Integer

Rad = Atn(1) * 4/180 'коэффициент для перевода градусной меры угла в радианы

I = 0

For x = -180 To 180 Step 10

I = I + 1

strI = I

strX = x

ModX = Abs(x)

If ModX>89 And ModX<91 Or ModX>269 _

And ModX<271 Then

strY = "-Нет решения"

Else

Y = b ^ sin(a ^ 2) / cos(x * Rad) - d

strY = Y

End If

lbxТабуляция.AddItem strI + "| " + _

strX + "| " + strY

Next x

Результаты выполнения программного кода цикла с параметром с использованием оператора цикла FOR … NEXTпредставлены на рисунке 11.7.

Рис. 11.48. Форма (Пример 4) с результатом работы цикла с параметром

Кроме того *, вVBAимеется очень похожий на цикл со счётчиком операторFor Each  Next, который повторяет тело цикла длякаждого элементамассива или коллекции объектов. При работе с коллекциями (наборами однотипных объектов) количество элементов может быть неизвестно, а концепция начального и конечного значений – не иметь смысла. В таких случаях использование циклаFor Each  Nextявляется наиболее предпочтительным.

    1. Оператор циклаFor … next

Оператор цикла FOR … NEXTиспользуется, когда число повторений заранее известно, и определяется оно значениями счётчика (параметра) цикла: начальным, конечным и шагом (приращением). Оператор имеет следующий синтаксис:

FORпеременная_цикла=началоTOконец[STEPприращение]

[блок_операторов]

[EXIT FOR]

NEXT[переменная_цикла[,переменная_цикла]...]

Здесь переменная_цикла– числовая переменная, используемая как счетчик или параметр цикла;началоиконец– выражения, задающие начальное и границу конечного значения переменной цикла;приращение– значение, прибавляемое к переменной цикла при каждом следующем шаге цикла. Если необязательная часть оператора (STEPприращение) не указывается, то приращение принимается равным единице.Количество повторенийтела циклаFOR … NEXTопределяется целым (без округления!) числом, определяемым формулой (конец – начало) / приращение+ 1.

Тело цикла может содержать любую последовательность вложенных алгоритмических структур, имеющих один вход и один выход, в том числе и вложенные циклы. Синтаксис оператора предусматривает также досрочныйвыход из цикла (EXIT FOR)*.

Несколько вложенных циклов могут закрываться одним ключевым словом NEXTи указанием имён счётчиков всех требующих закрытия циклов в порядке, обратном их открытию.

Рассмотрим работу оператора FOR … NEXTна примере следующего фрагмента программы:

For I = Старт To Стоп

lsbРезультат.AddItem I

Next I

Щелчок по кнопке позволяет вызвать форму (рис. 5), на которой можно указать начальное (Старт) и конечное (Стоп) значения счётчика и увидеть соответствующий результат выполнения программы.

Программный код примера 5 на алгоритмическом языке VBA

Private SubcmbStart_Click()

Dim I As Integer

Dim Старт As Integer

Dim Стоп As Integer

Старт = txtIstart.Value

Стоп = txtIstop.Value

For I = Старт To Стоп

lsbРезультат.AddItem I

NextI

lblВывод.Caption="*Значение счётчика по завершении цикла ="& I

End Sub

Так, при Старт=1иСтоп=5тело цикла выполнится пять раз, при этом переменная I(счётчик) будет изменять своё значение от одного до пяти включительно с шагом, равным единице (посколькуSTEPне указан). Тело цикла состоит всего из одной строки, предписывающей объектуlsbРезультат(элемент управления, отображающий список) выполнить методAddItem(добавить элемент в список), причём в качестве добавляемой строки выступаеттекущеезначение счётчикаI, которое на каждом шаге меняется. В результате можно получить вид, представленный на рисунке 11.8.

Рис. 11.49. Форма (Пример 5) с результатом работы цикла.

Для более глубокого понимания работы оператора FOR … NEXTрекомендуется повторить выполнение предложенного примера с другими значениямиСтартиСтоп. Ещё лучше выполнить предложенную программу впошаговомрежиме (запуск из меню редактораVBA:DebugStep Into), в котором очередной выполняемый оператор подсвечивается, ожидая команды продолжения (нажатияF8), а зависание указателя мыши на имени переменной позволяет отобразить её текущее значение.

Оператор FOR … NEXTчасто используется при обработке массивов. Например, для одномерного массива можно организовать цикл, используяСчётчик, изменяющийся от значения нижней границы индекса массиваСтартдо верхнейСтоп. Такой цикл выполнится столько же раз, сколько в массиве имеется элементов. Если в теле цикла при обращении к элементу массива использовать в качестве указателя индекса идентификаторСчётчик, то таким образом можно осуществлять поэлементный перебор всего массива [21, 22].

    1. Математические функции

Набор математических функций для языка VBAдостаточно стандартный (по сравнению, например, с Паскалем). Основные из них представлены в Таблице 22, где вместо указанного в скобках параметра (аргумента)хможет выступать числовое выражение. Для тригонометрических функций угол выражается в радианах.

Таблица 22

Краткие сведения о математических функциях в vba и Паскале

Математическое обозначение функции, название (и пояснение)

Идентификатор функции

VBA

Паскаль

– Абсолютная величина (модуль) 

abs(x)

– Корень квадратный из х

sqr(x)

sqrt(x)

– Экспонента х (число е≈2.72 - основание натурального логарифма)

exp(x)

– Натуральный логарифм х

log(x)

ln(x)

– Логарифм х по основанию а

log(x)/log(a)

ln(x)/ln(a)

– Синус х

sin(x)

– Косинус х

cos(x)

– Тангенс х

tan(x)

– Арктангенс х

atn(x)

arctan(x)

Случайное число в диапазоне от 0 до 1

rnd

rаndom

Округление аргумента до целого значения

round(x)

Целая часть х (т.е. максимальное целое число, не превосходящее х)

int(x)

- Знак числа x ( -1, при х<0; 0, при x=0; 1, если x>0) 

sgn(x)

    1. Функции обработки строк*

Помимо математических, в VBA имеется множество встроенных функций, работающих со строковыми типами данных. Такие функции часто используются при автоматизированном создании и преобразовании документов, обработке текстовых файлов. Синтаксис некоторых строковых функций VBA, их описание и примеры использования представлены в таблице 23.

Дополнительных пояснений требуют две последние функции таблицы 9, использующие параметр способ. Если этот необязательный аргумент* равен 0 или опущен, то выполняется двоичное сравнение. А если равен 1 – посимвольное сравнение без учета регистра. Если хоть одна из строк имеет значениеNull(пустое значение, которое не следует путать с пустой строкой), то результат вызова функции также равенNull.

Таблица 23

Краткие сведения о строковых функциях

Синтаксис функции

Описание функции

Пример

Вызов функции

Результат

1

2

3

4

LСase(стро­ка)

Возвращает строку, преобразуя её к нижнему регистру

LСase("xYz")

"xyz"

UСase(стро­ка)

Возвращает строку, преобразуя её к верхнему регистру

UСase("xYz")

"XYZ"

Trim(стро­ка)

Возвращает строку, удаляя из неё пробелы справа и слева (в начале и конце строки)

Trim(" xy z ")

"xy z"

LTrim(стро­ка)

Возвращает строку, удаляя из неё начальные пробелы

LTrim(" xz ")

"xz "

RTrim(стро­ка)

Возвращает строку, удаляя из неё конечные пробелы

RTrim(" xz ")

" xz"

Left(стро­ка, количество)

Возвращает левую часть строки из указанного количества символов

Left("123",2)

"12"

Right(стро­ка, количество)

Возвращает правую часть строки из указанного количества символов

Right("123",2)

"23"

Mid(строка, позиция[, коли­чество])

Возвращает среднюю часть строки, начиная с заданной позиции, из указанного количества символов (если параметр опущен, то – до конца)

Mid("123",2,1)

Mid("123",2)

"2"

"23"

Space(количество)

Создает строку, содержащую равное аргументу количество пробелов

Space(1)

" "

String(коли­чество, символ)

Создает строку, содержащую заданное количество повторяющихся символов (этот аргумент представляется как числовым кодом символа, так и строковым выражением, первый символ которого используется для создания результирующей строки)

String(3, 120)

String(3, "хyz")

"ххх"

"ххх"

StrComp(строка1, строка2[, способ])

Возвращает результат сравнения строки1 со строкой2 заданным способом. Если строка2 меньше чем строка1, то возвращается 1; наоборот – -1; при равенстве – 0;

StrComp("xYz", "хyz")

StrComp("xYz", "хyz", 1)

-1

0

InStr([пози­ция, ]стро­ка1, стро­ка2[, способ])

Поиск строки2 (подстроки), внутри строки1, начиная со стартовой позиции (если не указано, то с начала) строки1, заданным способом.

InStr ("xYz", "хyz")

InStr (1, "xYz", "хyz", 1)

0

1

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

    1. Функции преобразования данных

Среди встроенных функций VBA следует выделить такие, которые работают с различными типами данных и выполняют соответствующие преобразования строковых и числовых значений. В таблице 24 представлен синтаксис таких функций, их описание и примеры использования.

Таблица 24

Краткие сведения о функциях преобразования данных

Синтаксис функции

Описание функции

Пример

Вызов функции

Результат

Val(строка)

Возвращает число, содержащееся от начала строки до первого символа, не распознаваемого в качестве числа. Игнорируются символы пробела, табуляции и перевода строк

Val(" 1 2.3")

Val(" 1 2,3")

Val("1" & chr(10) & "2")

12.3

12

12

Str(число)

Возвращает строковое представление числа с учётом знака

Str(1+3)

Str(1-3)

" 4"

"-2"

Len(выра­жение)

Возвращает размер памяти в байтах, занимаемый числовым типом данных, или длину строки-аргумента

Len(a%)

Len("123")

2

3

Chr(код) *

Возвращает строку, состоящую из символа, соответствующего коду ANSI.

Chr(62)

Chr(65)

Chr(225)

">"

"A"

"б"

Asc(строка) *

Возвращает число, представляющее ASCII или ANSI код первого символа строки

Asc(">")

Asc(Chr(65))

Asc("бр-р…")

62

65

225

Format(вы­ра­жение[, фор­мат]) *

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

Format(4)

Len(Format(4))

Format(12.3, "##0.00")

Format(0.05, "0.0%")

Format("xYz", ">")

"4"

1

"12.30"

"5.0%"

"XYZ"

    1. Вопросы и тестовые задания для самоконтроля

  1. Даны выражения, записанные на алгоритмическом языке VBA. Запишите эти выражения в виде математических формул:sin(x)^2+cos(x)^2; a^2*i+exp(c*d); (b+sin(x))/(c+d); sin(x)^2+cos(x^2); a^(2*i)+exp(c)*d; b+sin(x)/c+d.

  2. Укажите приоритет выполнения операций и определите значения логического выражения при X=0 и Y=1.5, а также при X=2.5 Y=0.5.

X+Y<4 AND X^2 + Y^2>=4

  1. Укажите приоритет выполнения операций и определите значения логического выражения при X=0.5 и Y=0.5, а также при X=1.5 и Y=0.5.

ABS(X) + ABS(Y)<=1

  1. Укажите приоритет выполнения операций и определите значения логического выражения при X=0.5 и Y=0.5, а также при X=1.5 и Y=1.5.

(ABS(X)>=1 OR ABS(Y)>=1) AND X^2+Y^2<9

  1. Дан фрагмент программы:

If x<1 Then

y=x+1

Elseif x<2 Then

y=x+3

Elseif x<4 Then

y=x^2

Else

y=x-2

End If

z=2*y

MsgBox "X=" & x & " Y=" & y & " " & "Z=" & z

Укажите результат работы этого фрагмента в каждом из следующих случаев: x=0.5; x=1.5; x=3; x=5.

  1. Дан фрагмент программы:

x = val(InputBox("Введите координату x”))

y = val(InputBox("Введите координату y"))

sR = "точка (" & x & " , " & y & ") находится"

If x+y<2 and x>0 and y>0 Then

MsgBox sR & "в треугольнике"

Elseif (x+1)^2+(y+1)^2<1 Then

MsgBox sR & "внутри круга"

Else

MsgBox sR & "вне областей"

End If

Укажите результат работы этого фрагмента для каждого из случаев: x=0.5 и y=0.8; x=2.5 и y=1.5; х=-0.7 и y=1; x=-0.7 и y=1.

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

  2. Можно ли выйти из цикла FOR … NEXT до его завершения и если можно, то как?

  3. Укажите назначение оператора WHILE … WEND?

  4. Укажите, какой результат будет выведен на экран (в файл) при выполнении следующего фрагмента программы:

For t=1 To 7

Print t; t+2;

Next t

  1. Укажите, какой результат будет выведен на экран (в файл) при выполнении следующего фрагмента программы:

For f=0 To 9 Step 3

Print 2*f; f*f;

Next f

  1. Определите, сколько раз будет выполнено тело цикла в приведенном фрагменте программы:

For i = 2 To n Step 1

s = s + i

Next i

при n, равном: а) 2; б) 0; в) 4; г) 5.

  1. Определите значение переменной aпосле выполнения каждого из фрагментов программы:

    1) a = 0

    For i =1 To 7

    a = a + i

    Next i

    2) a = 1: n = 7

    For i = n To 2 Step –1

    a=a+i

    Nexti

    3) a = 0

    For i = 2 To 7

    a = a + i

    Next i

  2. Определите значение переменной спосле выполнения каждого из фрагментов программы:

    1) c=0

    For i=1 To 4

    c=c+(i+2)

    Next i

    2) c=1

    For i=1 To 4 Step 2

    c=c*(i+1)

    Next i

    3) c=0

    For i=2 To 5 Step 2

    c=c+i^2

    Next i

  3. * Укажите, какое значение примет строковая переменная N$ в результате работы фрагмента программы:

W$="Я ХОРОШО УМЕЮ РАБОТАТЬ НА IBM PC"

N$=MID$(W$,3,7)+MID$(W$,15)

  1. Я УМЕЮ

  2. РАБОТАТЬ УМЕЮ

  3. ХОРОШО РАБОТАТЬ

  4. РАБОТАТЬ ХОРОШО

  5. ХОРОШО РАБОТАТЬ НА IBM PC

  6. Я УМЕЮ РАБОТАТЬ НА IBM PC

вернуться к содержанию

  1. Технологии программирования

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

    1. Концепция программирования

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

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

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

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

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

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

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

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

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

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

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

Таблица 25

Характеристика трудоёмкости разработки программ

Объём проекта, строк исходного кода

Тип программы

Время создания

Вероятность успешного завершения

Количество программистов

100

Утилиты для временных нужд

1 день

100%

1

1000

Небольшие приложения и дополнения, вносимые в готовые системы

до 1 месяца

100%

1

10 000

Типичная средняя программа, разрабатываемая на заказ

до 6 месяцев

85%

1 (предел возможностей среднего программиста)

100 000

Большинство современных коммерческих автономных и небольших клиент-серверных приложений

1 год

85% для групп, 35% для одиночки

10

1 млн.

Крупные системы автоматизации

1,5-5 лет

50% для группы, 0% для одиночки

100

10 млн.

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

5-8 лет

35%

до тысячи

    1. Структурное и модульное программирование

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

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

Однако с ростом сложности задач программы становятся все более объёмными и менее читаемыми. Поэтому программирование и отладка больших программ, написанных исключительно на основе методологии императивного программирования, может затянуться на долгие годы.

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

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

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

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

Данные передаются подпрограмме в виде параметров или аргументов. Параметры, которые указываются в тексте заголовка, называются формальными. Они нужны только для формальногоописаниятела подпрограммы. При выполнении программы, в момент вызова подпрограммы, подставляются конкретные значения (или ссылки на значения – переменные) –фактическиепараметры (см., в котором происходит слияние двух строк "qwe" и "asd"). Приведём код подпрограмм (модуль «Пример6_ПроцедураФункция»), вызов которых используется в этом примере:

Sub proc1()

Dim s$

'Вызов процедуры AcB с параметрами s, "qwe", "asd"

Call AсB(s, "qwe", "asd")

MsgBox s

End Sub

'Объявление процедуры AсB с параметрами c$, a$, b$

Sub AсB(c$, a$, b$)

c = a + b

End Sub

'Объявление функции AiB с параметрами a$, b$

Function AiB(a$, b$) As String

AiB = a + b

End Function

Sub proc2()

Dim s$

'Вызов функции AiB с параметрами "qwe", "asd"

s = AiB("qwe", "asd")

MsgBox s

End Sub

При выполнении первой подпрограммы (proc1) в этом примере происходит вызов процедуры (AcB). При выполнении второй подпрограммы (proc2) происходит вызов функции (AiB).На рисунке 12.1 представлено окно сообщения с результатом выполнения процедуры слияния двух строк "qwe" и "asd". Точно так же будет выглядеть окно с результатом вызова функции.

Рис. 12.50. Окно сообщения с результатом выполнения примера 6

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

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

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

Если концепция структурного программирования предлагает некоторый универсальный алгоритмический базис, то модульное программирование состоит в разработке под конкретную задачу или круг задач (предметную область) собственного базиса в виде набора модулей, позволяющего наиболее эффективно по целому ряду критериев построить программный комплекс. Модули, входящие в базис, это целые программы (в отличие от «макрооператоров» структурного программирования – подпрограмм), решающие некоторые подзадачи и часто оформляемые в виде отдельных файлов, причём так называемые модули расширения, могут быть написаны на совершенно другом языке.