Парадигмы и языки программирования

Содержание

Слайд 2

ПАРАДИГМА Парадигма – это система взглядов на явления окружающего мира и

ПАРАДИГМА

Парадигма – это система взглядов на явления окружающего мира и представлений

о возможных взаимодействиях с ними.
Парадигма в программировании – система идей и понятий, определяющих фундаментальный стиль программирования.
Слайд 3

Основные парадигмы программирования Парадигма (стиль) программирования: отображает определенную модель вычислений, включая

Основные парадигмы программирования

Парадигма (стиль) программирования:
отображает определенную модель вычислений, включая структуры данных

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

Основные парадигмы программирования

Основные парадигмы программирования

Слайд 5

Основные парадигмы программирования 1. Императивное программирование: «Код управляет данными» Программа =

Основные парадигмы программирования

1. Императивное программирование:
«Код управляет данными»
Программа = последовательность действий, связанных

условными и безусловными переходами
массовое использование goto
«спагетти» («кенгуру») - код
Слайд 6

Основные парадигмы программирования Структурное программирование: программа представляется в виде иерархической структуры

Основные парадигмы программирования

Структурное программирование:
программа представляется в виде иерархической структуры блоков
доказано, что

любая программа может быть построена из 3-х видов управляющих структур
каждая логическая законченная группа инструкций должна быть оформлена в виде блоков (begin…end, {…})
управляющие конструкции и блоки могут быть вложенными, в любой из них должен быть один вход и один выход
Слайд 7

Основные парадигмы программирования Процедурное программирование: представляет собой развитие структурного программирования повторяющиеся

Основные парадигмы программирования

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

в виде подпрограмм:
процедуры – не имеют возвращаемого значения, могут изменять параметры;
функции – возвращают единственное значение, могут изменять параметры
Слайд 8

Основные парадигмы программирования Модульное программирование: структуры данных и подпрограммы для работы

Основные парадигмы программирования

Модульное программирование:
структуры данных и подпрограммы для работы с ними

объединяются в модули:
открытая часть модуля (interface) – видна другим модулям;
закрытая часть модуля (implementation) – видна только внутри модуля
Слайд 9

Основные парадигмы программирования 2. Декларативное программирование: «данные управляют программой» Программа заявляет

Основные парадигмы программирования

2. Декларативное программирование:
«данные управляют программой»
Программа заявляет (декларирует), что должно

быть достигнуто в качестве цели
Алгоритм решения не задается, от значения данных, поступающих на вход программы, зависит направление расчетов

SELECT имя_столбца FROM имя_таблицы ORDER BY имя_столбца_сортировки

Слайд 10

Основные парадигмы программирования Функциональное программирование: основано на математическом понятии функции программа

Основные парадигмы программирования

Функциональное программирование:
основано на математическом понятии функции
программа состоит из совокупности

определений функций, которые в свою очередь представляют собой вызовы других функций и предложений, управляющих последовательностью вызовов
Слайд 11

Основные парадигмы программирования Функциональное программирование: каждая функция возвращает некоторое значение в

Основные парадигмы программирования

Функциональное программирование:
каждая функция возвращает некоторое значение в вызвавшую его

функцию, вычисление которой после этого продолжается; этот процесс повторяется до тех пор, пока не будет достигнут результат.
Слайд 12

Основные парадигмы программирования Логическое программирование:

Основные парадигмы программирования

Логическое программирование:

Слайд 13

Основные парадигмы программирования 3. Объектно-ориентированное программирование: Первичными считаются объекты (данные), которые

Основные парадигмы программирования

3. Объектно-ориентированное программирование:
Первичными считаются объекты (данные), которые взаимодействуют друг

с другом посредством механизма передачи сообщений.
Ключевые понятия:
Инкапсуляция
Наследование
Полиморфизм
Слайд 14

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

Основные парадигмы программирования

Инкапсуляция – структуры данных и подпрограммы для работы с

этими данными объединены в «классы»
Наследование – возможность описать новый класс на основе уже описанного «родительского» класса (с различными спецификаторами доступами)
Полиморфизм – определение одноименных методов для различных «родственных» классов и способность во время выполнения выбирать и выполнять тот метод, который соответствует полученному объекту
Слайд 15

Пример классификации языков программирования

Пример классификации языков программирования

Слайд 16

