40гг первые цифровые компьютеры программирование путем коммутации проводов

Вид материалаДокументы

Содержание


Декларативная программа
Императивная программа
Состав языков программирования
Проверяет некоторое условие и в зависимости от истинности или ложности его выполняет те или иные операторы.
Выполняет заданные операторы до тех пор, пока истинно заданное условие, причем условие проверяется перед выполнением операторов.
A: array (1..100) of integer
Переставить(i,j); //2,1,3
Абстрактный тип данных
Запись определения нового типа
Проблемы слабо типизированных языков
С: character
Epsilon —
Буквы, цифры, спец_сиmb)
FIRST — минимальное значение указанного типа имя_типа' LAST
Рабочие дни
Ключевые слова
Список ключевых слов
Примеры констант
Описание функции
Класс памяти
...
Полное содержание
Подобный материал:
  1   2   3   4   5   6   7   8   9   ...   12



Надъязыковый подход к изучению языков программирования

5 причин необходимости изучения концепций языков программирования
  • Больше возможности для выражения идей
  • Более обоснованный выбор подходящего языка
  • Повышение способности к изучению новых языков
  • Углубление понимания важности реализации
  • Повышение способности к разработке новых языков


Области применения программирования
  • Научные приложения
  • Коммерческие приложения
  • Искусственный интеллект
  • Системное программирование
  • Языки подготовки сценариев
  • Специализированные языки программирования


Категории языков программирования
  • Императивные
  • Декларативные
  • Объектно-ориентированные



История развития языков программирования
  • 40гг. – первые цифровые компьютеры – программирование путем коммутации проводов.
  • программирование на машинном языке
  • появление ассемблеров – машинные команды получают мнемонические имена (LOAD, STORE, ADD, …)
  • конец 50х – создание первого компилятора для языка FORTRAN (FORmula TRANslator – транслятор формул)
    • более удобное средство для написания формул, чем ассемблер
    • переносимость кода



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


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



Наклонения предложений в грамматике
  • изъявительное (повествовательные)
  • вопросительное
  • повелительное (императивное)


Исторически первыми сформировались императивные

(директивные, процедурные) языки программирования


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


Предположим, требуется пройти в городе из пункта А в пункт Б.
  • Декларативная программа - это план города, в котором указаны оба пункта, плюс правила уличного движения. Руководствуясь этими правилами и планом города, курьер сам найдет путь от пункта А к пункту Б.
  • Императивная программа - это список команд примерно такого рода: от пункта А по ул. Садовой на север до площади Славы, оттуда по ул. Пушкина два квартала, потом повернуть направо и идти до Театрального переулка, по этому переулку налево по правой стороне до дома 20, который и есть пункт Б.


Характеристики и свойства языков программирования
  • Характеристики
    • Мощность
    • Уровень
    • Концептуальная целостность
      • Экономия понятий
      • Ортогональность понятий
      • Единообразие понятий
  • Универсальные и специализированные языки
  • Свойства
    • Надежность
    • Удобочитаемость
    • Полнота
    • Гибкость
    • Простота
    • Мобильность
    • Эффективность



Характеристики, свойства и требования





Методы реализации
  • Компиляция
  • Интерпретация
  • Смешанные системы реализации


Этапы разработки программ
  • Технический взгляд
    • Определение требований
    • Проектирование
    • Кодирование
    • Тестирование
    • Отладка
    • Документирование
  • Психологические этапы
    • Смятение
    • Понимание сути
    • Понимание способа реализации
    • Реализация основной функции
    • Реализация всех функций
    • Подготовка к отчуждению
    • Подготовка документации



Основные понятия ЯП
  • Базовые определения
  • Объекты данных
  • Типы данных
  • Выражения и операторы
  • Блоки и подпрограммы
  • Абстрактные типы данных
  • Дополнительные возможности



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



Состав языков программирования

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


Семантика ЯП

Семантика ЯП задается определением средств описания данных и действий.


Типы данных
  • Ранние языки
  • Вспомогательный прием для облегчения работы компилятора



  • Современные языки
  • Выражение задачи с большей ясностью
  • Обеспечение высокой надежности


Типичные классы ошибок
  • Объектам данных могут присваиваться логически некорректные значения
  • К объекту данных может быть применена логически некорректная операция



