ЛЕКЦИЯ 1
Литература
Задание для повторения
Компьютер и его программное обеспечение
Принципиальная схема компьютера (потоки управления)
АЛУ
Принципиальная схема компьютера (потоки данных)
Представление информации в компьютере
Уровни памяти
Адресация оперативной памяти
Предмет программирования
Исполняемая программа
Непосредственная запись машинных команд
Написание программы на Ассемблере
Написание программы на языке высокого уровня
Интерпретация и компиляция
Преимущества и недостатки каждого вида трансляторов
Классификация программных кодов
Схема создания исполняемого кода
Исправление ошибок в процессе реализации программы
Жизненный цикл программного обеспечения
Основные этапы жизненного цикла ПО
Основные этапы жизненного цикла ПО (продолжение)
Каскадная модель жизненного цикла
Каскадная модель жизненного цикла (продолжение)
Спиральная модель жизненного цикла ПО
Определение алгоритма
Свойства алгоритма
Свойства алгоритма (продолжение)
Свойства алгоритма (окончание)
Способы записи алгоритма
Элементы блок-схем
Основные (базовые) структуры блок-схем
Следование
Ветвление
Цикл с предусловием (Цикл-ПОКА)
Цикл с постусловием (Цикл-ДО)
Нахождение минимума из 3 чисел (вариант 1)
Нахождение минимума из 3 чисел (вариант 2)
Алгоритм Евклида нахождения НОД
Алгоритм Евклида измененный
Найти сумму N первых натуральных чисел
Технологии программирования
Функциональное программирование
Логическое программирование
Объектно-ориентированное программирование
Визуальное программирование
Структурное программирование
Структурное кодирование
Структурное кодирование (продолжение)
Цели структурного программирования
Правила структурного программирования
Правила структурного программирования (продолжение)
Достоинства структурного программирования
Вопросы:
Способы описания языков программирования
Форма Бэкуса-Наура
Форма Бэкуса-Наура (продолжение)
Пример использования БНФ
Синтаксические диаграммы Вирта
Пример синтаксической диаграммы
Язык С
Язык С
Язык С++
Достоинства С++
Достоинства С++
1.51M
Category: programmingprogramming

Лекция_01 Введение в предмет

1.

Предмет “Основы и методологии
программирования”
1 и 2 семестры
1 семестр – дифференциальный зачёт
2 семестр – экзамен
Сатолина Анна Викторовна
1

2. ЛЕКЦИЯ 1

6 сентября 2024 года
2

3. Литература

1. https://en.cppreference.com/w/
2. Страуструп. Программирование. Принципы и
практика с использованием C++
3. Стивен Прата. Язык программирования C++.
Лекции и упражнения
4. Роберт Лафоре. Объектно-ориентированное
программирование в С++
5. Мейерс Скотт. Эффективный и современный
С++: 42 рекомендации по использованию
C++11 и C++14
3

4. Задание для повторения

Вопросы:
ПЭВМ и его основные блоки.
Общие принципы организации и работы компьютеров.
Программное обеспечение (ПО).
Основные этапы разработки ПО.
Определение и свойства алгоритма.
Способы записи алгоритмов.
Знать определение понятий:
алгоритм;
программа;
тип данных;
переменная;
константа;
операция;
выражение;
проверка условия;
цикл.
© 2023 Конах В.В
4

5. Компьютер и его программное обеспечение

КОМПЬЮТЕР (англ. computer, от
лат. computo — считаю) - машина для
приема, переработки, хранения и выдачи
информации в электронном виде, которая
может воспринимать и выполнять сложные
последовательности вычислительных
операций по заданной последовательности
инструкций — программе
© 2023 Конах В.В
5

6. Принципиальная схема компьютера (потоки управления)

Устройство
управления
АЛУ
Оперативная
ПАМЯТЬ
Устройства
ВВОДА
Программа
Устройства
ВЫВОДА
Данные
Внешняя (энергонезависимая)
ПАМЯТЬ
6

7. АЛУ

Арифме́тико-логи́ческое
устро́йство ( англ. arithmetic logic unit,
ALU) — блок процессора, который под
управлением устройства управления служит
для выполнения арифметических и
логических преобразований
7