Языки программирования Содержание: Структура языка программирования Составляющие ЯП высокого уровня (алфавит,

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

Содержание:
Структура языка программирования
Составляющие ЯП высокого уровня (алфавит, синтаксис, семантика)
Понятие о

формальных грамматиках и синтаксических диаграммах
Характеристики ЯП и их влияние на критерии оценки программного обеспечения
Развитие языков программирования
Слайд 17

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

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

Слайд 18

Составляющие ЯП Алфавит - основные символы языка, используемые при написании программ,

Составляющие ЯП

Алфавит - основные символы языка, используемые при написании программ, как

правило, включает в себя:
строчные и прописные буквы латинского алфавита
цифры
знаки операций: + - * / = < : @ & |
символы подчеркивания _ и пробела
ограничители и разделители: . , ‘ ( ) { } [ ]
специальные символы: ^ # $ и др.
комбинации специальных символов, которые нельзя разделять пробелами, если они используются как знаки операций: “:=“, “..”, “<>”, “<=”, “>=”, “{ }”
Слайд 19

Составляющие ЯП Лексика: может рассматриваться как составляющая алфавита включает в себя:

Составляющие ЯП

Лексика:
может рассматриваться как составляющая алфавита
включает в себя:
совокупность правил образования цепочек

символов (лексем), образующих идентификаторы (переменные и метки) и числа
операторы
операции
зарезервированные (запрещенные, ключевые) слова ЯП, предназначенные для обозначения операторов, встроенных функций
Слайд 20

Составляющие ЯП Лексика: На этапе компиляции компилятор заменяет распознанные лексические конструкции

Составляющие ЯП

Лексика:
На этапе компиляции компилятор заменяет распознанные лексические конструкции предопределенными внутренними

кодами и в дальнейшем рассматривает их как отдельные внутренние символы (лексемы)
Слайд 21

Составляющие ЯП Синтаксис: Совокупность правил образования языковых конструкций (предложений языка программирования)

Составляющие ЯП

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

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

Составляющие ЯП Синтаксис: Нарушение синтаксиса проверяется компилятором на этапе компиляции программы

Составляющие ЯП

Синтаксис:
Нарушение синтаксиса проверяется компилятором на этапе компиляции программы
Примеры синтаксических ошибок:
неверное

описание названия функции при ее вызове;
неверное количество аргументов;
неверный тип переданных аргументов;
неверный тип возвращаемого значения.
Слайд 23

Составляющие ЯП Семантика: смысловое содержание конструкций, предложений языка; семантический анализ –

Составляющие ЯП

Семантика:
смысловое содержание конструкций, предложений языка;
семантический анализ – проверка смысловой правильности

конструкции;
семантические ошибки возникают при недопустимом использовании операций, массивов, функций, операторов и пр.
Слайд 24

Составляющие ЯП Способы описания синтаксиса ЯП: Для описания синтаксиса используется метаязык

Составляющие ЯП

Способы описания синтаксиса ЯП:
Для описания синтаксиса используется метаязык (надъязык), предназначенный

для описания других языков.
Наиболее распространенные метаязыки:
форма Бэкуса-Наура (язык БНФ) – 60-е года ХХ века, John Backus, Peter Naur);
синтаксические диаграммы (Вирт)
Слайд 25

Основные обозначения и правила БНФ

Основные обозначения и правила БНФ

Слайд 26

Составляющие ЯП Формула Бэкуса-Наура: Примеры описания элементов языка С с помощью БНФ

Составляющие ЯП

Формула Бэкуса-Наура:
Примеры описания элементов языка С с помощью БНФ

Слайд 27

Составляющие ЯП Синтаксические диаграммы (Вирта): Каждое определение представляет собой ориентированный граф

Составляющие ЯП

Синтаксические диаграммы (Вирта):
Каждое определение представляет собой ориентированный граф с одним

входом и одним выходом, в котором:
вершины – это:
или терминальные символы;
или определяемые синтаксические понятия;
или разветвления/соединения на последовательность расположения элементов синтаксической конструкции
Слайд 28

Составляющие ЯП Синтаксические диаграммы: дуги (стрелки) указывают на последовательность расположения элементов синтаксической конструкции

Составляющие ЯП

Синтаксические диаграммы:
дуги (стрелки) указывают на последовательность расположения элементов синтаксической конструкции

Слайд 29

