40гг первые цифровые компьютеры программирование путем коммутации проводов
Вид материала | Документы |
- Рабочая программа учебной дисциплины «Системы коммутации» Направление подготовки, 204.68kb.
- Неоднородный полупроводниковый носитель информации в переменном магнитном поле, 107.68kb.
- Темы Лекции Практика, 13.65kb.
- Общие принципы построения вычислительных сетей, 1480.56kb.
- Курс лекций "интернет технологии", 1261.62kb.
- А) Представление информации в цифровых автоматах (ЦА), 34.28kb.
- Информатика. Лекции. Краткая история компьютерной техники Первые компьютеры: Z3, Colossus,, 3630.67kb.
- Курс лекций для студентов очного и заочного отделений по специальности 210406 «Сети, 3045.9kb.
- Радумльская средняя школа, 28.4kb.
- Лекция №7. Обобщенная задача коммутации Важной задачей построения сетей ЭВМ является, 67.2kb.
Надъязыковый подход к изучению языков программирования
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, то язык называется языком с полным смешанным контролем типов.
Классификация ЯП по способу определения семантики языковых конструкций
- Если семантика каждой языковой конструкции (например, операций) определяется по тексту программы, а не во время ее выполнения, т.е. статически, язык называется статически типизированным, в противном случае — динамически типизированным.
- Статически типизированные языки:
- слабо типизированный, если информация о типе используется только для обеспечения корректности программы на машинном уровне;
- сильно типизированный, если осуществляется полный контроль типов (статический, динамический или смешанный);
- защитно типизированный, если программы, содержащие конструкции с возможными типовыми ошибками, считаются недопустимыми, даже если эти ошибки никогда не могут возникнуть.
Проблемы слабо типизированных языков
- Операция, которая может восприниматься машиной как корректная, может быть некорректной на абстрактном уровне программы