1. Введение
Парадигмы программирования — это способ классификации языков программирования на основе их особенностей. Язык можно разделить на несколько парадигм. Парадигмы программирования в основном делятся на два типа: императивную и декларативную.
2. Императивный язык
В языке императивного типа программисты инструктируют машину Как выполнять задачу, записывая пошаговые инструкции, включая переменные, условия, циклы и т. д.
Пример. Когда вы голодны, вы идете на кухню и готовите себе еду, добавляя необходимые ингредиенты и следуя инструкциям по приготовлению.
Пример программирования. Такие языки, как C, C++ и Java, относятся к императивной парадигме. Например: вы хотите найти элемент в массиве чисел, вы пишете все инструкции для выполнения поиска, такие как ввод данных, повторение массива, проверка, найден ли элемент или нет, возврат результатов и т. д.
// Written in Java // Function to search for a specific element in the array boolean search(int array[], int key) { for (int i = 0; i < array.length; i++) { if (array[i] == key) { return true; } } return false; }
3. Декларативный язык
В декларативном типе языка программисты инструктируют машину Что выполнять без каких-либо инструкций. Программист запрашивает желаемый результат.
Пример. Когда вы голодны, вы заказываете еду в ресторане. Вы не знаете, как готовится еда. Вы просто попросили желаемую еду, и ее доставили вам.
Пример программирования.SQL (язык структурированных запросов) принадлежит к декларативному языку.
Например: SELECT * FROM EMPLOYEE
в этом запросе вы только что упомянули, что вам нужны все записи о сотрудниках из таблицы EMPLOYEE. Однако вы не указали пошаговые инструкции и логику для извлечения данных из таблицы. Вы не знаете лежащую в основе логику, используемую для извлечения записей из базы данных.
4. Императивные классификации
Императивная парадигма подразделяется на два типа: процедурная и объектно-ориентированная.
4.1 Процедурно-ориентированный
Процедурный язык разбивает задачу на набор процедур (также известных как подпрограммы, функции) для выполнения задачи. Он поддерживает глобальные переменные для управления состоянием системы. C, BASIC, ALGOL и т. д. относятся к процедурно-ориентированной парадигме.
Пример программы: линейный поиск в C.
int main() { int array[100], key, c, n, found_index; printf("Enter number of elements in array: "); scanf("%d", &n); printf("Enter %d integer(s): ", n); for (c = 0; c < n; c++) { scanf("%d", &array[c]); } printf("Enter a number to search:"); scanf("%d", &key); found_index = linear_search(array, n, key); if (found_index >= 0) { printf("%d is present at location %d.\n", key, found_index); } else { printf("%d not present", key); } return 0; } int linear_search(int a[], int n, int key) { long c; for (c = 0 ; c < n ; c++) { if (a[c] == key) return c; } return -1; }
4.2 Объектно-ориентированный
Объектно-ориентированный язык разбивает задачу на объекты, которые раскрывают поведение (метод) и данные (член или атрибут), объекты взаимодействуют друг с другом с помощью методов передачи сообщений для выполнения данной задачи. C++, Java, C#, Kotlin и т. д. относятся к объектно-ориентированной парадигме.
Пример:линейный поиск в Java.
class ArraySearch { int[] array; public ArraySearch(int[] array) { this.array = array; } public int linearSearch(int key) { for (int i = 0; i < this.array.length; i++) { if (this.array[i] == key) { return i; } } return -1; } } class MainApplication { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Enter number of elements in array: "); int n = sc.nextInt(); int[] array = new int[n]; System.out.printf("Enter %d integer(s): ", n); for (int i = 0; i < n; i++) { array[i] = sc.nextInt(); } System.out.printf("Enter a number to search:"); int key = sc.nextInt(); ArraySearch arraySearch = new ArraySearch(array); int result = arraySearch.linearSearch(key); if (key >= 0) { System.out.printf("%d present at %d location", key, result); } else { System.out.printf("%d not present", key); } } }
5. Декларативные классификации
Императивная парадигма далее в основном подразделяется на два типа: функциональная и логическая.
5.1 Функциональность
Функциональное программирование содержит только функции без изменения состояния или данных. Это означает, что нет глобальных данных/переменных. Составление и применение функции является основной движущей силой этой парадигмы. Функция может принимать в качестве аргумента другую и возвращать новую функцию. Первым высокоуровневым языком функционального программирования, разработанным в 1950-х годах, был LISP. Этот язык заложил основу для многих характеристик современных языков функционального программирования.
Пример:программа факториала с использованием LISP
(defun factorial (num) (cond ((zerop num) 1) (t ( * num (factorial (- num 1)))) ) ) (setq n 6) (format t "~% Factorial ~d is: ~d" n (factorial n))
5.2 Логика
Логическая парадигма основана на математической логике, в которой операторы программы выражают факты и правила. Правила записываются в виде логических предложений. Механизм выводит ответ на запрос пользователя, используя методы унификации и поиска с возвратом. Набор фактов и правил образует базу знаний, позволяющую системе рассуждать. Prolog, Datalog и т. д. являются примерами логического программирования. Логическое программирование помогает в таких основных областях, как обработка естественного языка, управление базами данных, сопоставление с образцом, доказательство теорем и прогнозный анализ.
Пример:программа на Прологе для определения совпадения отношений двух людей на основе их базы знаний об интересе к еде.
/* Facts */ boy(tom). /* read as 'tom is a boy' */ boy(bob). boy(jerry). girl(alice). /* read as 'alice is a girl' */ girl(lili). nonveg(chicken). /* read as 'chicken is a nonveg' */ nonveg(fish). veg(broccoli). /* read as 'broccoli is a veg' */ veg(apple). eat(tom, chicken). /* tom eats chicken */ eat(tom, apple). /* tom eats apple */ eat(bob, broccoli). eat(bob, apple). eat(alice, chicken). eat(lili, apple). eat(lili, broccoli). eat(jerry, apple). human(X) :- boy(X) ; girl(X). /* X is a human being if X is either boy or girl */ is_vegetarian(X) :- human(X), eat(X, Y), veg(Y). is_nonvegetarian(X) :- human(X), eat(X, Y), nonveg(Y) /* Rules */ nonveg(X) :- food(X). /* if X is a nonveg, then X is a food */ veg(X) :- food(X). /* if X is a veg, then X is a food */ /* X likes if both are vegetarian or both are non vegetarian*/ match(X, Y) :- (is_vegetarian(X), is_vegetarian(Y)) ; (is_nonvegetarian(X), is_nonvegetarian(Y)) /* Query check if bob likes alice */ ?-match(bob, alice) /* Query check if bob likes lili*/ ?-match(bob, lili)