8. Принципиальная схема компьютера (потоки данных)

Устройство
управления
АЛУ
Оперативная
ПАМЯТЬ
Устройства
ВВОДА
Программа
Устройства
ВЫВОДА
Данные
Входные
данные
Внешняя (энергонезависимая)
ПАМЯТЬ
Выходные
данные
8

9. Представление информации в компьютере

Информация в компьютере хранится в виде
последовательности символов двоичного
алфавита – 0 или 1, каждый из которых
представляется одним из двух устойчивых
состояний некоторого физического объекта.
Совокупность таких физических объектов
составляет память компьютера.
9

10. Уровни памяти

Адресация оперативной памяти
Оперативная память состоит из ячеек одинакового размера.
Каждая ячейка имеет свой уникальный номер (адрес).
Адресация ячеек начинается с 0 и является непрерывной.
Наиболее часто встречающийся размер ячейки – 8 бит
(двоичных цифр). Такая ячейка называется байтом.
Байт является основной единицей измерения памяти (как
оперативной, так и внешней). Производные единицы
измерения:
килобайт (1024 байта)
мегабайт (1024 килобайта)
гигабайт (1024 мегабайта)
терабайт (1024 гигабайта)

Байт – наименьшая адресуемая единица информации.
Бит – наименьшая единица информации.
11

11. Адресация оперативной памяти

Предмет программирования
ПРОГРАММА - описание действий, которые
должен выполнить компьютер,
автоматически переводимое на язык
машинных команд этого компьютера.
Процесс разработки программ для решения
определенных задач называют
ПРОГРАММИРОВАНИЕМ.
Группы программ, работающих как единое
целое, составляют ПРОГРАММНОЕ
ОБЕСПЕЧЕНИЕ (ПО) компьютера.
12

12. Предмет программирования

Исполняемая программа
Выполняемая программа хранится в памяти
компьютера в виде машинных команд,
закодированных в виде последовательности нулей
и единиц. Каждая машинная команда занимает
целое количество байт (не менее одного байта).
Как получить программу в виде машинных команд?



Непосредственно записать эти команды
Написать программу на Ассемблере
Написать программу на языке высокого уровня
13

13. Исполняемая программа

Непосредственная запись машинных
команд
сохранение программы в виде последовательности
кодов команд в файле на диске;
загрузка программы в оперативную память;
запуск программы (указание устройству управления
адреса первой исполняемой команды)
Недостатки такого подхода:
Необходимо помнить коды всех машинных команд
(несколько сотен);
Программа велика, так как машинная команда
выполняет небольшой объём работы;
Непереносимость программы на компьютеры с другой
архитектурой
14

14. Непосредственная запись машинных команд

Написание программы на Ассемблере
Для каждой машинной команды разрабатывается
команда Ассемблера, мнемоника которой более
понятна человеку. Команда Ассемблера может
соответствовать нескольким машинным командам.
Программа на Ассемблере должна быть
предварительно преобразована в машинный код с
помощью специальной программы – транслятора.
В оперативную память загружается результат
работы транслятора – исполняемый код.
15

15. Написание программы на Ассемблере

Написание программы на языке
высокого уровня
Программа представляет собой набор операторов
(инструкций), структура которых напоминает
естественные языки. Язык, как правило, не привязан к
конкретной архитектуре (набору машинных команд).
Текст программы гораздо более короткий по сравнению с
программой на Ассемблере.
Программа на языке высокого уровня должна быть
предварительно преобразована в машинный код с
помощью специальной программы – транслятора.
Транслятор ориентирован на конкретную архитектуру
компьютера.
В оперативную память загружается результат работы
транслятора – исполняемый код.
16

16. Написание программы на языке высокого уровня

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

17. Интерпретация и компиляция

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

18. Преимущества и недостатки каждого вида трансляторов

Классификация программных кодов
Исходный текст (исходный код) – программа на языке
высокого уровня или Ассемблере. Хранится, как
правило, в виде текстового файла.
Объектный код – результат компиляции исходного
текста одного программного модуля. Объектный код
представляет собой последовательность машинных
команд и ссылок на другие объектные модули.
Объектный код не может быть непосредственно
выполнен.
Исполняемый код получается из объектных кодов в
результате разрешения ссылок (компоновки, линковки).
Частный случай разрешения ссылок – подключение
стандартных библиотек.
19

