01 Введение в программирование.pptx
- Количество слайдов: 54
Программирование на языке высокого уровня
Введение в программирование Лекция 1. Введение в программирование
Введение в программирование Программирование – теоретическая и практическая деятельность по созданию программного обеспечения. Программирование – это процесс описания последовательности действий решения задач средствами конкретного языка программирования и оформление результатов в виде программы.
История программирования В 20 -х годах XIX века Ч. Бэббидж высказал мысль о предварительной записи порядка действий машины для последующей автоматической реализации вычислений. Это привело к созданию автоматических цифровых вычислительных машин. С появлением в 1950 -хх ЭВМ родилась новая область прикладной математики – программирование.
История программирования Ча рльз Бэ ббидж (англ. Charles Babbage; 26 декабря 1791, Лондон, Англия — 18 октября 1871, там же) — английский математик, изобретатель первой вычислительной машины.
История программирования
История программирования Первоначально программы составлялись вручную на машинных языках (в машинных кодах). Процессор компьютера понимает только язык машинных команд (ЯМК) в двоичных кодах. Программист, пишущий на ЯМК, должен помнить все числовые коды машинных команд, самостоятельно распределять память под хранение данных и программы. Программы были громоздки, их отладка – очень трудоемкой. Язык процессоров (машинный код) обычно является низкоуровневым.
Понятие языка программирования (ЯП) Языки программирования – знаковые системы, применяемые для описания процессов решения задачи на ЭВМ. Строго формализованы. Синтаксис – совокупность правил образования правильных (допустимых) конструкций языка. Семантика – система правил однозначного толкования отдельных языковых конструкций, позволяющих воспроизвести процесс обработки данных. Семантика языка программирования задается определением средств описания данных и действий (алгоритм).
Классификация языков программирования 1. низкого уровня • машинные языки – языки кодов ЭВМ; • машинно-ориентированные языки – Ассемблер, мнемокоды; 2. высокого уровня
Классификация языков высокого уровня 1. Императивные (процедурные): описывают процесс вычисления в виде инструкций, изменяющих состояние ЭВМ. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер. (Pascal, Fortran, C и т. д. ).
Классификация языков высокого уровня 2. Декларативные: в которых программистом не задается пошаговый алгоритм решения задачи ("как" решить задачу), а некоторым образом описывается, "что" требуется получить в качестве результата. Типичным примером таких языков являются языки логического программирования (языки, основанные на системе правил) – Prolog.
Классификация языков высокого уровня 3. Функциональные: программа описывает вычисление некоторой функции, значения которой определяются по заданным параметрам; предназначены для решения задач нечисленного характера (LISP – List Processing Language). Свойства: функции — объекты вычисления; чистота (отсутствие побочных эффектов); отложенные (ленивые) вычисления; краткость и простота; строгая типизация; модульность;
Классификация языков высокого уровня 4. Объектно-ориентированные: создаются объекты, каждый из которых отличается своими свойствами и способами взаимодействия с другими объектами. Программист задает совокупность операций, описывая структуру обмена сообщениями между объектами (Small. Talk, Object Pascal, С++, C#, …).
История программирования Появление языков типа Ассемблер привело к тому, что переменные величины стали изображаться символичными именами, коды операций заменены на мнемонические коды. Язык программирования стал более понятен для человека, но удалился от языка машинных команд, понятного процессору. Языки типа Ассемблера являются машинноориентированными языками, т. е. они настроены на структуру машинных команд конкретного процессора.
История программирования Настоящим прорывом в программировании стало создание первого языка программирования высокого уровня, имеющего транслятор: Fortran (FORmula TRANslation)
История программирования Фортран в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM
транслятор — Программа или техническое средство, выполняющее трансляцию программы. Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой. Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.
транслятор Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор. Интерпретатор осуществляющего последовательную обработку и выполнение исходной программы или запроса (в отличие от компилятора, транслирующего всю программу без её выполнения)
транслятор Транслятор, который преобразует программы в машинный язык, принимаемый и исполняемый непосредственно процессором, называется компилятором.
компиляция Процесс компиляции как правило состоит из нескольких этапов: лексического, синтаксического и семантического анализов, генерации промежуточного кода, оптимизации и генерации результирующего машинного кода.
История программирования Во время рождения Fortran сформировался операциональный подход к программированию: все шаги алгоритма имеют адрес (метку), естественный порядок нарушается переходами на команды с определёнными адресами. Переходы бывают условными и безусловными.
История программирования Дано: Найти разницу большего и меньшего 1) Ввести числа а и b 2) Сравнить а и b, если а > b перейти к метки 3, иначе перейти к метке 5 3) d присвоить a-b 4) Перейти к метке 6 5) d присвоить b-а 6) Вывести d 7) Стоп
История программирования Однако использование такого подхода привело к тому, что код больших программ становился практически нечитаемым, а зачастую даже неуправляемым. В 60 -х годах появились новые языки программирования как Algol (1958 – 1960), Pascal (1970, Вирт), С (1972, Ритчи и Керниган) и новый – структурный подход к созданию алгоритмов.
Алгоритм Алгори тм, от имени учёного аль-Хорезми (перс. [ﺧﻮﺍﺭﺯﻣی al-Khwārazmī]) — точный набор инструкций, описывающих порядок действий исполнителя достижения результата решения задачи за конечное время.
Алгоритм Единого «истинного» определения понятия «алгоритм» нет. «Алгоритм — это конечный набор правил, который определяет последовательность операций для решения конкретного множества задач и обладает пятью важными чертами: конечность, определённость, ввод, вывод, эффективность (Д. Э. Кнут)
Алгоритм Единого «истинного» определения понятия «алгоритм» нет. «Алгоритм — строго детерминированная последовательность действий, описывающая процесс преобразования объекта из начального состояния в конечное, записанная с помощью понятных исполнителю команд» . (Н. Д. Угринович, учебник «Информатика и информ. технологии»
Свойства алгоритмов • Дискретность — • алгоритм должен представлять процесс решения задачи как последовательное выполнение некоторых простых шагов. • При этом для выполнения каждого шага алгоритма требуется конечный отрезок времени, то есть преобразование исходных данных в результат осуществляется во времени дискретно.
Свойства алгоритмов • Детерминированность — • В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. • Таким образом, алгоритм выдаёт один и тот же результат (ответ) для одних и тех же исходных данных. • Понятность — • алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, которые входят в его систему команд.
Свойства алгоритмов • Завершаемость (конечность) — • при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. • Массовость (универсальность) — • Алгоритм должен быть применим к разным наборам исходных данных. • Результативность — • завершение алгоритма определёнными результатами.
Алгоритм Единого «истинного» определения понятия «алгоритм» нет. «Алгоритм — строго детерминированная последовательность действий, описывающая процесс преобразования объекта из начального состояния в конечное, записанная с помощью понятных исполнителю команд» . (Н. Д. Угринович, учебник «Информатика и информ. технологии»
Переменные Объекты, которыми оперируют алгоритмы компьютерных программ – называются переменными. Переме нная — атрибут физической или абстрактной системы, который может изменять своё значение. В программировании переменная — это идентификатор, определяющий данные. Переменная – поименованная область памяти для хранения данных.
Переменные характеризуются типом (данных). Тип данных: 1) Определяет внутреннюю структуру и объём занимаемой памяти. 2) Определяет множество (диапазон) возможных значений. 3) Определяет набор и способ реализация допустимых операций.
Структурный подход в программировании Структу рное программи рование — методология разработки программного обеспечения, в основе которой лежит 1) строгая типизация данных и 2) представление программы в виде иерархической структуры блоков 3) использование подпрограмм 4) Проектирование «сверху-вниз» Предложена в 70 -х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.
Структурный подход в программировании Э дсгер Ви бе Де йкстра (нидерл. Edsger Wybe Dijkstra [ˈɛtsxər ˈwibə ˈdɛɪkstra] 11 мая 1930, Роттердам (Нидерланды — 6 августа 2002, Нуенен, Нидерланды) — нидерландский учёный, идеи которого оказали влияние на развитие компьютерной индустрии.
Структурный подход в программировании Никлаус Вирт (нем. Niklaus Wirth, род. 15 февраля 1934) — швейцарский учёный, специалист в области информатики, один из известнейших теоретиков в области разработки языков программирования, профессор компьютерных наук (ETH), Лауреат премии Тьюринга 1984 года
Структурный подход в программировании I. Строгая типизация заключается в том, что: 1) все переменные принадлежат каким-либо типам данных 2) Для изменения типа данных переменной необходимы специальные преобразования/операции.
Структурный подход в программировании II. Иерархическая структура На основе работ Дейкстры итальянские математики К. Бема и Г. Джакопини доказали следующую теорему: всякая программа может быть построена с использованием только трех управляющих конструкций: 1) следования, 2) ветвления и 3) цикла
Структурный подход в программировании 1) Следование (последовательное исполнение) — однократное выполнение операций в том порядке, в котором они записаны в тексте программы. 2) Ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия;
Структурный подход в программировании 3) Цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла). В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается
Структурный подход в программировании Для изображения этих конструкций (следование, ветвление, цикл) вводится понятие структурного (функционального) блока, который характеризуется некоторым действием, одним ходом и одним выходом.
Структурный подход в программировании S Каждый блок может означать как простую команду, так и сложную структуру.
Следование означает, что управление передается от одного блока к следующему S 1 S 2 … S 3
Ветвление – это разделение алгоритма на два пути (две ветви) по некоторому условию с дальнейшим выходом на общее положение. Да условие Да Нет S 1 S 2 Полное ветвление условие Нет S 1 Неполное ветвление
Цикл – повторение некоторой группы действий по условию. S 1 условие Нет Да условие S 1 Да Цикл с постусловием Цикл с предусловием
Сложный алгоритм состоит из множества соединенных между собой базовых структур. Существует два способа соединения структурных элементов алгоритма: последовательный и вложенный.
Да условие S 1 S 2 Да S 3 Нет условие Нет S 4 последовательный
Да условие Да S 1 S 2 Нет условие Нет S 3 вложенный
Структурный подход в программировании III. Подпрограммы Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций).
Структурный подход в программировании III. Подпрограммы в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы.
Структурный подход в программировании Достоинства использования подпрограмм: 1) Эффективное (экономное) расходование оперативной и постоянной памяти. 2) Повышение удобочитаемости и улучшения восприятия текста программ 3) Удобные возможности повторного использования кода.
Структурный подход в программировании Недостатки использования подпрограмм: 1) Увеличение времени работы программ (уменьшение скорости работы) вследствие возникновения “длинных” переходов, возвратов и т. д. 2) Некоторое усложнение отладки
Структурный подход в программировании IV. Проектирование «↑↓» Следующим фундаментальным принципом структурного программирования является метод пошаговой детализации алгоритма.
Технология проектирование программ методом "сверху вниз", или пошаговая детализация 1. Поставленная задача разбивается на две или более подзадач, каждая из которых считается структурным блоком. 2. Данные структурные блоки соединяются между собой. 3. Если подзадача является сложной, для ее реализации она разбивается на ряд подзадач. 4. См п. 1 Процесс продолжается до тех пор пока не будут получены такие блоки, которые достаточно легко реализуются или кодируются на выбранном ЯП
История программирования На смену структурному программированию в начале 1990 -хх пришла технология объектноориентированного программирования (ООП). Объектно-ориентированный подход позволяет создавать программное окружение в виде множества независимых объектов, каждый из которых отличается своими свойствами и способами взаимодействия с другими объектами. Программист задает совокупность операций, описывая структуру обмена сообщениями между объектами. Одним из первых языков ООП был Simula-67. К таким языкам относятся –С++, Object Pascal, C#.