Задание для повторения
Литература
ОСНОВЫ И МЕТОДОЛОГИИ ПРОГРАММИРОВАНИЯ
Регистрация в электронной версии дисциплины «Основы и методологии программирования»  
Кодовые слова для подгрупп
Представление информации в компьютере
Представление информации в компьютере
Как данные представляются в виде чисел?
Как данные представляются в виде чисел?
Как данные представляются в виде чисел?
Как данные представляются в виде чисел?
Иерархия памяти
Исполняемая программа
Непосредственная запись машинных команд
Написание программы на Ассемблере
Написание программы на языке высокого уровня
Интерпретация и компиляция
Схема создания исполняемого кода
Этап 1: Препроцессинг (Preprocessing)
Этап 2: Компиляция (Compilation) и Ассемблирование (Assembling)
Этап 3: Линковка (Linking)
IDE (Integrated Development Environment), или интегрированная среда разработки
Интегрированная Среда Разработки
Жизненный цикл программного обеспечения
Основные этапы жизненного цикла ПО
Каскадная модель жизненного цикла
Каскадная модель жизненного цикла
Каскадная модель жизненного цикла
Определение алгоритма
Свойства алгоритма
Свойства алгоритма
Свойства алгоритма
Способы записи алгоритма
Псевдокод –
Блок-схема –
Элементы блок-схем
Элементы блок-схем
Элементы блок-схем
Элементы блок-схем
Элементы блок-схем
Элементы блок-схем
Основные (базовые) структуры блок-схем
Следование
Ветвление
Цикл с предусловием (Цикл-ПОКА)
Цикл с постусловием (Цикл-ДО)
Нахождение минимума из 3 чисел (вариант 1)
Нахождение минимума из 3 чисел (вариант 2)
Алгоритм Евклида нахождения НОД
Алгоритм Евклида нахождения НОД
Алгоритм Евклида
Алгоритм Евклида
Алгоритм Евклида нахождения НОД
Найти сумму N первых натуральных чисел
Методология программирования
Парадигма программирования
Императивное программирование
Декларативное программирование
Основные подпарадигмы императивного программирования
Основные подпарадигмы императивного программирования
Основные подпарадигмы императивного программирования. Структурное программирование
Основные подпарадигмы императивного программирования. Структурное программирование
Структурное программирование
Структурное программирование
Основные подпарадигмы императивного программирования. Процедурное программирование
Как выглядит типичная процедурная программа?
Краткая суть различия процедурного и структурного программирования
Основные подпарадигмы декларативного программирования
Основные подпарадигмы декларативного программирования
Основные подпарадигмы императивного программирования.
Технология программирования
Сравнительная таблица
Вывод
C++
История создания C++
История создания C++
Версии C++
Версии C++
2.38M
Категория: ПрограммированиеПрограммирование

1

1.

Дисциплина
«Основы и методологии программирования»
(1 семестр)
Лекции – 68 часов, экзамен
Лабораторные занятия – 68 часов, зачёт
Ссылка на курс на образовательном портале БГУ:
https://edufpmi.bsu.by/course/view.php?id=750
Преподаватель – Сатолина Анна Викторовна

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

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

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

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

4. ОСНОВЫ И МЕТОДОЛОГИИ ПРОГРАММИРОВАНИЯ

5. Регистрация в электронной версии дисциплины «Основы и методологии программирования»  

