Опубликован: 19.03.2004 | Уровень: специалист | Доступ: платный
Лекция 15:

Парадигмы программирования

< Лекция 14 || Лекция 15: 123
Аннотация: В данной лекции подводится итог изучению основ ФП и особенностей его применения. Анализируются наиболее очевидные закономерности применения языков программирования, отражающие расширение класса решаемых задач, прогресс элементной базы и рост квалификации программистов. Рассматриваются ключевые моменты развития парадигм программирования и анализируются закономерности в процессе реализационного освоения новых областей обработки информации. Приведен небольшой обзор парадигм программирования. Для желающих поэкспериментировать дана справка о реализационных особенностях GNU Clisp [6, 7].
Ключевые слова: алгоритмический подход, императивность, строгая функция, функция высших порядков, универсальная функция, функциональное моделирование, парадигма, программотехника, деструктивная функция, ООП, логика уточнения задач, формализация решений, процесс исполнения, полнота системы функций, универсальность определений, синтаксически управляемая обработка, метаязык, Pure Lisp, процедурность, абстрактная машина, абстрактный синтаксис, тупиковая ситуация, системное программирование, концептуальный минимум, потенциальный максимум, практичный компромисс, приемлемый баланс, класс решаемых, Лисп, чистый Лисп, функциональная полнота, Lisp 1.5, Common Lisp, хэш-таблица, GNU Clisp, cmucl, Лисп-процессор, scheme, CLOS, autolisp, множественные объявления, прикладное программирование, теоретическое программирование, Sisal, формальная модель, структурированное программирование, Алгол, теория программирования, аппликативный язык, haskell, категории функций, машинно-ориентированное программирование, логическое программирование, трансформационное программирование, высокопроизводительное программирование, модульное программирование, эвристика, параллельный процесс, символьная обработка, порожденный процесс, оптимизация программы, частичность вычислений, отложенные действия, экстенсивность, исследовательский подход, человеческий фактор, компонентное программирование, DCOM, информационная среда

Парадигмы программирования

Итоги и выводы

Согласно рекомендациям специалистов по обучению информатике, функциональное программирование (ФП) входит в число основных подходов к изучению программирования в университетах (наряду с алгоритмическим , императивным , аппаратным, объектным и обзорно-ознакомительным). В целом средства и методы ФП образуют два слоя. Глубинный слой — локальное программирование строгих функций , безотходных структур данных, обратимых контекстов, регулярных отображений, корректных функций высших порядков, универсальных функций и средств управления вычислениями. Внешний слой — функциональное моделирование широкого спектра парадигм программирования , обеспечивающее производственное программирование прототипами, дающее подход к оценке функциональности информационных систем и их компонентов. Глубинный слой дает концептуальную основу для применения и определения функций во всей полноте этого понятия, для его развития и выбора реализационных решений при разработке систем ФП, включая привлечение стандартной программотехники и деструктивных функций. Внешний слой открывает перспективы повышения уровня используемых конструкций на базе моделирования основных механизмов системного, низкоуровневого, оптимизационного, логического, высокопроизводительного, ООП и других подходов к разработке программ. Такие подходы расширяют понятие "функция", варьируют правила применения и реализации функций, конкретизируют расширения и специализацию систем ФП.

Фактически термин "функциональное программирование" используется при объединении в систему методов решения классов задач, обладающих исследовательскими аспектами, что влечет за собой необходимость развития полученных решений . Система предполагает общую логику уточнения решаемых задач и формализацию обобщенных решений на основе специально выбранных базовых конструкций.

  1. Базовые конструкции определяются как строгие функции .
  2. Общая логика развития задачи сводится к процессу раскрутки полного решения как набора шагов по расширению набора функций и повышению их потенциала использованием отображений , что обеспечивается надежными средствами языка функционального программирования (ЯФП) и быстро отлаживается на базе систем ФП (СФП), приспособленных к интерпретации программ.
  3. При необходимости выполняются формальные преобразования программ , (например, компиляция), обеспечивающие улучшение эксплуатационных характеристик, связанных с процессами исполнения программ.
  4. Важный критерий качества ФП — полнота системы функций и универсальность определений , дающая возможность синтаксически управляемой обработки данных с помощью функций высших порядков (ФВП), что существенно повышает надежность программирования.
  5. Разработка ИС средствами ФВП успешно выполняет роль прототипа для реализации другими, более распространенными средствами.

