- Реферат о парадигмах программирования
- Парадигмы программирования
- Обзор парадигм
- Структурное программирование
- Объектно-ориентированное программирование
- Функциональное программирование
- Заключение
- Основные парадигмы программирования
- Парадигма объектно-ориентированного программирования
- Парадигма функционального программирования
- Процедурная парадигма программирования
- Парадигма декларативного программирования
- Логическая парадигма программирования
- Заключение
Реферат о парадигмах программирования
Программирование — раздел информатики, изучающий теорию, методы и технологию разработки программного обеспечения для электронных вычислительных машин (ЭВМ). В узком смысле программирование — этап решения какой-либо задачи с помощью ЭВМ, ограниченный разработкой и отладкой программ, или же собственно процесс создания программ.
В настоящее время программирование стало одной из наиболее рентабельных областей научного прогресса (объем продаж программных продуктов превышает аналогичные показатели для собственно ЭВМ — технических устройств, в которых они применяются, составив в 1988 г. только для США приблизительно 25 млрд. долларов). Вся современная стратегия использования ЭВМ — происходящий и углубляющийся процесс их широкого использования почти во всех сферах человеческой деятельности — наряду с достижениями микроэлектроники базируется на успехах программирования, которое развивается в трех взаимосвязанных направлениях. Теоретическое программирование изучает принципы и способы построения программ, имея конечной целью автоматический (с помощью ЭВМ) синтез программ для решения любых задач; системное программирование направлено на создание комплексов программ длительного и массового использования, обеспечивающих пользователям максимум удобств и возможностей (с помощью посредников или самостоятельно) для применения вычислительной техники при решении основного множества универсальных задач; прикладное программирование обслуживает конкретные (в т.ч. уникальные или узкоспециальные) потребности в применении ЭВМ представителями различных областей науки и практики.
Наиболее очевидный прогресс в программировани достигнут в сфере разработки системного программного обеспечения. Его основа — комплекс программ, постоянно находящихся в памяти ЭВМ для осуществления взаимосвязи человека с машиной и управления различными ее устройствами (так называемые операционные системы). Знание возможностей и особенностей операционных систем является основой успешного применения ЭВМ в интересах пользователя любой специальности.
Метафоры (парадигмы) программирования
Паради́гма программи́рования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.
Важно отметить, что парадигма программирования не определяется однозначно языком программирования; практически все современные языки программирования в той или иной мере допускают использование различных парадигм (мультипарадигмальное программирование). Так, на языке Си, который не является объектно-ориентированным, можно работать в соответствии с принципами объектно-ориентированного программирования, хотя это и сопряжено с определёнными сложностями; функциональное программирование можно применять при работе на любом императивном языке, в котором имеются функции, и т. д.
Также важно отметить, что существующие парадигмы зачастую пересекаются друг с другом в деталях, поэтому можно встретить ситуации, когда разные авторыупотребляют названия из разных парадигм, говоря при этом, по сути, об одном и том же явлении.
Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:
Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.
Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.
Парадигма программирования как исходная концептуальная схема постановки проблем и их решения является инструментом грамматического описания фактов, событий, явлений и процессов, возможно, не существующих одновременно, но интуитивно объединяемых в общее понятие.
Парадигмы программирования
Дисциплину, которая в дальнейшем стала называться программированием, зародил Алан Тьюринг в 1938 году. В 1945 он уже писал полноценные программы, которые работали на реальном железе.
Первый компилятор был придуман в 1951 году Грейс Хоппер (бабушка с татуировкой Кобола). Потом начали создаваться языки программирования.
Обзор парадигм
Существует три основных парадигмы: структурное, объектно-ориентированное и функциональное. Интересно, что сначала было открыто функциональное, потом объектно-ориентированное, и только потом структурное программирование, но применяться повсеместно на практике они стали в обратном порядке.
Структурное программирование было открыто Дейкстрой в 1968 году. Он понял, что goto – это зло, и программы должны строиться из трёх базовых структур: последовательности, ветвления и цикла.
Объектно-ориентированное программирование было открыто в 1966 году.
Функциональное программирование открыто в 1936 году, когда Чёрч придумал лямбда-исчисление. Первый функциональный язык LISP был создан в 1958 году Джоном МакКарти.
Каждая из этих парадигм убирает возможности у программиста, а не добавляет. Они говорят нам скорее, что нам не нужно делать, чем то, что нам нужно делать.
Все эти парадигмы очень связаны с архитектурой. Полиморфизм в ООП нужен, чтобы наладить связь через границы модулей. Функциональное программирование диктует нам, где хранить данные и как к ним доступаться. Структурное программирование помогает в реализации алгоритмов внутри модулей.
Структурное программирование
Дейкстра понял, что программирование – это сложно. Большие программы имеют слишком большую сложность, которую человеческий мозг не способен контролировать.
Чтобы решить эту проблему, Дейсктра решил сделать написание программ подобно математическим доказательствам, которые также организованы в иерархии. Он понял, что если в программах использовать только if, do, while, то тогда такие программы можно легко рекурсивно разделять на более мелкие единицы, которые в свою очередь уже легко доказуемы.
С тех пор оператора goto не стало практически ни в одном языке программирования.
Таким образом, структурное программирование позволяет делать функциональную декомпозицию.
Объектно-ориентированное программирование
ООП – это парадигма, которая характеризуется наличием инкапсуляции, наследования и полиморфизма.
Инкапсуляция позволяет открыть только ту часть функций и данных, которая нужна для внешних пользователей, а остальное спрятать внутри класса.
Однако в современных языках инкапсуляция наоборот слабее, чем была даже в C. В Java, например, вообще нельзя разделить объявление класса и его определение. Поэтому сказать, что современные объектно-ориентированные языки предоставляют инкапсуляцию можно с очень большой натяжкой.
Наследование позволяет делать производные структуры на основе базовых, тем самым давая возможность осуществлять повторное использование этих структур. Наследование было реально сделать в языках до ООП, но в объектно-ориентированных языках оно стало значительно удобнее.
Наконец, полиморфизм позволяет программировать на основе интерфейсов, у которых могут быть множество реализаций. Полиморфизм осуществляется в ОО-языках путём использования виртуальных методов, что является очень удобным и безопасным.
Полиморфизм – это ключевое свойство ООП для построения грамотной архитектуры. Он позволяет сделать модуль независимым от конкретной реализации (реализаций) интерфейса. Этот принцип называется инверсией зависимостей, на котором основаны все плагинные системы.
Инверсия зависимостей так называется, что она позволяет изменить направление зависимостей. Сначала мы начинаем писать в простом стиле, когда высокоуровневые функции зависят от низкоуровневых. Однако, когда программа начинает становиться слишком сложной, мы инвертируем эти зависимости в противоположную сторону: высокоуровневые функции теперь зависят не от конкретных реализаций, а от интерфейсов, а реализации теперь лежат в своих модулях.
Любая зависимость всегда может быть инвертирована. В этом и есть мощь ООП.
Таким образом, между различными компонентами становится меньше точек соприкосновения, и их легче разрабатывать. Мы даже можем не перекомпилировать базовые модули, потому что мы меняем только свой компонент.
Функциональное программирование
В основе функционального программирования лежит запрет на изменение переменных. Если переменная однажды проинициализирована, её значение так и остаётся неизменным.
Какой профит это имеет для архитектуры? Неизменяемые данные исключают гонки, дедлоки и прочие проблемы конкурентных программ. Однако это может потребовать больших ресурсов процессора и памяти.
Применяя функциональный подход, мы разделяем компоненты на изменяемые и неизменяемые. Причём как можно больше функциональности нужно положить именно в неизменяемые компоненты и как можно меньше в изменяемые. В изменяемых же компонентах приходится работать с изменяемыми данными, которые можно защитить с помощью транзакционной памяти.
Интересным подходом для уменьшения изменяемых данных является Event Sourcing. В нём мы храним не сами данные, а историю событий, которые привели к изменениям этих данных. Так как в лог событий можно только дописывать, это означает, что все старые события уже нельзя изменить. Чтобы получить текущее состояние данных, нужно просто воспроизвести весь лог. Для оптимизации можно использовать снапшоты, которые делаются, допустим, раз в день.
Заключение
Таким образом, каждая из трёх парадигм ограничивает нас в чём-то:
Структурное отнимает у нас возможность вставить goto где угодно.
ООП не позволяет нам доступаться до скрытых членов классов и навязывает нам инверсию зависимостей.
Итак, что такое парадигма программирования? Парадигма — это совокупность правил, принципов и методик, которые применяются при написании программ. Парадигма определяет стиль написания программы и никак не связана с каким-то конкретным языком программирования. В одной парадигм е п рограммный код могут писать разные языки программирования , т акже один язык может писать код в различных парадигмах.
Если представить условную иерархию, тогда парадигмы программирования будут на самой вершине. Именно они будут определят ь п равила написания, свойства, шаблоны, паттерны, структуру, архитектуру программы и др. То ест ь и значально идет парадигма, которая влечет все остальные собственные составляющие.
Основные парадигмы программирования
Парадигма объектно-ориентированного программирования
Парадигма функционального программирования
Парадигма функционального программирования заняла почетное второе место по популярности после объектно-ориентированного программирования. Главная идея такой модели заключается в том, что программа создается под одну конкретную задачу, поэтому от нее ждут конкретный результат.
Программисты, которые отдельно используют ООП или ФП, часто спорят о том, какая из этих двух парадиг м лучше. Но невозможно выделить лучшую, потому что выбор парадигмы зависит от требований к программе и языка, на котором она будет писаться. Язык, который был разработан для функционального программирования , — Haskel l . Однак о н еплохо с этой парадигмой справляется Python.
В ООП основной компонент программы — объект. В функциональном программировании — функция. В функциях прописывается, какую информацию она должна получить в качестве входящего значения, а какую должна отдать. Функции могут быть вложенными — это когда одна функция является аргументом другой функции.
Программы, написанные по такой модели, обычно легче тестировать и читать, если сравнивать с ООП.
Процедурная парадигма программирования
Процедурная парадигма программирования основывается на процедурах. Процедура — это инструкция, которая используется для воздействи я на состояние памяти. После исполнения всего набора инструкци й п рограмма выдает результат.
Процедурное программирование не так распространено, как первые две парадигмы, однако поддерживается в таких популярных языках , как С и Go. Такая парадигма по своей простоте схо ж а с функциональным программированием. Однак о п рограммы , написанные в такой модели , сложнее масштабировать.
Парадигма декларативного программирования
Логическая парадигма программирования
Заключение
- структурное программирование,
- компонентно-ориентированное,
- прототипно-ориентированное,
- агентно-ориентированное,
- аппликативное,
- обобщенное,
- доказательное,
- порождающее программирование,
- и др.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.