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

Стили и методы программирования. Учебное пособие для СПО

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
СРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ
Национальный Открытый Университет
«Интернет-Университет Информационных Технологий»
Н.Н. Непейвода
СТИЛИ И МЕТОДЫ
ПРОГРАММИРОВАНИЯ
Учебное пособие
2-е издание, стереотипное
Саратов • 2024
УДК 004.42 ББК 32.973
Н53
Непейвода, Н.Н.
Н53
Стили и методы программирования : учебное пособие для СПО / Н.Н. Не­пейвода ; Национальный Открытый Университет «ИНТУИТ». — 2-е изд., стер. — Саратов : Профобразование, 2024. — 295 с. — (Среднее профессиональное обра­зование). — Текст : электронный.
ISBN 978-5-4488-1011-4
В учебном пособии систематически излагаются сведения о стилях про­граммирования и их методах, даются ориентиры для понимания сочетаемости и несовместимости разных методов.
Издание будет полезно при изучении дисциплин «Программирование», «Основы программирования» по укрупненной группе специальностей среднего профессионального образования «Информатика и вычислительная техника».
Учебное электронное издание
Подписано к использованию 27.05.2024.
ISBN 978-5-4488-1011-4
УДК 004.42
ББК 32.973
© Непейвода Н.Н., 2005–2016 © ООО «ИНТУИТ.РУ», 2005–2016 © Оформление. ООО «Профобразование», 2024
Содержание

Стили и м етоды програм мированияНепейвода Н.Н.

