Файл: Министерство цифрового развития, связи и массовых коммуникаций российской федерации федеральное государственное бюджетное образовательное учреждение высшего образования санктпетербургский государственный университет телекоммуникаций им..docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 07.11.2023
Просмотров: 107
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»(СПбГУТ)Факультет «Институт непрерывного образования»Кафедра «Автоматизация технологических процессов и производств»
Учебная практика
Сравнительный анализ парадигм императивного и декларативного программирования.
Санкт-Петербург2023Содержание
В императивном программировании программа состоит из набора состояний и команд, которые изменяют состояния программы. Основные элементы этой парадигмы включают операции присваивания, условные операторы, циклы и подпрограммы. Рассмотрим подробнее каждый из них с примерами кода на языке.1. Операции присваивания:Операции присваивания используются для установки значений переменных. Переменные могут хранить числа, строки, булевы значения и другие типы данных (листинг 1).
Листинг 1 –Код присваивания значения переменной2. Условные операторы:Условные операторы позволяют программе принимать решение на основе условия. Например, если условие выполняется, программа выполняет определенные команды, иначе она выполняет другие команды (листинг 2).
Листинг 2 –Код условного оператора3. Циклы:Циклы позволяют повторять определенные команды или блоки кода несколько раз. В императивном программировании наиболее распространены два типа циклов: цикл с предусловием и цикл со счетчиком (листинг 4, 5).
Листинг 3 – Код цикла с предусловием
Листинг 4 – Код цикла со счётчиком4. Подпрограммы:Подпрограммы (или функции) позволяют группировать команды в отдельные блоки кода, которые могут быть вызваны из других частей программы. Это способ повторного использования кода и улучшения структуры программы.
Листинг 5 – Пример кода подпрограммаЭто лишь некоторые из основных элементов императивного программирования. Код на императивных языках программирования описывает последовательность шагов, которые компьютер должен выполнить, чтобы достичь определенного результата. Каждая команда изменяет состояние программы, и контроль за выполнением передается от одной команды к другой.При разработке программ в императивном стиле программисты могут иметь более прямой контроль над выполнением программы и легче отслеживать изменение состояний. Однако, при работе с большими и сложными проектами поддержание кода и его масштабирование может стать сложной задачей.
Листинг 6 – Пример функционального программирования на языке Haskell
Листинг 7 – Пример кода логического программирования на языке prolog
Листинг 8 – Пример кода на языке SQL
Недостатки императивного программирования:
| | |
| | |
| по дисциплине: Введение в профессию |
| | | Выполнил студент группы | ПБ-11з | |
| | | Федоров А.А.. | ||
| | | Фамилия И. О. | ||
| | | Руководитель | | |
| оценка | | | уч. Степень, уч. Звание | |
| | | | ||
| дата, подпись | | Фамилия И. О. | ||
-
Парадигма императивного программирования 3 -
Парадигма декларативное программирования 6 -
Сравнительный анализ 9 -
Список использованных источников 13ц
-
Парадигма императивная программирования
В императивном программировании программа состоит из набора состояний и команд, которые изменяют состояния программы. Основные элементы этой парадигмы включают операции присваивания, условные операторы, циклы и подпрограммы. Рассмотрим подробнее каждый из них с примерами кода на языке.1. Операции присваивания:Операции присваивания используются для установки значений переменных. Переменные могут хранить числа, строки, булевы значения и другие типы данных (листинг 1).
| x = 10 y = "Hello, world!" |
| if x > 0: print("x положительное число") else: print("x отрицательное или ноль") |
| while x > 0: print(x) x -= 1 |
| for i in range(5): print(i) |
| def multiply(a, b): return a * b result = multiply(x, y) print("Результат умножения:", result) |
-
Парадигма декларативного программирования
-
Функциональное программирование: Функциональное программирование основывается на математических функциях и вычислениях. Оно подчеркивает использование функций первого класса, неизменяемость данных и отсутствие побочных эффектов. Функции рассматриваются как математические отображения, принимающие одни значения и возвращающие другие. Это позволяет писать более компактный и выразительный код (листинг 6).
| square :: Int -> Int square x = x * x result = square 5 |
-
Логическое программирование: Логическое программирование основано на формальной логике и описывает программу в виде набора логических выражений и правил. Программа состоит из фактов и правил, и система логического программирования автоматически выводит результаты на основе этих фактов и правил (листинг 7):
| % Определение отношения "отец" отец(Андрей, Мария). отец(Андрей, Иван). % Определение отношения "дедушка" дедушка(X, Y) :- отец(X, Z), отец(Z, Y). % Запрос: кто является дедушкой Марии? ?- дедушка(X, Мария). |
-
SQL (Structured Query Language): SQL является декларативным языком запросов, используемым для работы с реляционными базами данных. В SQL программист описывает желаемые данные или операции над ними, а система базы данных самостоятельно оптимизирует выполнение запроса (листинг 8).
| SELECT name, age FROM users WHERE age > 18; |
-
DSL (Domain-Specific Languages): DSL - это специализированный язык программирования, созданный для решения конкретных задач в определенной области. DSL позволяет описывать программу с использованием терминологии, семантики и абстракций, специфичных для предметной области. Примером являются языки разметки, такие как HTML и XML, которые используются для описания структуры документов.
-
Сравнительный анализ
-
Гибкость управления состоянием: В императивном программировании разработчик имеет полный контроль над состоянием программы и может манипулировать им вручную, что может быть полезно в случаях, требующих точного управления ресурсами или выполнения сложных манипуляций с данными. -
Производительность: Императивные языки программирования, такие как C или C++, обычно обеспечивают более прямой доступ к аппаратному обеспечению, что позволяет оптимизировать код для достижения максимальной производительности. -
Большая гибкость в обработке побочных эффектов: Императивные языки позволяют разработчикам легко выполнять операции с побочными эффектами, такими как чтение/запись в файлы или взаимодействие с внешними устройствами.
Недостатки императивного программирования:
-
Сложность поддержки и отладки: Императивные программы могут быть более сложными в поддержке и отладке из-за своего изменчивого состояния. Ошибки в управлении состоянием могут быть сложными для обнаружения и исправления. -
Ограниченная переиспользуемость: В императивном программировании код часто направлен на конкретную задачу, что может затруднить его переиспользование или расширение для других целей. -
Сложность параллельного и распределенного программирования: В императивном программировании сложно управлять параллельным или распределенным выполнением программы, что может быть проблемой при разработке высокопроизводительных систем.
-
Разработка операционных систем: Императивное программирование позволяет непосредственно взаимодействовать с аппаратурой и управлять ресурсами компьютерной системы. -
Низкоуровневое программирование: Для разработки драйверов устройств или оптимизированных приложений, требующих точного контроля над аппаратными ресурсами. -
Высокопроизводительные вычисления: Императивное программирование может быть предпочтительным для разработки вычислительно интенсивных приложений, таких как научные вычисления или обработка больших объемов данных.
-
Разработка игр: Игровые движки и системы разработки игр обычно используют императивное программирование для управления графикой, физикой и взаимодействием с пользователем. -
Системы управления базами данных: Базы данных, такие как MySQL или PostgreSQL, часто используют императивный подход для управления данными и выполнения операций чтения/записи. -
Микроконтроллеры и встроенные системы: Разработка программного обеспечения для микроконтроллеров и встроенных систем, которые управляют электронными устройствами, обычно требует императивного программирования для прямого взаимодействия с аппаратурой.
-
Упрощенная разработка и поддержка кода: Декларативный код обычно является более выразительным и лаконичным, что упрощает разработку и поддержку. Разработчику не нужно беспокоиться о деталях реализации, а только описать требуемый результат. -
Уровень абстракции: Декларативное программирование позволяет использовать высокоуровневые абстракции и переиспользовать готовые компоненты, что способствует повышению производительности и упрощению разработки. -
Легкость параллельного и распределенного программирования: В декларативном программировании процесс выполнения программы может быть автоматически распределен на несколько ядер или устройств, что облегчает разработку параллельных или распределенных систем.