26
Ю У р Г У М ехМ ат С П Введение в предмет Лекция 1 Парадигмы и стили программирования

Введение в предмет

  • Upload
    aysel

  • View
    76

  • Download
    0

Embed Size (px)

DESCRIPTION

Введение в предмет. Лекция 1 Парадигмы и стили программирования. Исторический очерк Стили программирования Понятие парадигмы программирования Основные виды парадигм Особенности функционального и логического программирования. Содержание. Обратимся к истории…. - PowerPoint PPT Presentation

Citation preview

Page 1: Введение в предмет

Ю У р Г У

МехМат

С П

Введение в предмет

Лекция 1Парадигмы и стили программирования

Page 2: Введение в предмет

Ю У р Г У

МехМат

С ПСодержание2

Исторический очерк Стили программирования Понятие парадигмы программирования Основные виды парадигм Особенности функционального и логического программирования

Page 3: Введение в предмет

Ю У р Г У

МехМат

С ПОбратимся к истории…3

Page 4: Введение в предмет

Ю У р Г У

МехМат

С П

Программирование для математиков…

4

Page 5: Введение в предмет

Ю У р Г У

МехМат

С ПБурное развитие языков…5

Page 6: Введение в предмет

Ю У р Г У

МехМат

С ПВычисление факториала6

Page 7: Введение в предмет

Ю У р Г У

МехМат

С ПИмперативный стиль7

Традиционно под программой понимают последовательность операторов (команд, выполняемых компьютером). Такой стиль программирования принято называть императивным.

Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд /

логических переходов, которые должен выполнить компьютер. Основные конструкции:

Манипулирование ячейками памяти Оператор присваивания Явные операторы передачи управления Циклы, условный оператор

Page 8: Введение в предмет

Ю У р Г У

МехМат

С ПИмперативные языки8

Основаны на фон неймановской модели вычислений. Решая задачу, императивный программист вначале создает модель в некоторой формальной системе, а затем

переписывает решение на императивный язык. Для человека рассуждать в терминах компьютера довольно неестественно. Во-вторых, последний этап этой

деятельности (переписывание решения на язык программирования), что по сути не имеет отношения к решению исходной задачи.

Часто императивные программисты даже разделяют работу в соответствии с двумя описанными выше этапами. Одни люди, постановщики задач, придумывают решение задачи, а другие, кодировщики, переводят это решение на машинный язык.

Page 9: Введение в предмет

Ю У р Г У

МехМат

С ПДекларативный стиль9

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

программируя в декларативном стиле, программист должен описать, что нужно решать. В основе декларативных языков лежит формализованная человеческая логика. Человек лишь описывает

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

Page 10: Введение в предмет

Ю У р Г У

МехМат

С ПУровни языков программирования 10

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

Те, что ближе к компьютеру, относят к языкам низкого уровня, а те, что ближе к человеку, называют языками высокого уровня. В этом смысле декларативные языки можно назвать языками сверхвысокого или наивысшего уровня, поскольку они очень близки к человеческому языку и человеческому мышлению.

Page 11: Введение в предмет

Ю У р Г У

МехМат

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

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

Парадигма является инструментом грамматического описания фактов, событий, явлений и процессов, возможно, не существующих одновременно, но интуитивно объединяемых в общее понятие. Т.е., парадигма представляет (и определяет) то, как программист видит выполнение программы.

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

Page 12: Введение в предмет

Ю У р Г У

МехМат

С ПОсновные виды парадигм

12

Процедурная Функциональная Логическая Объектно-ориентированная

Page 13: Введение в предмет

Ю У р Г У

МехМат

С П

Языки парадигм программирования

3

Page 14: Введение в предмет

Ю У р Г У

МехМат

С ПСемантика языков14

Page 15: Введение в предмет

Ю У р Г У

МехМат

С ППроцедурное программирование15

Программа состоит из структур данных (объектов обработки) и алгоритма (метода обработки). Программист должен в явном виде описать все вычисления, которые должен проделать компьютер. Для управления процессом выполнения используются следующие конструкции, последовательность, ветвление, цикл и

вызов подпрограммы. Эта парадигма является самой старой. Она развивалась по мере появления новых концепций в языках

программирования: трансляция (Ассемблер, Fortran, Cobol), типизация (Pascal), модули (Modula), специализация на конкретной области применения (RPG, Clipper) и универсальность (PL/I, С, Ada).

Page 16: Введение в предмет

Ю У р Г У

МехМат

С П

Функциональное программирование

16

Сформировалось как дань математической направленности при исследовании и развитии искусственного интеллекта и освоении новых горизонтов в информатике.

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

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

виды технических средств: Lisp, Haskell, …

Page 17: Введение в предмет

Ю У р Г У

МехМат

С ПЛогическое программирование17

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

отношения. Она не за дает никакого процесса вычислений. Это своего рода база данных (БД) о предметной области задачи. Ее применение инициализируется запросом. Поиск ответа на запрос заключается в попытке логического вывода запроса на основании фактов и правил, имеющихся в БД. Поиск решения выполняется специальной программой - интерпретатором.