19. Классификация программных кодов

Схема создания исполняемого кода
Исходный текст
программы создается текстовым
редактором и записывается на диске
Препроцессор преобразовывает
исходный текст
Компилятор создает
объектный код
Текстовый
редактор
Препроцессор
Компилятор
и сохраняет его на диске
Компоновщик связывает
объектный код с библиотеками,
создает исполняемый файл
и сохраняет его на диске
Загрузчик размещает
исполняемый файл
в оперативной памяти
Центральный процессор
выбирает каждую инструкцию
и выполняет ее
Диск
Компоновщик
Загрузчик
Оперативная
память
ЦПУ

20

20. Схема создания исполняемого кода

Исправление ошибок в процессе
реализации программы
Исходный код
Исправление
синтаксических
ошибок
Компиляция
Исправление
семантических
ошибок
Компоновка (линковка)
Исправление
семантических
ошибок
Верификация,
тестирование, отладка,
эксплуатация
21

21. Исправление ошибок в процессе реализации программы

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

22. Жизненный цикл программного обеспечения

Основные этапы жизненного цикла ПО
Формирование требований – процесс сбора
требований к системе, их систематизации,
документирования, анализа, выявления противоречий и
неполноты, разрешения конфликтов.
Разработка проекта - деятельность по созданию
проекта, то есть воспроизводимой модели программного
обеспечения.
Реализация - этап жизненного цикла программного
обеспечения, объединяющий последовательные фазы
создания программы в виде исходного кода, объектного
кода и исполнимого кода. Результатом реализации
является программа, которая может быть исполнена на
компьютере.
23

23. Основные этапы жизненного цикла ПО

(продолжение)
Устранение ошибок - процесс устранения причин
того, что программное обеспечение не работает, либо
результат его работы не соответствует выработанным
требованиям.
Эксплуатация – деятельность по использованию
программного обеспечения для решения практических
задач.
Сопровождение - модификация программного
обеспечения с целью устранения ошибок, реализации
потребностей заказчика в улучшении тех или иных
характеристик, а также его адаптации к использованию в
модифицированном окружении.
Более подробно см. _Лекция_01_Этапы разработки ПО.
24

24. Основные этапы жизненного цикла ПО (продолжение)