Характеристики и критерии оценки и сравнения языков программирования Некоторые характеристики ЯП:

Характеристики и критерии оценки и сравнения языков программирования

Некоторые характеристики ЯП:
простота;
управляющие структуры;
типы

и структуры данных;
синтаксическая структура;
поддержка абстракции;
выразительность;
проверка типов;
обработки исключительных ситуаций

Критерии оценки программного обеспечения:
читабельность программного кода;
трудоемкость разработки программного кода;
надежность программного обеспечения;
«стоимость» языка программирования

Слайд 30

Характеристики языков программирования Простота: количеством элементарных конструкций, операторов; количество возможных способов

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

Простота:
количеством элементарных конструкций, операторов;
количество возможных способов совершения одного действия;
перегрузка

операторов.

count = count + 1;
count += 1;
count++;
++ count;

Слайд 31

Характеристики языков программирования Управляющие операторы: поддержка оператора безусловного оператора перехода goto;

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

Управляющие операторы:
поддержка оператора безусловного оператора перехода goto;
наличие программных конструкций,

позволяющих легко обойтись без goto
Типы и структуры данных:
поддержка расширенного набора типов данных:
логический тип, символьный тип;
структуры, записи, перечисления, объединения, …
проверка типов при выполнении операций
Слайд 32

Характеристики языков программирования Синтаксическая структура: ограничения на способ записи идентификаторов; специальные

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

Синтаксическая структура:
ограничения на способ записи идентификаторов;
специальные слова и их

использование;
возможность зависимости значения оператора от контекста использования

procedure (…)

begin
while (…) begin
if (…) begin

end
end
end
Pascal

procedure (…)

begin
while (…) begin
if (…) begin

end if
end while
end proc
Ada

Слайд 33

Характеристики языков программирования Поддержка абстракции: абстракция – возможность определить и использовать

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

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

или операции, игнорируя сложные детали реализации;
абстракция процесса (процедура);
абстракция данных (пример: реализация двоичного дерева, хранящего целочисленные значения)

procedure (…)

begin
while (…) begin
if (…) begin

end
end
end
Pascal

procedure (…)

begin
while (…) begin
if (…) begin

end if
end while
end proc
Ada

Слайд 34

Влияние характеристик ЯП на ключевые критерии оценки ПО procedure (…) …

Влияние характеристик ЯП на ключевые критерии оценки ПО

procedure (…)

begin
while (…)

begin
if (…) begin

end
end
end
Pascal

procedure (…)

begin
while (…) begin
if (…) begin

end if
end while
end proc
Ada

Слайд 35

Развитие языков программирования Основные движущие силы эволюции ЯП: создание более совершенных

Развитие языков программирования

Основные движущие силы эволюции ЯП:
создание более совершенных программ;
повышение эффективности

процесса производства ПО;
появление новых, специализированных задач, прикладных областей;
более полное использование новых возможностей ЭВМ;
развитие пользовательских интерфейсов;
широкий спектр аппаратных устройств (кроссплатформенность);
увеличение продолжительности жизненного цикла программы в условиях совершенствования аппаратных платформ и системного ПО (ОС и т.п.)

procedure (…)

begin
while (…) begin
if (…) begin

end
end
end
Pascal

procedure (…)

begin
while (…) begin
if (…) begin

end if
end while
end proc
Ada

Слайд 36

Появление языков программирования Наиболее популярные ЯП высокого уровня: 1951г. – первый

Появление языков программирования

Наиболее популярные ЯП высокого уровня:
1951г. – первый компилятор (Grace

Hopper);
1957г. – процедурный язык Фортран (FORmula TRANslator, John Backus);
1967г. – функциональный язык ЛИСП (John McCarthy);
1970г. – структурный язык Паскаль (Niklaus Wirth);
1974г. – логический язык Пролог (Robert Kowalski, Maarten van Emden, Alain Colmerauer);
1983г. – OO язык C++ (Bjarne Stroustrup)
Слайд 37

Появление языков программирования Современные перспективные ЯП и их общие черты: сочетают

Появление языков программирования

Современные перспективные ЯП и их общие черты:
сочетают особенности различных

парадигм (“мультипарадигменные”);
разработка/поддержка ИТ-гигантов (Apple, Facebook, Google, Microsoft);
JIT-компиляция (Just-In-Time) – промежуточная между компиляцией и интерпретацией