Основной (самый популярный) язык – Prolog, с множеством диалектов. Другие (менее популярные) языки: Datalog, Mercury, Oz,

Page 18: Введение в предмет

Ю У р Г У

МехМат

С П

Объектно-ориентированное программирование

18

Мир задачи описывается как совокупность объектов, обладающих некоторыми свойствами и вступающих во взаимодействие. За основу описания берутся не отношения, а сами объекты.

Объект состоит из данных (внутренняя структура объекта) и методов (набор операций, приме нимых к данному объекту). С помощью понятия класс, объединяющего совокупности объектов с похожими свойствами и поведением, выстраиваются иерархия объектов.

Каждый объект наследует свойства своего класса и может иметь свои собственные свойства. Программа в ООП - это совокупность объектов, обменивающихся между со бой сообщениями.

Языками ООП являются Smalltalk, C++, Delphi, …

Page 19: Введение в предмет

Ю У р Г У

МехМат

С ПРазвитие парадигм19

По мере возрастания сложности задач, произошло расслоение средств и методов программирования. Выделились основные стили (внутренне концептуально согласованные совокупности средств, базирующихся на некоторой логике построения программ).

Различным классам задач и методов соответствуют различные методы/логики построения программ, часто несовместимые между собой.

Современные специализированные парадигмы программирования: Машинно-ориентированное Системное Высокопроизводительное Трансформационное Прикладное Теоретическое Концептуальное

Page 20: Введение в предмет

Ю У р Г У

МехМат

С ПНаглядное сравнение…20

7.4 Сравнительная характеристика языков программирования.

Page 21: Введение в предмет

Ю У р Г У

МехМат

С ПМульти-парадигмные языки21

Некоторые языки сочетают в себе свойства разных парадигм.

Примеры языков: C# - императивный (ОО) + элементы функциональности F# - функциональный с элементами императивности Mercury – функционально-логический

Page 22: Введение в предмет

Ю У р Г У

МехМат

С П

Области применения декларативных языков

22

Создание систем искусственного интеллекта

Автоматическое доказательство теорем

Разработка экспертных систем и оболочек экспертных систем

Создание систем помощи принятия решений

Разработка систем обработки естественного языка

Построение планов действий роботов

Page 23: Введение в предмет

Ю У р Г У

МехМат

С П

Преимущества функционального программирования

23

Программа представляет собой множество вычисляемых

функций

Отсутствует операция присваивания (осн. Императивный

оператор)

Порядок выполнения программы (вычислений) несущественен

Быстродействие (по сравнению с аналогичными императивными

вычислениями)

Компактность кода (особенно для списков и вариантных типов)

Суперпозиции/склеивания функций: из простых – сложные,

редукция

Суперпозиция моделей: склеивание программ, ленивые

вычисления

Численное дифференцирование/интегрирование (в т.ч.

модульное)

Алгоритмы искусственного интеллекта (эвристический поиск и

т.п.)

Распараллеливание вычислений (Haskell)

Интерактивная отладка, Unit-тестирование, карринг

Сопоставление с образцом

Page 24: Введение в предмет

Ю У р Г У

МехМат

С П

Преимущества логического программирования

24

Задача программиста – описание логической модели предметной области в терминах объектов, их свойств и отношений между ними (без деталей): описание данных и логики их обработки ~ аналогия с ООП

Удобство описания отношений между объектами (реляционная

модель)

Компактность кода (обработка структурированных данных, лог.

правила)

Возможность перебора и поиска различных решений,

заложенная в язык

Легкость понимания (описание отд. правил), отладки программ

(trace)

Легкость описания сложных структур данных (деревья, списки и

т.п.)

Эффективный метод вычислений – рекурсия

Отсутствие указателей, операторов присваивания и

безусловного переходаМножество областей для применения: автоматический перевод,

обработка текстов, экспертные системы, САПР, Data-minig системы, автоматическое управление, СУБД, символьные вычисления

Page 25: Введение в предмет

Ю У р Г У

МехМат

С ПВыводы25

Существуют императивный и декларативный стили программирования (и соответствующие им языки).

Языки программирования принято разделять по уровням (низкий, высокий)

Существует множество парадигм программирования, основными из которых являются: Процедурная, Функциональная, Логическая, Объектно-ориентированная (а также ряд узкоспециализированных парадигм)

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

Page 26: Введение в предмет

Ю У р Г У

МехМат

С ПЛитература26

1. Джон Хьюз. Сильные стороны функционального

программирования.

[ http://pv.bstu.ru/flp/whyfp.rar ]

2. В. Ахмечет. Функциональное программирование для всех

[http://pv.bstu.ru/flp/FPftrou.rar ]

3. Н.Н. Непейвода. Стили и методы программирования. Л. 1, 8, 17.

[ http://pv.bstu.ru/flp/Intuit_Styles.rar ]

4. Л.В. Городняя. Основы функционального программирования. Л. 1,

15.

[ http://pv.bstu.ru/flp/Intuit_fp.rar ]