Каскадная модель жизненного цикла
Каскадная модель жизненного цикла ("модель
водопада") предусматривает последовательное выполнение всех
этапов проекта в строго фиксированном порядке. Переход на
следующий этап означает полное завершение работ на
предыдущем этапе. Эта модель была распространена в 70-80х
годах ХХ века.
Формирование
требований
Разработка проекта
Реализация
Устранение ошибок
Эксплуатация и
сопровождение
© 2023 Конах В.В
25

25. Каскадная модель жизненного цикла

(продолжение)
На практике этапы каскадной модели реализуются итерационно, с
циклами обратной связи между этапами.
Формирование
требований
Разработка проекта
Реализация
Устранение ошибок
Эксплуатация и
сопровождение
© 2023 Конах В.В
26

26. Каскадная модель жизненного цикла (продолжение)

Спиральная модель жизненного цикла
ПО
Эта модель предусматривает спиралеобразное
совершенствование системы путем последовательного создания
прототипов (новых версий) этой системы. На каждом витке
спирали при создании очередной версии продукта, уточняются
требования проекта и планируются работы этого витка.
Формирование
требований
Версия 1
Устранение
ошибок
Версия 2
Ввод в
действие
прототипов
(версий)
системы
Реализация
Разработка
проекта
27

27. Спиральная модель жизненного цикла ПО

Определение алгоритма
Алгоритм – строгая и четкая конечная
система
правил,
которая
определяет
последовательность действий над некоторыми
объектами и после конечного числа шагов
приводит к достижению поставленной цели.
28

28. Определение алгоритма

Свойства алгоритма
понятность (доступность) - все действия, описанные в
алгоритме должны быть понятны исполнителю, то есть
должны принадлежать системе действий данного
исполнителя;
определенность (детерминированность) – каждое
действие должно быть четко и однозначно определено".
Точное предписание", то есть, предписание, задающее
алгоритм, должно выполняться однозначно и
последовательно для получения конкретного и
однозначного результата;
конечность – выполнение алгоритма должно
завершиться за конечное число шагов;
29

29. Свойства алгоритма

(продолжение)
результативность (сходимость) – достижение после
конечного числа шагов искомого результата;
дискретность (дискретная структура) – исполнение
алгоритма должно состоять из отдельных шагов;
Алгоритм представляет собой упорядоченное
конечное множество шагов для получения
результата. А всякое множество обладает свойством
дискретности, то есть в любом алгоритме для
каждого шага (кроме последнего), можно указать
следующий за ним шаг;
30

30. Свойства алгоритма (продолжение)

Свойства алгоритма (окончание)
массовость – состоит в том, что алгоритм служит не для
решения какой-то одной задачи, а для целого класса
однотипных задач. Алгоритм - это единый метод,
позволяющий по любому исходному объекту из
определенного бесконечного множества исходных
объектов получить искомый результат;
конструктивность объектов – исходные объекты,
промежуточные и конечные результаты - это
конструктивные объекты, которые могут быть построены
целиком или допускают кодирование в каких-то
алфавитах.
31

31. Свойства алгоритма (окончание)

Не все математические объекты
конструктивны.
Например, иррациональные числа,
выражающиеся бесконечными
десятичными непериодическими
дробями, не являются конструктивными
объектами, так как иррациональное
число не удается ни построить целиком,
ни закодировать в каком-то алфавите.
32

32.

Способы записи алгоритма
словесное описание на естественном
языке;
математическая запись;
графическая запись в виде блок-схем,
структурограмм и графов;
запись на искусственном
алгоритмическом языке (псевдокоде);
запись на одном из языков
программирования.
33

33. Способы записи алгоритма

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

34.

Блок-схема –
графическое представление
последовательности шагов
алгоритма.
35

35.

Элементы блок-схем
36

36. Элементы блок-схем

37

37.

38

38.

39

39.

40

40.

41

41.

Основные (базовые)
структуры блок-схем
1.
Следование
2.
Ветвление (развилка)
3.
Повторение (цикл)
42

42. Основные (базовые) структуры блок-схем

Следование
43

43. Следование

Ветвление
44

44. Ветвление

Цикл с предусловием
(Цикл-ПОКА)
45

45. Цикл с предусловием (Цикл-ПОКА)

Цикл с постусловием
(Цикл-ДО)
46

46. Цикл с постусловием (Цикл-ДО)

Нахождение минимума из 3 чисел
(вариант 1)
47

47. Нахождение минимума из 3 чисел (вариант 1)

Нахождение минимума из 3 чисел
(вариант 2)
48

48. Нахождение минимума из 3 чисел (вариант 2)

Алгоритм Евклида нахождения НОД
1.
Рассмотреть А как первое число, В – как второе.
2.
Сравнить первое и второе числа. Если они
равны, то перейти к п.5, если нет – к п.3.
3.
Если первое число меньше второго, то
переставить их. Перейти к п.4.
4.
Вычесть из первого числа второе и
рассмотреть полученную разность, как первое
число. Перейти к п.2.
5.
Рассмотреть первое число как результат.
СТОП.
49

49. Алгоритм Евклида нахождения НОД

Алгоритм Евклида измененный
50

50. Алгоритм Евклида измененный

Program NOD;
var a, b, m, n : word;
begin
read(a, b);
m := a; n := b;
while ( a <> b ) do
begin
if a > b then
a := a - b
else
b := b - a;
end;
writeln('NOD(', m, ',', n, ') = ', a);
end.
51

51.

#include <iostream>
using namespace std;
int main()
{
int long a, b, m, n;
cout << “enter 2 numbers\n";
cin >> a;
cin >> b;
m = a;
n = b;
while ( a != b )
if (a > b)
a = a - b;
else
b = b - a;
cout << "NOD(" << m << "," << n << ")=" << a <<"\n";
return 0;
}
52

52.

Найти сумму N первых натуральных чисел
53

53. Найти сумму N первых натуральных чисел

Технологии программирования
Технология программирования —это совокупность
знаний и способов, использование которых приведёт к
созданию нужной программы - от идеи до результата.
Основные технологии проектирования программ:
• Императивное программирование
• Декларативное программирование
• Структурное программирование
• Функциональное программирование
• Логическое программирование
• Объектно-ориентированное программирование
• Визуальное программирование
54

54. Технологии программирования

Императивное программирование — это описание
того, как ты делаешь что-то, а декларативное —
того, что ты делаешь.
Пример: вы вдвоем пришли в ресторан, подошли к
администратору и сказали…
Императивный подход (как): Я вижу, что столик возле
окна свободен. Мы пойдём туда и сядем там.
Декларативный подход (что): Столик для двоих,
пожалуйста.
Императивный подход означает то, как вы займёте место.
Вы должны перечислить все шаги этого процесса.
Декларативный же подход заявляет, что вам нужен столик
на двоих.
55

55.

Функциональное программирование
Обычные традиционные (императивные) языки высокого
уровня, такие как Pascal, Cи, Ada и др. последовательно
выполняют инструкции.
В парадигме функционального программирования
основным понятием является функция.
В программе
задается не порядок вычислений, а система функций для
получения желаемого результата.
Примером языка функционального программирования
является Lisp (от английского сокращения LISt Processing
language - «язык обработки списков»)и его варианты, например,
Common Lisp.
Функциональные языки программирования хорошо
приспособлены к организации параллельных вычислений.
Функциональное программирование нашло большое
применение в теории искусственного интеллекта и её
56
приложениях.

56. Функциональное программирование

Логическое программирование
Суть его в том, что компьютеру предоставляется не
алгоритм решения задачи, а формальное описание
предметной области и решаемой задачи. Делается это с
помощью логических формул. Вывод решения осуществляется
компьютером с помощью механизмов логического вывода.
Самым известным языком логического
программирования является Prolog, со всеми своими
многочисленными диалектами (Arity Prolog, B-Prolog, Ciao
Prolog, Arity/Prolog32, CxProlog/ IF/Prolog, JIProlog и др.).
Они широко используются для создания баз знаний и
экспертных систем и исследований в сфере искусственного
интеллекта (обработка текстов на ЕЯ, построение ЭС, создание
музыкальных произведений, понимание речи и т.д.).
57

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

Объектно-ориентированное
программирование
В нем получили дальнейшее развитие принципы
структурного программирования (структуризация программ и
данных, модульность, …), а также новые подходы к созданию
программ.
ООП основано на понятии объекта – типа данных, в
котором сочетаются свойства объекта и методы его обработки.
Примеры:
1. Объект автомобиль, свойства его – марка, тип
двигателя, методы – способность двигаться в
соответствии со значением своих свойств (количество
бензина, мощность двигателя…).
2. Объект файл, свойства – имя, размер, методы – читать,
писать, создавать, удалять.
ООП есть в Паскале, начиная с версии 5.0, в С++.
Подробнее рассмотрим позже.
58

58. Объектно-ориентированное программирование

Визуальное программирование
Визуализация – это процесс отображения на экране
компьютера сложных процессов построения программ.
Частично визуальное программирование реализовано в
Delphi, Visual C++. В этих системах визуализирована работа с
элементами интерфейса.
59

59. Визуальное программирование

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

60. Структурное программирование

Структурное кодирование
1.
Любая программа представляет собой структуру, построенную из
трёх типов базовых конструкций:
последовательное
исполнение
(следование)—
однократное
выполнение операций в том порядке, в котором они записаны в
тексте программы;
ветвление — однократное выполнение одной из двух или более
операций, в зависимости от выполнения некоторого заданного
условия;
цикл — многократное исполнение одной и той же операции до тех
пор, пока выполняется некоторое заданное условие (условие
продолжения цикла).
В программе базовые конструкции могут быть вложены друг в
друга произвольным образом, но никаких других средств управления
последовательностью выполнения операций не предусматривается.
61

61. Структурное кодирование

(продолжение)
2.
Повторяющиеся фрагменты программы (либо не
повторяющиеся, но представляющие собой логически
целостные вычислительные блоки) могут оформляться в
виде т. н. подпрограмм (процедур или функций). В этом
случае в тексте основной программы, вместо
помещённого в подпрограмму фрагмента, вставляется
инструкция вызова подпрограммы. При выполнении
такой инструкции выполняется вызванная подпрограмма,
после чего исполнение программы продолжается с
инструкции,
следующей
за
командой
вызова
подпрограммы.
3.
Документированность программ, соблюдение отступов.
Хорошо структурированную программу можно читать
сверху вниз без управляющих переходов на другие
страницы.
62

62. Структурное кодирование (продолжение)

Цели структурного программирования
обеспечение дисциплины программирования
улучшение читабельности программ
повышение эффективности программ
повышение надежности программ
уменьшение времени и стоимости разработки программ
См. _Лекция_01_Технологии программирования
63

63. Цели структурного программирования

Правила структурного программирования
программу нужно разбивать на модули;
необходимо аккуратно разрабатывать иерархическую
структуру взаимосвязи между модулями;
ширина модуля (количество вызываемых им других модулей)
не должна превышать десяти (это связано с тем, что в
кратковременной памяти человека одновременно может
храниться 5-9, в среднем 7, “кусков” информации), при
превышении этого предела увеличивается количество ошибок;
модуль не должен содержать более 100 операторов;
модуль должен иметь одну входную и одну выходную точку;
каждый модуль должен быть документирован, т.е. содержать
описание его назначения, входных и выходных данных, имена
модулей, которые его вызывают и которые он вызывает, краткое
описание алгоритма или ссылки на его описание, комментарии
по ходу решения задачи;
См. _Лекция_01_Технологии программирования
64

64. Правила структурного программирования

(продолжение)
следует избегать ненужных меток и переходов по оператору
goto;
следует использовать только базовые структуры;
каждый оператор следует записывать в отдельной строке;
при записи составных операторов нужно использовать
отступы;
нежелательна вложенность оператора if более 3;
следует избегать использования языковых конструкций с
неочевидной семантикой и программистских “трюков”.
См. _Лекция_01_Технологии программирования
65

65. Правила структурного программирования (продолжение)

Достоинства структурного программирования
Структурное программирование позволяет значительно
сократить число вариантов построения программы по одной и
той же спецификации, что значительно снижает сложность
программы и, что ещё важнее, облегчает понимание её
другими разработчиками.
В структурированных программах логически связанные
операторы находятся визуально ближе, а слабо связанные —
дальше, что позволяет обходиться без блок-схем и других
графических форм изображения алгоритмов (по сути, сама
программа является собственной блок-схемой).
Сильно упрощается процесс тестирования и отладки
структурированных программ.
66

66. Достоинства структурного программирования

Вопросы:
1. Как проверить, что блок-схема структурна?
2. Гарантирует ли структурность программы (блоксхемы) правильность алгоритма?
3. Может ли неструктурная программа правильно
решать задачу?
4. Допустимо ли когда-нибудь отступать от правил
структурного программирования?
67

67. Вопросы:

Способы описания языков программирования
Наиболее часто используются
следующие способы описания языков
программирования (метаязыки):
нормальная форма Бэкуса-Наура
(БНФ);
синтаксические диаграммы Вирта;
формальные грамматики.
© 2023 Конах В.В
68

68. Способы описания языков программирования

Форма Бэкуса-Наура
При записи в форме Бэкуса-Наура используются
несколько типов объектов:
основные символы (или терминальные
символы, в частности, ключевые слова) –
будут записаны чёрным цветом;
металингвистические переменные (или
нетерминальные символы), которые
соответствуют каким-то понятиям
описываемого языка. Металингвистические
переменные изображаются русскими
словами, записанными синим цветом, и
заключаются в угловые скобки <>;
© 2023 Конах В.В
69

69. Форма Бэкуса-Наура

(продолжение)
металингвистические связки, которые
также будут записываться синим цветом:
::= определение метапеременной (возможно,
рекурсивное)
[ ] необязательная конструкция
[ ]… конструкция повторяется 0 и более раз
{ }… конструкция повторяется 1 и более раз
| разделитель для вариантов
© 2023 Конах В.В
70

70. Форма Бэкуса-Наура (продолжение)

Пример использования БНФ
<целое> ::= <целое без знака> | + <целое
без знака> | - <целое без знака>
<целое без знака> ::= <цифра> | <целое без
знака> <цифра>
<цифра> ::= 0| 1| 2| 3| 4| 5| 6| 7| 8| 9
<комментарий С++> ::= /* <текст> */ |
// <текст до конца строки>
Угловые скобки в описаниях метапеременных часто
опускаются
© 2023 Конах В.В
71

71. Пример использования БНФ

Синтаксические диаграммы Вирта
Синтаксическая диаграмма – это графическое
правило определения конструкции языка с
помощью специальных обозначений (элементов).
терминальный
символ
метапеременная
::=
© 2023 Конах В.В
72

72. Синтаксические диаграммы Вирта

Пример синтаксической диаграммы
+
Целое
Целое без знака
::=
Целое без знака
Целое без знака
Цифра
::=
© 2023 Конах В.В
73

73. Пример синтаксической диаграммы

Язык С
Перед C++ был C (1972 г.) создан Деннисом Ритчи в Bell
Telephone Laboratories как системный язык
программирования, т.е. язык для написания
операционных систем. Основной задачей было создание
легко компилируемого минималистического языка,
который предоставлял бы эффективный доступ к памяти,
относительно быстро выполнялся, и на котором можно
было бы писать эффективный код. Таким образом, при
разработке высокоуровневого языка, был создан язык Си,
который во многом относился к языкам низкого уровня,
оставаясь при этом независимым от платформ, для
которых мог быть написан код.
74

74. Язык С

Cи в конечном итоге стал настолько эффективным и
гибким, что в 1973 году Ритчи и Кен Томпсон переписали
больше половины операционной системы UNIX,
используя этот язык. Многие предыдущие операционные
системы были написаны на языке ассемблера. В отличие
от Ассемблера, на котором пишутся программы под
конкретные процессоры, высокая портируемость языка Cи
позволила перекомпилировать UNIX и на другие типы
компьютеров, ускоряя его популяризацию. Язык Cи и
операционная система UNIX тесно связаны между собой,
и популярность первого отчасти связана с успехом
второго.
75

75. Язык С

Язык С++
Язык программирования C++ был разработан Бьёрном
Страуструпом в Bell Telephone Laboratories в качестве
дополнения к Cи в 1979 г. Его популярность была вызвана
объектно-ориентированностью языка.
Язык C++ был ратифицирован (одобрен) комитетом ISO в
1998 году и потом снова в 2003 году (под названием
C++03). Потом были следующие версии стандарта языка
С++ (выпускаются раз в 3 года), которые добавили еще
больше функционала:
,
С++11 в 2011 году;
С++14 в 2014 году;
С++17 в 2017 году;
С++20 в 2020 году
С++23 - последний опубликованный стандарт;
ожидается С++26 .
76

76. Язык С++

1.
Достоинства С++
С++ сочетает в себе три различных принципа
программирования:
процедурное программирование, представленное языком С
и позволяющее создавать библиотеки функций;
объектно-ориентированное программирование (ООП),
представленное таким понятием как класс и позволяющее
разрабатывать библиотеки классов;
обобщенное программирование, представленное
шаблонами языка С++ и его стандартными библиотеками.
2. Мощный (содержащий средства создания эффективных
программ практически любого назначения, от
низкоуровневых утилит и драйверов до сложных
программных комплексов самого различного назначения).
3. Гибкий (элементы языка С обеспечивают доступ к
аппаратным средствам на низком уровне, а ООП и
обобщенное программирование обеспечивает высокий
уровень абстракции данных).
77

77. Достоинства С++

4. Переносимый (имея компилятор для каждой ОС можно
легко перенести приложение на другую ОС).
5. Язык стандартизирован.
О популярности С++ говорит тот факт, что в январе 2023
года C++ получил награду TIOBE «Язык программирования
года» (2022).
Индекс TIOBE Programming Community – индекс,
оценивающий популярность языков программирования, на
основе подсчёта результатов поисковых запросов по всему
миру, содержащих название языка. Для расчета рейтингов
используются популярные поисковые системы, такие как
Google, Bing,Yahoo!, Wikipedia, Amazon, YouTube и Baidu.
78

78. Достоинства С++

КОНЕЦ ЛЕКЦИИ
79
English     Русский Rules