Типы данных
  • Простые
  • Целые
  • Действительные
  • Символьные
  • Логические
  • Структурные
  • Массивы
  • Записи
  • Объединения


Пример описания переменных и записи операция над данными различных типов

I: integer := 1;

С: character := '1';

В: boolean := true;

1+1

1<=2

С > 'А‘

В and false

В or true


Пример использования массива и записи

A: array (1..5) of integer;

R: record

I: integer;

C: character;

B: boolean;

end record;

U: union

integer;

character;

boolean;

end union;

  • A(4) – обращение к 4-му элементу массива А
  • R. В – обращение к переменной B записи R
  • U := ‘A’ присваивание переменной U символьного значения



Массив


Запись




Объединение


Требования к средствам описания действий
  • Должны быть надежны (минимум ошибок при написании программы)
  • Смысл должен быть очевиден и однозначен (чтобы можно было легко понять общую структуру программы)
  • Должны обеспечивать достаточную гибкость (чтобы программист мог выразить свой алгоритм просто и эффективно)


Требования противоречивы – при разработке языков пытаются достичь компромисса

Выражение и присваивание

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



  • Оператор присваивания “:=“ Слева от знака оператора указывается тот объект данных, которому в качестве значения присваивается значение стоящего справа выражения


I,J: integer;

PI: constant real := 3.1415926536;

В: boolean;

A: array (1..5) of real;

R: record

K: integer;

D: character;

end record;


I:=I+J*2;

J:=3*(I-J)+R.K;

