Просмотр содержимого документа
«Особенности функционального программирования»
Особенности функционального программирования
Выполнила:
студентка группы МДИ-117
Уварова О.В
Функциональное программирование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании)
Определение понятия
Из истории
Традиционное программирование родилось в 40-х годах 20 века, когда велась разработка первых электронно-вычислительных машин (ЭВМ).
Его основой послужила концепция фон Неймана о хранимой программе автоматических вычислений по заданному алгоритму.
Из истории
В конце 50-х годов 20 века появились первые языки программирования высокого уровня, в них уже произошел существенный отход от принципов фон Неймана.
Во-первых, программа раз и навсегда была отделена от данных.
Во-вторых, во время исполнения программы ее текст оставался неизменным, а организация циклического повторения команд в ходе исполнения программы была возложена на систему 5 программирования, которая уже и должна была перевести (транслировать) текст программы в систему команд компьютера так, чтобы ее исполнение происходило в соответствии с написанным текстом.
Из истории
Почти одновременно с первым "традиционным" языком программирования – Фортраном появился еще один совершенно непохожий на него язык программирования – Лисп, для которого последовательность выполнения отдельных частей написанной программы была несущественной. Ветвь программирования, начатая созданием Лиспа, понемногу развивалась с начала 60-х годов 20 века и привела к появлению целой плеяды очень своеобразных языков программирования, которые удовлетворяли всем требованиям, необходимым для исполнения программ несколькими параллельными процессорами.
1. Алгоритмы, записанные с помощью этих языков, допускают сравнительно простой анализ и формальные преобразования программ.
2. Отдельные части программ могут исполняться независимо друг от друга. Языки, обладающие такими замечательными свойствами – это и есть языки функционального программирования.
Особенности функционального программирования
Основной особенностью функционального программирования, определяющей как преимущества, так и недостатки данной парадигмы, является то, что в ней реализуется модель вычислений без состояний .
1. Вызов функций является единственной разновидностью действий, выполняемых в функциональной программе
2. В алгоритмических языках программа является последовательностью операторов, вызовов процедур в соответствии с алгоритмом. В функциональном программировании программа состоит из вызовов функций (рис. 1) и описывает то, что нужно делать и что собой представляет результат решения, а не как нужно действовать для получения результата.
Особенности функционального программирования
Особенности функционального программирования
3. Основными методами программирования являются суперпозиция функций и рекурсия .
4. Функциональное программирование - есть программирование, управляемое данными. В строго функциональном языке однажды созданные (введенные) данные не могут быть изменены!
5. В алгоритмических языках с именем переменной связана некоторая область памяти, соответствие строго сохраняется в течение всего времени выполнения программы. В функциональном программировании переменная обозначает только имя некоторой структуры, имена символов, переменных, списков, функций и других объектов не закреплены предварительно за какими-либо типами данных. В ФП одна и та же переменная в различные моменты времени может представлять различные объекты.
Особенности функционального программирования
6. В языках функционального программирования программа и обрабатываемые ею данные имеют единую списочную форму представления.
7. Функциональное программирование предполагает наличие функционалов – функций, аргументы и результаты которых могут быть функциями.
Всякий язык функционального программирования предполагает наличие ядра, называемого строго функциональным языком.
Сильные стороны
Повышение надёжности кода
Удобство организации модульного тестирования
Возможности оптимизации при компиляции
Возможности параллелизма
Недостатки
Вытекают из его особенностей.
Отсутствие присваиваний и замена их на порождение новых данных приводят к необходимости постоянного выделения и автоматического освобождения памяти, поэтому в системе исполнения функциональной программы обязательным компонентом становится высокоэффективный сборщик мусора.
Нестрогая модель вычислений приводит к непредсказуемому порядку вызова функций, что создает проблемы при вводе-выводе, где порядок выполнения операций важен.