Оттолкнувшись от интуитивного представления о понятии "функция", мы для начала ограничились однозначными функциями , но разрешили предельно широкое толкование понятия "значение", включающее понятие "структура данных".

  1. Ориентируясь на рекурсивные определения функций , мы ввели несложную схему, достаточно удобную для построения формул, задающих функциональные определения. При этом отмечено качественное различие между элементарными функциями, задаваемыми неформально вне метаязыка, и остальными функциями, определяемыми формулами языка, использующими обозначения элементарных функций. В качестве примера рассмотрен элементарный Лисп .
  2. Затем было конкретизировано основное множество значений функций как множество списков и атомов, на котором определены алгебра и логика, достаточные для обработки и анализа таких значений. Представления функций отображены в это множество и определена универсальная функция , по списочному представлению функции и ее аргументов строящая результат.
  3. Рассмотрены примеры структур данных, полезных при реализации списков, интерпретируемых как функции (стеки, пары, блоки, односвязные списки, расстановочные таблицы и др.).
  4. Изучено расширение функционального языка, достаточное для императивно- процедурного стиля программирования, что обеспечивает помимо нисходящей методики разработки программ и восходящую, более естественную для несложных задач.
  5. Определена абстрактная машина, содержащая реализацию элементарных функций языка и поддерживающая интерпретацию функционального языка, и проанализирован компилятор с абстрактного синтаксиса функционального языка программирования на языково-ориентированную абстрактную машину.

Таким образом, завершена нисходящая линия определения языка функционального программирования, позволяющая во всех деталях представлять один возможный процесс применения функций на уровне интуитивных понятий, структур данных и машинного кода. Затем была выполнена серия обобщений представления о процессах применения функций, т.е. осуществлена восходящая линия определения функционального языка.

Этот процесс не всегда удовлетворителен по эффективности с разных точек зрения. Повышение эффективности обычно требует развития размерности пространства, в котором рассматриваются оптимизируемые понятия.

  1. Исследованы возможные направления развития как по вертикали, так и по горизонтали. Для этого изучены традиционные решения по организации структур данных и систем программирования для поддержки функционального программирования, а также списки свойств атомов и деструктивные функции.
  2. Неоднозначные функции могут рассматриваться через понятие отношения. При изучении идей ООП показано, что идеи эти весьма близки и легко поддерживаются базовыми средствами функционального программирования. Достаточно лишь продемонстрировать технику работы с классами и экземплярами объектов и способы определения методов их обработки.
  3. Рассмотрено понятие вариантов или альтернативных процессов, успешного выполнения одного из которых достаточно для построения результата функции. Реализация таких процессов потребовала уточнить определение абстрактной машины, чтобы обеспечить сохранение состояния памяти для выхода из тупиковых ситуаций. Такое же уточнение необходимо для обеспечения диагностичности.
  4. Представлены методы управления процессами вычисления функций и средства, обеспечивающие выбор времени выполнения отдельных шагов процесса, соответствующих конкретным формулам. Организация таких процессов обеспечивается совместным хранением данных и рецептов их получения, что заодно снимает требование конечности представления данных. Достаточно конечности рецепта. Техника работы с рецептами, заключающаяся в приостановке и возобновлении программ, не требует специальных реализационных механизмов.
  5. Функции высших порядков показаны как инструмент естественной модуляризации программ, например, техникой продолжений, достаточной для достижения подобия представления функций и обрабатываемых ими типов данных. Иллюстрация такого подобия на задаче построения синтаксического анализатора позволяет замкнуть изученные механизмы на исходный язык программирования.
< Лекция 14 || Лекция 15: 123
Дарья Федотова
Дарья Федотова
Сергей Березовский
Сергей Березовский

В рамках проф. переподготовки по программе "Программирование"

Есть курсы, которые я уже прошел. Но войдя в курс я вижу, что они не зачтены (Язык Ассемблера и архитектура ЭВМ, Программирование на С++ для профессионалов). Это как?

Алина Ленкова
Алина Ленкова
Россия, Ставрополь, СФ МГУПИ, 2014
Валерий Ромашов
Валерий Ромашов
Россия