Регистрация в
«Основы
и
электронной
методологии
версии дисциплины
программирования»
Этап 1 Изменение пароля
1. Авторизоваться на компьютере в компьютерном классе сети университета. При
авторизации изменить пароль.
2. После изменения пароля открыть образовательный портал и записаться на курс
«Основы и методологии программирования ПМ 1 к, 1 сем».
Этап 2 Запись на курс «Основы и методологии программирования ПМ 1 к, 1
сем»
1. Открыть образовательный портал ФПМИ https://edufpmi.bsu.by.
2. Ввести логин и пароль со студенческого билета. Логин — имя пользователя до
символа @, например fpm.petrovVM.
3. После авторизации перейти по ссылке курса дисциплины «Основы и
методологии
программирования
ПМ
1
к,
1
сем»
(https://edufpmi.bsu.by/course/view.php?id=750).
4. Ввести кодовое слово

6. Кодовые слова для подгрупп

Использовать ключевое слово:
Подгруппа






Ключевое слово
2025OiMP-5A
2025OiMP-5B
2025OiMP-6A
2025OiMP-6B
2025OiMP-7A
2025OiMP-7B

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

Самая маленькая единица информации — это бит (от англ. binary
digit). Бит может принимать только одно из двух значений:
• 0 (выкл. / нет / ложь)
• 1 (вкл. / да / истина)
Физически бит в современной памяти — это электрический заряд в
конденсаторе (есть заряд — 1, нет заряда — 0) или состояние
триггера в процессоре.

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

Одного бита слишком мало, чтобы представить что-то осмысленное.
Поэтому биты объединяют в группы. Стандартной группой является байт.
• 1 байт = 8 бит.
Пример байта: 01011011, в 10 с/с это - 91
Байт — это наименьшая адресуемая единица памяти. Каждому байту в
оперативной памяти присвоен свой уникальный адрес.
Производные единицы измерения:
килобайт (1024 байта)
мегабайт (1024 килобайта)
гигабайт (1024 мегабайта)
терабайт (1024 гигабайта)

9. Как данные представляются в виде чисел?

Текст кодируется с помощью таблиц символов (например, ASCII
или Unicode). Каждому символу присваивается уникальный числовой
код.
Пример (ASCII):
• Символ 'A' имеет код 65. В двоичном виде: 01000001
• Символ '1' (цифра) имеет код 49. В двоичном виде: 00110001
• Строка "Hi" будет храниться в памяти как два байта: 72 (H) и 105 (i).

10. Как данные представляются в виде чисел?

Целые числа хранятся напрямую в двоичной системе. Для их
представления используется фиксированное количество байт
(например, 4 байта для int32_t).
Пример: число 42 в двоичной системе (в одном байте):
42 (десятичное) = 00101010 (двоичное)
Для отрицательных чисел используется дополнительный код,
который позволяет складывать и вычитать положительные и
отрицательные числа по одним и тем же правилам.

11. Как данные представляются в виде чисел?

Для представления дробей (например, 3.14, -0.001) используется стандарт
IEEE 754. Число разбивается на три части:
Число представляется в виде двоичной дроби в экспоненциальной записи:
отдельно хранятся бит знака, порядок и мантисса.
https://skillbox.ru/media/code/chisla-s-plavayushchey-tochkoy-chto-eto-takoei-kak-oni-rabotayut/

12. Как данные представляются в виде чисел?

Изображение разбивается на пиксели. Каждый пиксель кодируется
комбинацией чисел, представляющего его цвет.
Например, в модели RGB:
• Цвет представляется тремя числами: интенсивность Красного (Red),
Зеленого (Green) и Синего (Blue).
• Каждое число обычно занимает 1 байт (значение от 0 до 255).
• Ярко-красный цвет будет закодирован как: (255, 0, 0).
В памяти это будет храниться как последовательность байтов:
11111111 00000000 00000000.
Все изображение — это просто очень длинный массив таких цветовых
значений для каждого пикселя.

13. Иерархия памяти

• Регистры процессора: Самые быстрые ячейки памяти прямо внутри
CPU. Работа с ними идет на тактовой частоте процессора.
• Кэш (L1, L2, L3): Быстрая память, служащая буфером между
процессором и ОЗУ. Хранит копии часто используемых данных из ОЗУ.
• Оперативная память (ОЗУ/RAM): Основная рабочая память. Быстрая,
но энергозависимая (стирается при выключении питания). Здесь хранятся
запущенные программы и обрабатываемые данные.
• Постоянная память (SSD/HDD): Медленная, но энергонезависимая и
объемная. Здесь хранятся все файлы, когда они не используются.
Когда вы запускаете программу, ее код и данные с диска переносятся в
ОЗУ. Затем процессор по мере необходимости подгружает данные из ОЗУ в
свои кэши и регистры для молниеносного доступа.

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

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

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

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

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

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

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

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

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

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

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

20. Этап 1: Препроцессинг (Preprocessing)

На этом этапе специальная программа-препроцессор обрабатывает ваш
исходный код до начала компиляции.
Что делает препроцессор:
• Подключает заголовочные файлы (#include): Текст из файлов (.h, .hpp)
буквально вставляется в место директивы #include.
• Раскрывает макросы (#define): Все использования макросов (например,
MAX_SIZE) заменяются на их значения.
• Условная компиляция: Блоки кода, заключенные в #ifdef, #ifndef, #if,
обрабатываются в зависимости от выполнения условий.
• Удаляет комментарии.
• Результат этапа: Генерируется препроцессированный файл (обычно с
расширением .i), который представляет собой один большой текстовый
файл со всеми включенными заголовками и раскрытыми макросами.

21. Этап 2: Компиляция (Compilation) и Ассемблирование (Assembling)

Теперь компилятор (например, g++) берет препроцессированный код и
превращает его в машинный код.
Этот этап, в свою очередь, делится на два подэтапа:
1. Собственно компиляция:
• Компилятор анализирует синтаксис и семантику кода (проверяет ошибки,
типы данных).
• Производит оптимизации.
• В результате генерируется ассемблерный код — читаемое человеком
представление машинных команд, специфичное для архитектуры процессора
(x86, ARM и т.д.).
2. Ассемблирование:
• Ассемблер преобразует ассемблерный код в настоящий машинный
код (двоичный), упакованный в объектные файлы.
Результат этапа: Для каждого .cpp-файла создается свой объектный файл (.o
в Linux/macOS, .obj в Windows). Эти файлы содержат машинный код, но еще
не являются исполняемой программой.

22. Этап 3: Линковка (Linking)

Это финальный этап. Линкер (или редактор связей) принимает все
объектные файлы и "склеивает" их в единое целое — исполняемый файл
или библиотеку.
Что делает линкер:
• Разрешение внешних ссылок: Если функция func(), объявленная в
main.cpp, определена в func.cpp, линкер находит ее адрес в объектном
файле func.o и подставляет его в код main.o.
• Подключение библиотек: Линкует ваш код со стандартной библиотекой
C++ (которая содержит, например, std::cout) и другими сторонними
библиотеками (.lib в Windows, .a в Linux).
• Определение точки входа: Указывает операционной системе, с какого
места в программе начинать выполнение (обычно это функция main).
Результат этапа: Исполняемый файл (например, a.out в Linux, a.exe в
Windows) или библиотека.

23. IDE (Integrated Development Environment), или интегрированная среда разработки

— это программное обеспечение, которое объединяет в одном месте
различные инструменты для написания, редактирования, тестирования и
отладки программного кода, тем самым повышая производительность и
удобство работы программистов.
В состав IDE обычно входят:
• текстовый редактор,
• компилятор/интерпретатор кода,
• отладчик,
• средства автоматизации сборки,
• другие инструменты

24. Интегрированная Среда Разработки

25.

• Плюсы: Бесплатная версия (Community) не урезана по
функционалу
для
большинства
разработчиков.
Имеет,
возможно, лучший отладчик в мире. Бесшовная интеграция с
.NET, Azure и другими технологиями Microsoft. Отличный
профилировщик производительности.
• Минусы: Очень большой размер установки (~10-20 Гб со всеми
компонентами). Ориентирована в первую очередь на Windows.
Может показаться перегруженной для новичков.
• Вердикт: Лучший выбор для разработки под Windows. Если
вы делаете игры на Unreal Engine или классические Windowsприложения — это ваш инструмент.

26.

• Плюсы: Невероятно легкий, быстрый и бесплатный. Огромная экосистема
расширений (C/C++, CMake Tools, Native Debug и др.). Полностью
настраивается под себя. Фактически это мощный текстовый редактор,
который благодаря расширениям превращается в полноценную IDE.
• Минусы: Требует времени на настройку (нужно вручную ставить
компилятор, отладчик, добавлять расширения, настраивать задачи сборки в
tasks.json и запуска в launch.json). Это не "всё в одном", а конструктор.
• Вердикт: Идеален для тех, кто любит гибкость и контроль. Отличный
выбор для обучения, чтобы понять, как устроена сборка проекта. Прекрасно
подходит для совмещения с другими языками (Python, JavaScript).

27.

•Плюсы: Кроссплатформенная, "умная" среда. Имеет лучшую в мире
поддержку CMake. Фирменные фишки JetBrains: мощнейший рефакторинг,
анализ кода на лету, предсказание ошибок, интеграция с популярными
системами контроля версий (Git).
•Минусы: Платная. Более требовательна к ресурсам, чем VS Code. Может
быть избыточной для маленьких проектов.
•Вердикт: Лучший выбор для профессиональной кроссплатформенной
разработки. Если вы работаете над большим проектом на
Linux/macOS/Windows и используете CMake — CLion значительно повысит
вашу продуктивность.

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

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

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

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

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

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

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

На практике этапы
каскадной модели
реализуются
итерационно, с
циклами обратной
связи между
этапами.

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

Эта
модель
предусматривает
спиралеобразное
совершенствование системы путем
последовательного
создания
прототипов (новых версий) этой
системы. На каждом витке спирали
при создании очередной версии
продукта, уточняются требования
проекта и планируются работы
этого витка.

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

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

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

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

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

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

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

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

37.

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

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

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

39. Псевдокод –

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

40. Блок-схема –

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

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

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

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

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

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

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

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

• Следование
• Ветвление (развилка)
• Повторение (цикл)

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

49. Ветвление

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

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

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

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

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

Основная идея:
Если a > b, то НОД(a, b) = НОД(a - b, b)
Процесс повторяется до тех пор, пока числа не станут равными. Это
равное значение и будет НОД.
Вычисление НОД(54, 24) через вычитание:
54 > 24 → 54 - 24 = 30 → (30, 24)
2. 30 > 24 → 30 - 24 = 6 → (6, 24)
3. 24 > 6 → 24 - 6 = 18 → (6, 18)
4. 18 > 6 → 18 - 6 = 12 → (6, 12)
5. 12 > 6 → 12 - 6 = 6 → (6, 6)
6. Числа равны → НОД = 6

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

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

56. Алгоритм Евклида

57. Алгоритм Евклида

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

Алгоритм основан на следующем принципе:
• НОД(a, b) = НОД(b, a mod b), где a mod b — остаток от деления a на b.
Процесс повторяется до тех пор, пока остаток не станет равен нулю. Тогда
последний ненулевой остаток и будет искомым НОД.
Пример вычисления НОД(54, 24):
54 ÷ 24 = 2 (остаток 6) → НОД(54, 24) = НОД(24, 6)
24 ÷ 6 = 4 (остаток 0) → НОД(24, 6) = НОД(6, 0)
Второй аргумент 0 → НОД = 6

59.

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

61. Методология программирования

— это система принципов, методов и подходов к организации процесса
разработки ПО. Она определяет:
• Как структурировать процесс разработки (например, Agile, Waterfall, Scrum).
• Какие практики использовать (TDD, DDD, pair programming).
• Как взаимодействовать в команде (роли, документация, стандарты кодирования).
Примеры:
• Agile — гибкий итеративный подход.
• Scrum — фреймворк внутри Agile с ролями (Scrum Master, Product Owner) и
спринтами.
• Kanban — визуализация задач и ограничение Work in Progress (WIP).
Все методологии основаны на практическом опыте программистов.
• Waterfall – последовательная модель (анализ → дизайн → кодирование →
тестирование).
• DevOps – интеграция разработки и эксплуатации.

62. Парадигма программирования

— это стиль или способ мышления при написании кода, основанный на
определённых принципах. Она определяет:
• Как структурировать программу,
• Какие конструкции использовать,
• Как управлять данными и выполнением.
Одни парадигмы являются подмножествами других, некоторые
противопоставляются,
а
многие
современные
языки
являются мультипарадигменными (поддерживают несколько стилей).
Две основные философии:
1. Императивное (Imperative)
2. Декларативное (Declarative):

63.

Императивное программирование
- это парадигма программирования, в которой программа представляет собой
последовательность команд (инструкций), описывающих как достичь
желаемого результата. Программа явно говорит компьютеру, какие
шаги нужно выполнить и в каком порядке.
Можно провести аналогию с кулинарным рецептом: "Возьми миску, разбей 2
яйца, взбей их венчиком, добавьте стакан муки, перемешайте до однородной
массы..."

64. Императивное программирование

Декларативное программирование
- это
парадигма
программирования,
в
которой
программа
описывает что она хочет получить, а не как это получить. Основное
внимание уделяется результату, а не пошаговому алгоритму его
достижения.
Если императивный подход — это рецепт, то декларативный — это заказ в
ресторане.
Декларативное программирование часто строится поверх императивного.
Компилятор или интерпретатор (императивный код внутри себя)
преобразует ваше декларативное описание в конкретные шаги.

65. Декларативное программирование

Основные подпарадигмы императивного программирования
Объектно-ориентированное
программирование
(ООП)

это
парадигма
программирования, в которой основными концепциями являются объекты и классы.
Программа представляется как набор взаимодействующих объектов, каждый из которых
является экземпляром определённого класса. Классы же образуют иерархии наследования.
Ключевая идея: объединить данные (поля, свойства) и методы (функции), которые
работают с этими данными, в единую структуру — объект.
Ключевые концепции:
• инкапсуляция (Encapsulation, принцип, согласно которому данные (поля) и методы,
которые с ними работают, объединяются в одном классе, а прямой доступ к внутренним
данным объекта ограничивается),
• наследование (Inheritance, механизм, позволяющий создать новый класс (дочерний,
производный) на основе существующего (родительского, базового). Дочерний
класс наследует все поля и методы родительского класса и может добавлять свои или
изменять унаследованные),
• Полиморфизм (Polymorphism, возможность объектов с одинаковой спецификацией
(например, методы с одним именем) иметь разную реализацию),
• Абстракция (Abstraction, принцип, при котором создаются классы, которые
определяют только структуру (какие методы должны быть), но не их конкретную
реализацию. Это позволяет работать с объектами на более высоком уровне, не вдаваясь в
детали).
• Примеры языков: Java, C#, C++, Smalltalk, Ruby, Python, JavaScript, PHP, TypeScript.

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

Структурное программирование — это парадигма программирования,
которая утверждает, что любую программу можно и нужно создавать на
основе трёх базовых управляющих конструкций:
• Последовательность (выполнение команд по порядку, одна за другой).
• Ветвление (условный оператор, выбор между двумя путями выполнения).
• Цикл (многократное повторение блока кода).
• Ключевая идея: отказ от использования оператора безусловного перехода
goto в пользу вышеперечисленных структур для улучшения читаемости,
тестируемости и надёжности кода.

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

Основные подпарадигмы императивного программирования.
Структурное программирование
Ключевые принципы и концепции:
1. Следование (Sequence): Линейное выполнение инструкций.
2. Ветвление (Selection): Выполнение разных блоков кода в зависимости от
условия. Обычно это оператор if-else или switch-case.
3. Повторение (Iteration): Многократное выполнение блока кода пока
условие истинно. Обычно это циклы while, do-while, for.

68. Основные подпарадигмы императивного программирования. Структурное программирование

Отказ от оператора goto
Код до (хаотичный, с goto):
Код после (структурный):

69. Основные подпарадигмы императивного программирования. Структурное программирование

Структурное программирование
Нисходящее проектирование (Top-Down Design)
Метод разработки, при котором большая, сложная задача разбивается на
более мелкие и простые подзадачи. Эти подзадачи решаются с помощью
подпрограмм — функций и процедур.
• Функция возвращает значение.
• Процедура выполняет действие, но не возвращает значение (в некоторых
языках, like Pascal; в C/С++/Python процедура — это функция с типом
возврата void/None).

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

Принцип "один вход — один выход«
Каждая управляющая структура (блок if, цикл, функция) должна иметь одну
точку входа и одну точку выхода. Это делает поток выполнения программы
предсказуемым и простым для отслеживания.

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

Основные подпарадигмы императивного программирования.
Процедурное программирование
- это императивная парадигма программирования, в которой программа
создаётся как последовательность инструкций (команд) и процедур (также
называемых подпрограммами или функциями), которые эти инструкции
группируют.
Ключевые концепции
• Процедуры и функции (Подпрограммы)
• Последовательное выполнение
• Локальные и глобальные данные
• Управляющие структуры

72. Основные подпарадигмы императивного программирования. Процедурное программирование

Как выглядит типичная процедурная программа?
Программа обычно структурируется следующим образом:
• Секция объявлений: Подключение библиотек, объявление глобальных
констант (редко — переменных).
• Описание подпрограмм: Код всех процедур и функций.
• Главная функция (main): Точка входа в программу. Представляет собой
последовательность вызовов других процедур и функций, которая
описывает основной алгоритм.

73. Как выглядит типичная процедурная программа?

Краткая
суть
различия
процедурного
структурного программирования
и
• Процедурное программирование: Это широкое понятие. Оно просто
означает, что программа организована вокруг процедур (функций), которые
вызывают друг друга. Но оно не ограничивает, как именно эти процедуры
должны быть написаны внутри.
• Структурное программирование: Это строгое подмножество процедурного
программирования. Оно накладывает дисциплину на то, как должны быть
написаны процедуры. Его главный враг — оператор goto.
Таким образом, структурное программирование — это современный,
дисциплинированный вид процедурного программирования. Почти все
современные процедурные программы написаны в структурном стиле.

74. Краткая суть различия процедурного и структурного программирования

Основные подпарадигмы декларативного программирования
Функциональное программирование (Functional)
- это парадигма программирования, в которой процесс вычисления рассматривается как
вычисление значений функций в математическом понимании (то есть без изменяемых
состояний и побочных эффектов). Программы составляются путем комбинации и
композиции функций, т.е. в программе задается не порядок вычислений, а система
функций для получения желаемого результата.
Ключевые концепции:
• чистые функции (всегда возвращает одинаковый результат для одних и тех
же аргументов, не имеет побочных эффектов (side effects), т.е. не изменяет свои
входные аргументы, не изменяет глобальные переменные, не производит операций
ввода-вывода (I/O) (например, не пишет в файл или консоль), не обращается к базе
данных или сети),
• функции высшего порядка (функции, которые либо принимают другие функции в
качестве аргументов, либо возвращают их как результат),
• рекурсия (когда функция вызывает сама себя),
• неизменяемость данных.
Примеры языков: Haskell, Lisp, Erlang, Scala, F#, JavaScript (поддерживает).
Функциональное программирование нашло большое применение в теории
искусственного интеллекта и её приложениях.

75. Основные подпарадигмы декларативного программирования

Логическое программирование — это парадигма, в которой программа
формулируется как набор логических утверждений (фактов и правил),
образующих базу знаний, а вычисление происходит путем автоматического
логического вывода ответов на заданные вопросы (запросы) на основе этих
знаний.
Проще говоря, вы не говорите компьютеру "как сделать", а описываете "что
истинно" и "что из чего следует", а система автоматически находит решение,
используя правила логики.
Ключевые концепции:
• факты (Facts, простые утверждения, которые считаются истинными, описывают
свойства объектов и отношения между ними),
• правила (Rules, законы, которые определяют одни утверждения на основе
других. Они имеют форму логических импликаций: Если A и B и C, то Z),
• запросы (Queries,вопросы к базе знаний, на которые система пытается найти
ответ, используя логический вывод).
Примеры языков:
классический и самый известный язык логического программирования — Prolog.

76. Основные подпарадигмы декларативного программирования

Основная идея
Ключевые
концепции
Императивная
Как сделать?
Последовательност
ь команд,
C, Pascal, Go
состояние
Процедурная
Как сделать, разбив Процедуры,
на шаги?
функции
Парадигма
Объектноориентированная
(ООП)
Примеры языков
C, Fortran
Кто и что должен
сделать?
Классы, объекты,
наследование,
полиморфизм
Java, C++, C#, Python
Декларативная
Что нужно?
Спецификация
результата
SQL, HTML
Функциональная
Что представляет
собой результат?
Чистые функции,
неизменяемость
Haskell, Lisp, Erlang
Логическая
Каковы факты и
правила?
Факты, правила,
запросы
Prolog

77.

Технология программирования
- это конкретные инструменты, языки, фреймворки и практики,
используемые для написания кода. Она отвечает на вопрос:
Как технически реализовать программу?
• Примеры:
• Языки программирования: Python, Java, C++.
• Фреймворки: React (для фронтенда), Django (для бэкенда).
• Инструменты: Git (версионный контроль), Docker (контейнеризация).
• Парадигмы: ООП, функциональное программирование.

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

Сравнительная таблица
Критерий
Методология
Парадигма
Суть
Как организовать
процесс.
Как мыслить при
Какие инструменты
программировании. использовать.
Примеры
Agile, Scrum,
Waterfall.
ООП,
функциональное,
императивное.
Python, React, Git,
Docker.
Уровень
Процессуальный
(управление).
Концептуальный
(архитектура).
Технический
(реализация).
Влияние
На команду и сроки. На структуру кода.
Технология
На
производительность
и стек.
Пример взаимодействия
1.Методология: Команда использует Scrum (2-недельные спринты).
2.Парадигма: Разработка ведётся в ООП-стиле (классы, инкапсуляция).
3.Технология: Пишут на Java + Spring Boot, хранят код в Git, деплоят через Docker.

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

Вывод
• Методология – про организацию процесса.
• Парадигма – про стиль программирования.
• Технология – про инструменты и реализацию.
Они дополняют друг друга и используются вместе.

80. Сравнительная таблица

C++
— мультипарадигменный язык. Это его ключевая сила. Вы
можете выбирать и комбинировать парадигмы в зависимости от
задачи.
Объектно-ориентированное программирование (ООП)
Обобщённое программирование (Generic Programming)
Процедурное программирование
Функциональное программирование (частично)

81. Вывод

История создания C++
Язык программирования С (Си) был разработан в 19691973 годах Деннисом Ритчи в Bell Labs. Он стал основой
для многих операционных систем и программного
обеспечения, включая Unix.
Философия C: "Доверяй программисту". Язык дает
максимальную свободу и контроль, но и требует
максимальной ответственности. Он минималистичен,
эффективен и предсказуем.
Создание C++ началось в конце 1970-х годов, когда
датский ученый-компьютерщик Бьёрн Страуструп начал
работу над проектом расширения языка C. Его цель
заключалась в том, чтобы создать язык, который бы
сочетал в себе эффективность и производительность C с
возможностями
объектно-ориентированного
программирования. Первая версия C++ была выпущена в
1983 году под названием "C with Classes". Позже название
было изменено на C++, подчеркивая связь с языком C и
добавление новых возможностей.

82. C++

История создания C++
Создание C++ началось в конце 1970-х годов, когда датский ученыйкомпьютерщик Бьёрн Страуструп начал работу над проектом расширения
языка C. Его цель заключалась в том, чтобы создать язык, который бы
сочетал в себе эффективность и производительность C с возможностями
объектно-ориентированного программирования. Первая версия C++ была
выпущена в 1983 году под названием "C with Classes". Позже название
было изменено на C++, подчеркивая связь с языком C и добавление новых
возможностей. ++ — это оператор инкремента в C, что символизирует
"эволюцию, следующий шаг после C".
Философия С++: «Доверяй программисту, но дай ему мощные
инструменты, чтобы не ошибаться»

83. История создания C++

Версии C++
• C++98: первый официальный стандарт языка, установивший основные
правила и синтаксис.
Важнейшее событие: В стандарт была включена STL (Standard Template
Library), созданная Александром Степановым. STL — это коллекция
шаблонных классов и функций (контейнеры vector, list, map; алгоритмы
sort, find; итераторы). Это изменило способ программирования на C++.
• C++03: небольшие исправления и дополнения к стандарту 1998 года.
• C++11: крупное обновление, включающее множество новых функций,
таких как лямбда-функции, умные указатели и автоопределение типов.

84. История создания C++

Версии C++
Стандартный комитет (WG21) перешел на трехлетний цикл выпуска
новых
• C++14: дальнейшее улучшение языка, включая усовершенствованные
лямбда-выражения и структурированные привязки.
• C++17: добавлены новые возможности, такие как встроенная поддержка
параллельных алгоритмов и упрощённый синтаксис для работы с
кортежами.
• C++20: второе по значимости обновление после C++11., включающая
концепции(революция в шаблонном программировании), std::format
(современное форматирование строк), std::ranges (более выразительные
алгоритмы),
модули(замена
#include!)
и
корутины(поддержка
асинхронности)
• C++23: доработка возможностей C++20, новые библиотеки (std::print,
std::mdspan).

85. Версии C++

86. Версии C++

Сила C++ заключается в его многообразии и контроле:
1. Выбор парадигмы: Вы можете использовать ООП для моделирования
предметной области, обобщённое программирование для создания
абстрактных библиотек и функциональные элементы для лаконичной
обработки данных.
2. Выбор уровня абстракции: Вы можете работать почти на уровне железа
(указатели, ассемблерные вставки) и при этом использовать
высокоуровневые абстракции (умные указатели, лямбды).
3. Контроль над производительностью: Предсказуемость по памяти и
времени выполнения, отсутствие скрытых затрат (как, например, сборка
мусора в Java/C#).
C++ — это язык, который требует глубокого понимания, но взамен даёт
неограниченную мощь и эффективность для решения самых сложных задач.
English     Русский Правила