Принципы функционального программирования: программирование при помощи функций, функциональность, основные свойства функциональных языков, язык программирования Лисп, рекурсия.
Одним из путей развития декларативного стиля программирования стал функциональный подход, возникший после создания языка LISP.
Отличительной особенностью данного подхода является то, что любая программа, написанная на таком языке, может интерпретироваться как функция с одним или несколькими аргументами. Такой подход дает возможность прозрачного моделирования текста программ математическими средствами, а значит, весьма интересен с теоретической точки зрения.
Сложные программы при таком подходе строятся посредством агрегирования функций. При этом текст программы представляет собой функцию, некоторые аргументы которой можно также рассматривать как функции. Таким образом, повторное использование кода сводится к вызову ранее описанной функции, структура которой, в отличие от процедуры императивного языка, математически прозрачна.
Более того, типы отдельных функций, используемых в функциональных языках, могут быть переменными. Таким образом обеспечивается возможность обработки разнородных данных (например, упорядочение элементов списка по возрастанию для целых чисел, отдельных символов и строк) или полиморфизм.
Еще одним важным преимуществом реализации языков функционального программирования является автоматизированное динамическое распределение памяти компьютера для хранения данных. При этом программист избавляется от обязанности контролировать данные, а при необходимости может запустить функцию «сборки мусора» – очистки памяти от тех данных, которые больше не потребуются программе (обычно этот процесс периодически инициируется компьютером).
Напомню, что важнейшей характеристикой функционального подхода является то обстоятельство, что всякая программа, разработанная на языке функционального программирования, может рассматриваться как функция, аргументы которой, возможно, также являются функциями.
Функцией в языке программирования называется конструкция этого языка, описывающая правила преобразования аргумента (так называемого фактического параметра) в результат.
Ранние языки функционального программирования, которые берут свое начало от классического языка LISP (LISt Processing), были предназначены, для обработки списков, т.е. символьной информации. При этом основными типами были атомарный элемент и список из атомарных элементов, а основной акцент делался на анализе содержимого списка.
Близость к математической формализации и изначальная функциональная ориентированность послужили причиной следующих преимуществ функционального подхода:
1. простота тестирования и верификации программного кода на основе возможности построения строгого математического доказательства корректности программ;
2. унификация представления программы и данных (данные могут быть инкапсулированы в программу как аргументы функций, означивание или вычисление значения функции может производиться по мере необходимости);
3. безопасная типизация: недопустимые операции с данными исключены;
4. динамическая типизация: возможно обнаружение ошибок типизации во время выполнения (отсутствие этого свойства в ранних языках функционального программирования может приводить к переполнению оперативной памяти компьютера);
5. независимость программной реализации от машинного представления данных и системной архитектуры программы (программист сосредоточен на деталях реализации, а не на особенностях машинного представления данных).
Напомним, что под алфавитом понимается множество символов, допустимых в нотации той или иной формализации.
Утверждения устанавливают правила образования терминальных символов математической теории.
Под аксиомами понимаются элементарные утверждения, которые считаются истинными без необходимости доказательства истинности.
Правила вывода определяют правила преобразования одних символов (объектов), исследуемых в теории, в другие объекты.
Рассмотрим алфавит комбинаторной логики.
Допускаются элементы четырех видов:
1. константы;
2. переменные;
3. комбинаторные выражения (или, иначе, термы);
4. специальные символы.
Под рекурсивным определением объекта (как в абстрактном теоретическом смысле, так и в аспекте практического программирования) будем понимать такое определение, которое содержит внутри себя ссылку на определяемый объект.
- Программа государственного экзамена
- Пояснительная записка
- Основные задачи государственного экзамена
- Содержание государственного экзамена
- Структура экзаменационного билета
- Требования к ответу на вопросы экзаменационного билета
- Критерии оценки ответа
- Программа
- I. Общепрофессиональные дисциплины
- Раздел 1. Программирование на языке высокого уровня
- Динамический тип данных, линейные динамические структуры данных: стек, очередь, списки; нелинейные динамические структуры данных: мультисписки, деревья.
- Процедуры и функции: описание, вызов, передача параметров, программирование рекурсивных алгоритмов.
- Раздел 2. Компьютерная графика
- Раздел 3. Организация эвм и систем
- Архитектура эвм, периферийные устройства, организация ввода-вывода информации.
- Системы эвм: вычислительные системы и сети, сопроцессоры, мультипроцессорные вычислительные системы, матричные и конвейерные вычислительные системы, связные устройства, модемы, протоколы обмена.
- Раздел 4. Операционные системы
- Виртуальная память: страничная, сегментная, сегментно-страничная организация памяти, коллективное использование и защита информации; файлы, отображаемые в память.
- Файловая система ос: состав, управление, типы файловых систем; логическая и физическая организация файла, методы доступа, операции над файлами, отображаемые файлы.
- Раздел 5. Базы данных
- Управление транзакциями, сериализация транзакций (синхронизационные захваты, метод временных меток), изолированность пользователей.
- Архитектура "клиент-сервер": открытые системы, клиенты и серверы локальных сетей, системная архитектура "клиент-сервер", серверы баз данных.
- Распределенные бд: разновидности распределенных систем, распределенная субд System r, интегрированные или федеративные системы и мультибазы данных.
- Раздел 6. Сети эвм и телекоммуникации
- Передача дискретных данных: линии связи, методы передачи дискретных данных на физическом уровне, методы передачи данных канального уровня, методы коммутации.
- Средства анализа и управления сетями: функции и архитектура систем управления сетями, стандарты систем управления, мониторинг и анализ локальных сетей.
- Раздел 7. Методы и средства защиты компьютерной информации
- Безопасность компьютерных сетей: протоколы сетевой безопасности, программно-аппаратные комплексы защиты сетей.
- Безопасность современных ос и программных комплексов, вредоносные программы, системы обнаружения вторжений, комплексный подход к проектированию и анализу защищенных ис.
- Раздел 8. Системное программирование
- Организация ячеек памяти, регистры, форматы команд.
- Ассемблер: основные понятия, директивы, команды. Условный и безусловный переходы. Циклы. Массивы. Процедуры. Упакованные данные. Структуры.
- Защищенный режим процессора Intel 80386: страничная адресация, переключение контекста, использование возможностей защищенного режима различными ос.
- Раздел 9. Структуры и алгоритмы обработки данных
- Абстрактный тип данных. Линейные и нелинейные структуры данных. Стек, очередь, списки, деревья, графы.
- Алгоритмы сортировки: методы внутренней и внешней сортировки, анализ сложности и эффективности алгоритмов сортировки.
- Алгоритмы поиска: последовательный, бинарный, интерполяционный поиск, использование деревьев в задачах поиска; хеширование с открытой и закрытой адресацией; алгоритмы поиска подстроки в строке.
- Раздел 10. Функциональное и логическое программирование
- Принципы функционального программирования: программирование при помощи функций, функциональность, основные свойства функциональных языков, язык программирования Лисп, рекурсия.
- Функционалы: функциональное значение функции, способы композиции функций, функции более высокого порядка.
- Раздел 11. Объектно-ориентированное программирование
- Параметрический полиморфизм: шаблонные классы и шаблонные функции - назначение, параметризованные типы данных, синтаксис и семантика.
- Раздел 12. Теория вычислительных процессов
- Элементы теории вычислимости: вычислимость и разрешимость, интуитивное и точное понятие алгоритма, вычислимые функции, машина Тьюринга, массовые алгоритмические проблемы.
- Раздел 13. Теория языков программирования и методы трансляции
- Раздел 14. Архитектура вычислительных систем
- Раздел 15. Технология разработки программного обеспечения
- 1 Область применения
- Структуры данных: несвязанные, с неявными связями, с явными связями; иерархические модели Джексона-Орра; моделирование данных – диаграммы «сущность-связь» (erd); метод Баркера; метод idef1.
- Разработка структуры по при объектом подхода
- Раздел 16. Человеко-машинное взаимодействие
- Типы пользовательских интерфейсов и этапы их разработки, психофизические особенности человека, связанные с восприятием, запоминанием и обработкой информации.
- Раздел 17. Системы искусственного интеллекта
- Системы распознавания образов (идентификации): обучение распознаванию образов, геометрический и структурный подходы, гипотеза компактности, адаптация и обучение.
- Эволюционные методы поиска решений: метод группового учета аргументов, генетический алгоритм.
- Экспертные системы: классификация и структура; инструментальные средства проектирования, разработки и отладки; этапы разработки; примеры реализации.
- Раздел 18. Проектирование информационных систем
- Архитектуры реализации корпоративных информационных систем на платформах Sun, Microsoft, Linux.
- Раздел 19. Сетевые операционные системы
- Основные концепции ос семейства Windows nt: особенности установки, конфигурирования, администрирования, оптимизации производительности.
- Администрирование удаленного доступа к сетям Windows, взаимодействие с сетями tcp/ip, взаимодействие с сетями NetWare, средства просмотра сетевых ресурсов.
- Основные концепции ос unix/Linux, средства графического интерфейса пользователей, основные механизмы и компоненты ядра, программирование в среде unix /Linux.
- Основные концепции ос NetWare, проектирование Novell Directory Services, поддержка ос NetWare.
- Администрирование ос NetWare, дополнительные средства ос NetWare: средства защиты nds для nt, встроенные утилиты администрирования сети.
- Раздел 20. Комплексные программные платформы
- Системы планирования ресурсов предприятия (erp). Основные понятия, принципы, подсистемы.
- Методология внедрения erp-систем.
- Раздел 21. Программное обеспечение распределенных систем и сетей
- Раздел 22. Разработка корпоративного web-узла
- Перечень литературы
- Перечень основных стандартов в области обеспечения жизненного цикла и качества программных средств