Слайд 1Программирование на языке высокого уровня
Слайд 2Введение в программирование
Лекция 1. Введение в программирование
Слайд 3Введение в программирование
Программирование – теоретическая и практическая деятельность по созданию
программного обеспечения.
Программирование – это процесс описания последовательности действий решения задач
средствами конкретного языка программирования и оформление результатов в виде программы.
Слайд 4История программирования
В 20-х годах XIX века Ч. Бэббидж высказал мысль
о предварительной записи порядка действий машины для последующей автоматической реализации
вычислений.
Это привело к созданию автоматических цифровых вычислительных машин.
С появлением в 1950-хх ЭВМ родилась новая область прикладной математики – программирование.
Слайд 5История программирования
Ча́рльз Бэ́ббидж
(англ. Charles Babbage; 26 декабря 1791, Лондон,
Англия — 18 октября 1871, там же) — английский математик,
изобретатель первой вычислительной машины.
Слайд 7История программирования
Первоначально программы составлялись вручную на машинных языках (в машинных
кодах).
Процессор компьютера понимает только язык машинных команд (ЯМК) в
двоичных кодах. Программист, пишущий на ЯМК, должен помнить все числовые коды машинных команд, самостоятельно распределять память под хранение данных и программы.
Программы были громоздки, их отладка – очень трудоемкой.
Язык процессоров (машинный код) обычно является низкоуровневым.
Слайд 8Понятие языка программирования (ЯП)
Языки программирования – знаковые системы, применяемые для
описания процессов решения задачи на ЭВМ. Строго формализованы.
Синтаксис – совокупность
правил образования правильных (допустимых) конструкций языка.
Семантика – система правил однозначного толкования отдельных языковых конструкций, позволяющих воспроизвести процесс обработки данных.
Семантика языка программирования задается определением средств описания данных и действий (алгоритм).
Слайд 9Классификация языков программирования
низкого уровня
машинные языки – языки кодов ЭВМ;
машинно-ориентированные
языки – Ассемблер, мнемокоды;
высокого уровня
Слайд 10Классификация языков высокого уровня
Императивные (процедурные):
описывают процесс вычисления в виде
инструкций, изменяющих состояние ЭВМ.
Императивная программа очень похожа на приказы,
выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер.
(Pascal, Fortran, C и т.д.).
Слайд 11Классификация языков высокого уровня
Декларативные:
в которых программистом не задается пошаговый
алгоритм решения задачи ("как" решить задачу),
а некоторым образом описывается,
"что" требуется получить в качестве результата.
Типичным примером таких языков являются языки логического программирования (языки, основанные на системе правил) – Prolog.
Слайд 12Классификация языков высокого уровня
Функциональные: программа описывает вычисление некоторой функции, значения
которой определяются по заданным параметрам; предназначены для решения задач нечисленного
характера (LISP – List Processing Language).
Свойства: функции — объекты вычисления; чистота (отсутствие побочных эффектов); отложенные (ленивые) вычисления; краткость и простота; строгая типизация; модульность;
Слайд 13Классификация языков высокого уровня
Объектно-ориентированные:
создаются объекты, каждый из которых отличается
своими свойствами и способами взаимодействия с другими объектами.
Программист задает
совокупность операций, описывая структуру обмена сообщениями между объектами (SmallTalk, Object Pascal, С++, C#,…).
Слайд 14История программирования
Появление языков типа Ассемблер привело к тому, что переменные
величины стали изображаться символичными именами, коды операций заменены на мнемонические
коды.
Язык программирования стал более понятен для человека, но удалился от языка машинных команд, понятного процессору.
Языки типа Ассемблера являются машинно-ориентированными языками, т.е. они настроены на структуру машинных команд конкретного процессора.
Слайд 15Настоящим прорывом в программировании стало создание первого
языка программирования высокого
уровня,
имеющего транслятор:
Fortran
(FORmula TRANslation)
История программирования
Слайд 16История программирования
Фортран
в период с 1954 по 1957 год группой
программистов
под руководством Джона Бэкуса в корпорации IBM
Слайд 17транслятор
—
Программа или техническое средство, выполняющее трансляцию программы.
Трансляция программы — преобразование
программы,
представленной на одном из языков программирования,
в программу на
другом языке и, в определённом смысле, равносильную первой.
Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом.
Выходной язык называется целевым языком или объектным кодом.
Слайд 18транслятор
Цель трансляции —
преобразовать текст с одного языка на другой,
который понятен адресату текста.
В случае программ-трансляторов, адресатом является техническое
устройство (процессор)
или программа-интерпретатор.
Интерпретатор осуществляющего последовательную обработку и
выполнение исходной программы или запроса
(в отличие от компилятора, транслирующего всю программу без её выполнения)
Слайд 19транслятор
Транслятор, который преобразует программы в машинный язык,
принимаемый и исполняемый непосредственно
процессором,
называется компилятором.
Слайд 20компиляция
Процесс компиляции как правило состоит из нескольких этапов:
лексического,
синтаксического
и
семантического анализов,
генерации промежуточного кода,
оптимизации и генерации результирующего машинного
кода.
Слайд 21История программирования
Во время рождения Fortran сформировался операциональный подход к программированию:
все шаги алгоритма имеют адрес (метку),
естественный порядок нарушается переходами
на команды с определёнными адресами.
Переходы бывают условными и безусловными.
Слайд 22Дано: Найти разницу большего и меньшего
Ввести числа а и b
Сравнить
а и b, если а > b перейти к метки
3, иначе перейти к метке 5
d присвоить a-b
Перейти к метке 6
d присвоить b-а
Вывести d
Стоп
История программирования
Слайд 23История программирования
Однако использование такого подхода привело к тому, что код
больших программ становился практически нечитаемым, а зачастую даже неуправляемым.
В 60-х
годах появились новые языки программирования как Algol (1958 – 1960), Pascal (1970, Вирт), С (1972, Ритчи и Керниган) и новый –
структурный подход к созданию
алгоритмов.
Слайд 24Алгоритм
Алгори́тм,
от имени учёного аль-Хорезми
(перс. خوارزمی [al-Khwārazmī])
— точный
набор инструкций,
описывающих порядок действий исполнителя
для достижения результата решения задачи
за конечное время.
Слайд 25Алгоритм
Единого «истинного» определения понятия «алгоритм» нет.
«Алгоритм — это конечный набор
правил,
который определяет последовательность операций для решения конкретного множества задач
и обладает пятью важными чертами:
конечность, определённость, ввод, вывод, эффективность
(Д. Э. Кнут)
Слайд 26Алгоритм
Единого «истинного» определения понятия «алгоритм» нет.
«Алгоритм — строго детерминированная последовательность
действий, описывающая процесс преобразования объекта из начального состояния в конечное,
записанная с помощью понятных исполнителю команд».
(Н. Д. Угринович, учебник «Информатика и информ. технологии»
Слайд 27Свойства алгоритмов
Дискретность —
алгоритм должен представлять процесс решения задачи как последовательное
выполнение некоторых простых шагов.
При этом для выполнения каждого шага
алгоритма требуется конечный отрезок времени, то есть преобразование исходных данных в результат осуществляется во времени дискретно.
Слайд 28Свойства алгоритмов
Детерминированность —
В каждый момент времени следующий шаг работы
однозначно определяется состоянием системы.
Таким образом, алгоритм выдаёт один и
тот же результат (ответ) для одних и тех же исходных данных.
Понятность —
алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд.
Слайд 29Свойства алгоритмов
Завершаемость (конечность) —
при корректно заданных исходных данных алгоритм должен
завершать работу и выдавать результат за конечное число шагов.
Массовость (универсальность) —
Алгоритм должен быть применим к разным наборам исходных данных.
Результативность —
завершение алгоритма определёнными результатами.
Слайд 30Алгоритм
Единого «истинного» определения понятия «алгоритм» нет.
«Алгоритм — строго детерминированная последовательность
действий, описывающая процесс преобразования объекта из начального состояния в конечное,
записанная с помощью понятных исполнителю команд».
(Н. Д. Угринович, учебник «Информатика и информ. технологии»
Слайд 31Переменные
Объекты, которыми оперируют алгоритмы компьютерных программ – называются переменными.
Переме́нная —
атрибут физической или абстрактной системы, который может изменять своё значение.
В
программировании переменная — это идентификатор, определяющий данные.
Переменная – поименованная область памяти для хранения данных.
Слайд 32Переменные
Переменные характеризуются типом (данных).
Тип данных:
Определяет внутреннюю структуру и объём занимаемой
памяти.
Определяет множество (диапазон) возможных значений.
Определяет набор и способ реализация допустимых
операций.
Слайд 33Структурный подход в программировании
Структу́рное программи́рование —
методология разработки программного обеспечения,
в основе которой лежит
1) строгая типизация данных и
2)
представление программы в виде иерархической структуры блоков
3) использование подпрограмм
4) Проектирование «сверху-вниз»
Предложена в 70-х годах XX века
Э. Дейкстрой,
разработана и дополнена Н. Виртом.
Слайд 34Структурный подход в программировании
Э́дсгер Ви́бе Де́йкстра (нидерл. Edsger Wybe Dijkstra
[ˈɛtsxər ˈwibə ˈdɛɪkstra]
11 мая 1930, Роттердам (Нидерланды — 6
августа 2002, Нуенен, Нидерланды) — нидерландский учёный, идеи которого оказали влияние на развитие компьютерной индустрии.
Слайд 35Структурный подход в программировании
Никлаус Вирт (нем. Niklaus Wirth, род. 15
февраля 1934)
— швейцарский учёный, специалист в области информатики, один
из известнейших теоретиков в области разработки языков программирования, профессор компьютерных наук (ETH), Лауреат премии Тьюринга 1984 года
Слайд 36Структурный подход в программировании
Строгая типизация
заключается в том, что:
все
переменные принадлежат каким-либо типам данных
Для изменения типа данных переменной необходимы
специальные преобразования/операции.
Слайд 37Структурный подход в программировании
Иерархическая структура
На основе работ Дейкстры итальянские математики
К.Бема и Г.Джакопини
доказали следующую теорему:
всякая программа может быть
построена с использованием только трех управляющих конструкций:
следования,
ветвления и
цикла
Слайд 38Структурный подход в программировании
Следование (последовательное исполнение) — однократное выполнение операций
в том порядке, в котором они записаны в тексте программы.
Ветвление —
однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
Слайд 39Структурный подход в программировании
Цикл — многократное исполнение одной и той
же операции до тех пор, пока выполняется некоторое заданное условие
(условие продолжения цикла).
В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается
Слайд 40Структурный подход в программировании
Для изображения этих конструкций (следование, ветвление, цикл)
вводится понятие структурного
(функционального) блока,
который характеризуется некоторым действием,
одним
ходом и одним выходом.
Слайд 41Структурный подход в программировании
Каждый блок может означать как простую команду,
так и сложную структуру.
Слайд 42Следование
Следование означает, что управление передается от одного блока к
следующему
Слайд 43Ветвление – это разделение алгоритма на два пути (две ветви)
по некоторому условию с дальнейшим выходом на общее положение.
Неполное ветвление
Полное
ветвление
Ветвление
Слайд 44Цикл – повторение некоторой группы действий по условию.
Цикл
Слайд 45Сложный алгоритм состоит из множества соединенных между собой базовых структур.
Существует два способа соединения структурных элементов алгоритма:
последовательный и вложенный.
Слайд 48Структурный подход в программировании
Подпрограммы
Повторяющиеся фрагменты программы
(либо не повторяющиеся, но
представляющие собой логически целостные вычислительные блоки)
могут оформляться в виде т.
н. подпрограмм (процедур или функций).
Слайд 49Структурный подход в программировании
Подпрограммы
в тексте основной программы, вместо помещённого в
подпрограмму фрагмента,
вставляется инструкция вызова подпрограммы.
При выполнении такой инструкции выполняется
вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Слайд 50Структурный подход в программировании
Достоинства использования подпрограмм:
Эффективное (экономное) расходование оперативной и
постоянной памяти.
Повышение удобочитаемости и улучшения восприятия текста программ
Удобные возможности повторного
использования кода.
Слайд 51Структурный подход в программировании
Недостатки использования подпрограмм:
Увеличение времени работы программ (уменьшение
скорости работы) вследствие возникновения “длинных” переходов, возвратов и т.д.
Некоторое усложнение
отладки
Слайд 52Структурный подход в программировании
Проектирование «↑↓»
Следующим фундаментальным принципом структурного программирования является
метод
пошаговой детализации алгоритма.
Слайд 53Технология проектирование программ методом "сверху вниз", или пошаговая детализация
Поставленная
задача разбивается на две или более подзадач, каждая из которых
считается структурным блоком.
Данные структурные блоки соединяются между собой.
Если подзадача является сложной, для ее реализации она разбивается на ряд подзадач.
См п. 1
Процесс продолжается до тех пор пока не будут получены такие блоки, которые достаточно легко реализуются или кодируются на выбранном ЯП
Слайд 54История программирования
На смену структурному программированию в начале 1990-хх пришла технология
объектно-ориентированного программирования (ООП).
Объектно-ориентированный подход позволяет создавать программное окружение в виде
множества независимых объектов, каждый из которых отличается своими свойствами и способами взаимодействия с другими объектами. Программист задает совокупность операций, описывая структуру обмена сообщениями между объектами.
Одним из первых языков ООП был Simula-67. К таким языкам относятся –С++, Object Pascal, C#.