Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ПАЯ (1-й семестр).doc
Скачиваний:
8
Добавлен:
20.11.2019
Размер:
1.23 Mб
Скачать

Программирование и алгоритмические языки

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

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

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

Моделирование – задача любой науки. Судьба программиста - создание моделей на предельно точном, формальном, но очень бедном на обозначения языке.

Математический язык, используемый для описания реальной области – язык моделирования или язык спецификации.

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

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

Как правильно понимать? – семантика

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

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

Основные понятия процедурного программирования. Области и процедуры

При описании объектов и процессов мы обычно выделяем статику и динамику.

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

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

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

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

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

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

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

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

Пример моделирования

СВЕТОФОР

Состояния:

Наиболее очевидным кажется выделить единственный атрибут – цвет.

«Текущий цвет»

«Предыдущий цвет»

Область значений: {КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ }

Значения будем выделять заглавными буквами, чтобы не путать их с именами.

Множество всех состояний светофора:

S1< ЖЕЛТЫЙ, КРАСНЫЙ >

S2< ЖЕЛТЫЙ, ЗЕЛЕНЫЙ >

S3< КРАСНЫЙ, ЖЕЛТЫЙ >

S4< ЗЕЛЕНЫЙ, ЖЕЛТЫЙ >

Класс процедур преобразований состояний светофора состоит из 4-х функций:

<ГОТОВЬСЯ>

<ОСТАНОВИСЬ>

<ЕЗЖАЙ>

<СТОЙ>

Готовься = {< ЖЕЛТЫЙ, КРАСНЫЙ > → < КРАСНЫЙ, ЖЕЛТЫЙ >}.

Иной вариант – определить единственную функцию, задающую следующее состояние светофора

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