B:=B and (A(3)


A(5):=PI**2+A(5);


Операторы управления
  • Оператор «if» - условное выполнение операторов.

Проверяет некоторое условие и в зависимости от истинности или ложности его выполняет те или иные операторы.
  • Оператор «while» - циклическое выполнение операторов.

Выполняет заданные операторы до тех пор, пока истинно заданное условие, причем условие проверяется перед выполнением операторов.

Подсчет суммы положительных элементов массива


A: array (1..100) of integer;

SUM: integer;

I: integer;

SUM:=0;

while I<= 100 do

if A(I)>0 then

SUM:=SUM+A(I);

end if;

J:=I+1;

end do;


Необходимость структурирования программы
  • Выделение логических единиц
  • Освобождение памяти от ненужных переменных
  • Управление областью видимости имен
  • Приближение места описания переменных к месту использования
  • Повторное использование кода

Решение проблем – введение в язык понятий блока и подпрограммы


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


block

TEMP: integer;

use I,J: in out integer;

begin

TEMP:=I;

I:=J;

J:=TEMP;

end block;


Процедуры

  • Процедура – описание действий, которые необходимо выполнить в какой-то момент выполнения программы
  • Для выполнения действий, описанных в процедуре используется вызов процедуры


block

I,J: integer;

procedure ПЕРЕСТАВИТЬ is

TEMP: integer;

begin

TEMP:=I;

I:=J;

J:=TEMP;

end procedure;

begin

I:=l;

J:=2;

ПЕРЕСТАВИТЬ;

ПЕРЕСТАВИТЬ;

end block;


Использование процедур с параметрами

  • Параметры процедуры – специальная конструкция языка, позволяющая указывать переменные, которые должны обрабатываться в функции



block

I,J,K: integer;

procedure ПЕРЕСТАВИТЬ

(М,N: in out integer)is

TEMP: integer;

begin;

TEMP:=M;M=N;N:=TEMP;

end procedure;

begin

I:=1; J:=2; K:=3;

ПЕРЕСТАВИТЬ(I,J); //2,1,3

ПЕРЕСТАВИТЬ(J,К); //2,3,1 ПЕРЕСТАВИТЬ(К,I); //1,3,2

end block;


Функции


Функция — это специальная форма процедуры, предназначенная для вычисления одного значения.


block

I,J,K: integer;

МАХ2: integer;

function MAX

(PAR1,PAR2: in integer)

return(REZ:out,integer) is

begin

if PAR1 > PAR2 then

REZ:=PAR1;

else

REZ:=PAR2;

end if;

end function;

begin



MAX2 := 2*MAX(K,MAX(I,J));



end block;


Пакеты

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

Абстрактные типы данных
  • Абстрактный тип данных представляет собой описание множества значений и набора операций, с помощью которых (и только с их помощью) можно обрабатывать эти значения.



Дополнительные возможности

  • Обработка файлов
  • Обработка исключений
  • Параллельная обработка
  • Макрообработка

.


Типизация языков программирования


Основные вопросы
  • Понятие типа
  • Определение типа
  • Способы контроля типов
  • Виды и уровни типизации
  • Эквивалентность типов
  • Поколения языков программирования


Понятие типа
  • Первоначально:
  • Тип предназначался для выбора компилятором наиболее эффективное представление для объекта.
  • С машинной точки зрения тип объекта — это форма представления его значений в памяти и определяемый этой формой способ доступа.
  • Современные языки:
  • Эффективность реализации как функция механизма типов отодвинута на второй план.
  • Большее значение:
  • возможность выбирать естественные структуры данных
  • делать программу более понятной
  • менее подверженной ошибкам
  • легче проверяемой (в т.ч. компилятором) и исправляемой


Предшествующие определения типа
  • Как множество значений, которые могут принимать объекты данного типа.
  • Недостаточно точно – не дает однозначного пути для построения типов
  • аггау(1. . 10) of integer и
  • array(1. . 11) of integer (различны или нет?)
  • Множество значений и набор операций, выполняемых над этими значениями и обладающих некоторыми свойствами.
  • Не решается проблема однозначности:
  • Различны или нет типы двух списков, если их определения налагают разные ограничения на максимальное число элементов?


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


Запись определения нового типа


type имя_типа is описание_типа;


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


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


Типово-правильная программа
  • Программа называется типово-правильной, если она удовлетворяет правилам типизации языка.
  • Правила типизации
  • приписывание типов переменным и константам,
  • определение типов выражений по типам их частей
  • согласование типов частей языковых конструкций (например, операторов присваивания)

  • Определение типовой правильности программ также производится на этапе компиляции.
  • Обозначим множество программ этого класса через Lt
  • Lt – подмножество Ls.
  • Если Lt не определено – язык не типизированный, иначе – типизированный.


Типовые ошибки
  • Программа называется программой без типовой ошибки, если при ее выполнении не возникает типовой ошибки
  • Обозначим множество программ этого класса через Le.
  • Le входит в Lt
  • Программа называется программой с выловленными типовыми ошибками, если все возникающие при ее выполнении типовые ошибки обнаруживаются при контроле типов.
  • Обозначим множество программ этого класса через Ld.
  • Ld  Lt \ Le



Классификация языков по способу контроля типов
  • Если Lt = Le , т.е. типово-правильные программы не могут содержать типовых ошибок, то язык называется языком с полным статическим контролем типов.
  • Если Ls=Lt, т.е. правила типизации языка очень слабые или их нет совсем (все синтаксически правильные программы являются типово-правильными), и, следовательно, вся работа по контролю типов производится во время выполнения программ, то язык называется языком с динамическим контролем типов.
  • Если при этом Ld = Lt \ Le, т.е. все типовые ошибки обнаруживаются при динамическом контроле типов, то язык называется языком с полным динамическим контролем типов.
  • Если Le  Lt  Ls, т.е. не все синтаксически правильные программы являются типово-правильными и типово-правильные программы могут содержать типовые ошибки, то язык называется языком со смешанным контролем типов.
  • Если при этом Ld = Lt \ Le, то язык называется языком с полным смешанным контролем типов.


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

  • Если семантика каждой языковой конструкции (например, операций) определяется по тексту программы, а не во время ее выполнения, т.е. статически, язык называется статически типизированным, в противном случае — динамически типизированным.
  • Статически типизированные языки:
  • слабо типизированный, если информация о типе используется только для обеспечения корректности программы на машинном уровне;
  • сильно типизированный, если осуществляется полный контроль типов (статический, динамический или смешанный);
  • защитно типизированный, если программы, содержащие конструкции с возможными типовыми ошибками, считаются недопустимыми, даже если эти ошибки никогда не могут возникнуть.


Проблемы слабо типизированных языков
  • Операция, которая может восприниматься машиной как корректная, может быть некорректной на абстрактном уровне программы