1. Вводная лекция
2. Модели вычислений
3. Традиционные языки
4. Синтаксис, семантика и прагматика
5. Сентенциальное программирование: Рефал
6. Сентенциальное программирование: PROLOG
7. Общие вопросы сентенциального программирования
8. Функциональное программирование
9. Автоматное программирование: анализ задачи
10. Автоматное программирование: от таблицы к программе
11. Автоматное преобразование структурированных текстов
12. Переход от данных к конечному автомату 200
4 13 32 48 64
84
108
120
143
163
187
13. Событийное программирование
14. Структурное программирование
211
221
15. Проблемы, встающие перед параллельным
246
программированием
16. Программирование от переиспользования
17. Общее понятие о стилях программирования
18. Методы по отношению к стилям
264
278
291
Список литературы 294
3
Вводная лекция
Появление языков программирования. Примеры простейших программ. Возможность понимать программы без изучения языка. Как текст программы превращается в исполняемый код?
Введение
Программирование на языках появилось одновременно с вычислительными машинами. Конрад фон Цузе, построивший первую в мире серию программно-управляемых вычислительных машин (Германия, 1938-1944 г.), создал язык Plankalkul для записи программ. Квалифицированные сотрудники писали программы на этом языке, а техники затем вручную переводили их в машинные коды.
Сейчас наиболее широко используются традиционные языки. В их число входят FORTRAN, Pascal, C/C++, Ada, Java и т. п.
Эта совокупность традиционных языков создает ошибочное впечатление о том, что на всех языках программирование почти одинаково. Развеять его поможет данный курс, который посвящен прежде всего нетрадиционным языкам и нетрадиционным парадигмам в программировании.
Но сначала необходимо привести в порядок уже имеющиеся у Вас знания и навыки программирования.
Назначение данной лекции - ввести обучающегося в зоопарк систем и понятий программирования. Практическая цель обучающегося приобрести умение даже без предварительного изучения языка традиционного типа, видеть в нем общие конструкции и, соответственно, понимать программы, написанные на нем.
Задание 0. Перепишите написанную Вами ранее программу размером от 100 до 200 строк на неизвестный Вам традиционный язык (выбрать первый доступный из списка неизвестных: Ada, Modula-2, Алгол 68, Simula, FORTRAN). При этом запрещается детально изучать язык. Просмотрите описание и примеры, пользуйтесь прежде всего системой помощи транслятора.
Стили и методы программированияНепейвода Н.Н.
4
Сравнение программ на разных языках
Начнем с рассмотрения примера. Всем данным текстам программ при исполнении соответствует действие, состоящее в распечатке строки "Прювет Волку!".
/*Язык C.*/ #include <stdio.h> int main(void)
{printf("Прювет Волку!");
return 0;}
Пример 1.1.
//Java public class HelloWorld {
public static void main (
String[] args) {
System.out.println(
"Прювет Волку!");
}}
Пример 1.2.
(*Паскаль*) program First (Output); begin writeln('Прювет Волку!') end.
Пример 1.3.
comment Algol 68 comment begin println('Прювет Волку!') end коммент Русский Алгол 68 коммент начало печатать('Прювет Волку!') конец
Стили и методы программированияНепейвода Н.Н.
5
comment Еще два представления comment (println('Прювет Волку!')) (печатать('Прювет Волку!'))
Пример 1.4.
Лисп (режим исполнения файла программы): ( Print "Прювет Волку!" )
Пример 1.5.
Лисп (диалоговый режим): [1]> (progn (setq x "Прювет Волку!" ) x)
Пример 1.6.
Рефал $ENTRY GO{=<Prout 'Прювет Волку!'>;}
Пример 1.7.
Prolog :-Print('Прювет Волку!').
Пример 1.8.
Сравним все эти программы. Что в них общего?
1. Все они представлены в виде текстов: последовательностей символов, размещенных на нескольких строчках.
2. В каждом языке имеется понятие строки (последовательности символов нефиксированной длины). Строки оформляются во всех языках примерно одинаково: с использованием кавычек как обрамляющих символов. Правда, вид кавычек меняется от языка к языку.
3. Каждая из этих программ имеет конструкцию, выполнение которой приводит к распечатке строки.
4. Все они при их выполнении делают одно и то же: печатают строку "Прювет Волку!".
В чем же их отличия? В записи, а также в правилах построения. Таким
Стили и методы программированияНепейвода Н.Н.
6
образом, напрашивается вывод, что, освоив один язык программирования, можно понимать тексты программ на большинстве других языков практически так же легко, как образованный русский человек может читать украинский либо польский (это чуть труднее)
текст
1)
.
Казалось бы, что все эти программы, естественно, после преобразования каждого текста в исполняемый код
2)
приводят к одной и той же машинной программе, исполняемой компьютером. Но действительная ситуация немного иная.
Работа программной системы над текстом программ
Теперь разберем по очереди, как подготавливается к исполнению и исполняется каждый текст программ, рассмотренных в предыдущем параграфе.
Пояснение к программе 1.1
.
/* Язык C:*/ #include <stdio.h> int main(void) {printf("Прювет Волку!"); return 0;}
Строка
#include <stdio.h>
отражает то, что написанный текст программы должен быть расширен путем вставки вместо этой строки текста, именуемого stdio.h, и уже такой расширенный текст подается транслятору (одно из правил формирования текстов программ на языке С). Таким образом, stdio.h является библиотекой периода трансляции. Фактически stdio.h содержит все то, что нужно для организации ввода и вывода данных, описывая компоненты библиотеки периода исполнения.
Текст после #include <stdio.h> - это описание функции без параметров, которая возвращает целое (ее заголовок - int main
Стили и методы программированияНепейвода Н.Н.
7
(void) ), и печатает строку:
printf ("Прювет Волку!");.
После обработки этого текста транслятором, в частности, подключается библиотечная функция периода исполнения printf, описание которой взято из stdio.h.
Пояснение к программе 1.2
.
// Java: public class HelloWorld { public static void main ( String[] args) { System.out.println( "Прювет Волку!"); }}
Строка
public class HelloWorld
Текст на языке Java указывает на то, что программа является публичным (доступным всем) классом, который именуется HelloWorld. К этому классу можно будет обращаться для исполнения содержащихся в нем действий. Внутри класса HelloWorld определяется функция static
void main, с которой начинаются вычисления. А внутри нее
происходит обращение к системным средствам вывода строк, содержащимся в классе System.out:
System.out.println("Прювет Волку!");
Это обращение делается из объявляемой функции main.
Пояснение к программе 1.3
.
(* Pascal:*) program First (Output); begin writeln('Прювет Волку!')
Стили и методы программированияНепейвода Н.Н.
8
end. (*PASCAL*) PROGRAM FIRST (OUTPUT); BEGIN WRITELN('Прювет Волку!') END.
Последние два текста на стандартном
3)
языке Pascal, даже с точки зрения синтаксиса,- одна и та же программа. Из этого видно, что в языке не различаются заглавные и строчные буквы. Эта особенность восходит к использованию примитивных печатающих устройств, для которых не было такого различия.
Возможность печатать что-либо для языка Pascal обусловлена указанием
Output в заголовке программы, который подключает
соответствующую библиотеку периода исполнения и инициализирует ее.
Пояснение к программе 1.4
.
Алгол 68: begin println(`Прювет Волку!') end comment Русский Алгол 68 comment начало печатать(`Прювет Волку!') конец comment Еще два представления comment (println(`Прювет Волку!')) (печатать(`Прювет Волку!'))
Алгол 68 демонстрирует четыре текста одной и той же программы. В языке предусмотрены и варианты нотации для национальных алфавитов (сравните первый и второй тексты), и возможности скорописи (сравните первый и третий тексты).
Для этого языка постулируется существование стандартного вступления и заключения, которые окружают написанный текст. Считается, что исходным текстом для трансляции является то, что получится в
Стили и методы программированияНепейвода Н.Н.
9
результате соединения текста вступления, текста, написанного программистом, и текста заключения. Здесь прослеживается аналогия с
#include языка С, но название файла, который должен расширять
написанный текст, явно не задается.
Пояснение к программе 1.5
.
( PRINT "Прювет Волку!")
Программа на языке Lisp представляет собой функцию PRINT с аргументом "Прювет Волку!". Вычисление этой функции - так называемое S-выражение, представляющее аргумент самой функции. В данном случае это "Прювет Волку!". При вычислении PRINT возникает побочный эффект, действие, которое сопровождает получение значения. В данном случае это печать аргумента функции, т. е. требуемое действие. Приведенная программа распечатает строку дважды: первый раз, когда выполняется указанный побочный эффект, второй - из-за следующей причины. Лисп- программа всегда завершает свои вычисления распечаткой значения функции, полученного в качестве результата. S-выражение "Прювет Волку!" и есть тот самый результат.
Пояснение к программе 1.7
.
$ENTRY GO{=<Prout 'Прювет Волку!'>};
Программа на Рефале представляет из себя функцию Go. Эта функция работает с полем зрения, которое уже не может быть прямо представлено как совокупность ячеек вычислителя. Она проверяет, что поле зрения пусто, и подставляет вместо пустого выражения то, что идет справа от знака равенства: вызов стандартной функции, печатающей строку и опять очищающей поле зрения. В поле зрения функций больше не осталось, программа заканчивает работу, а поскольку поле зрения пусто, больше ничего не печатается.
Пояснение к программе 1.8
.
:-Print('Прювет Волку!');
Программа на языке Prolog представляет собой цель, которая должна
Стили и методы программированияНепейвода Н.Н.
10