Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемstudy.susu.ru
1 Введение в предмет Лекция 1 Парадигмы и стили программирования
2 Содержание 2 Исторический очерк Стили программирования Понятие парадигмы программирования Основные виды парадигм Особенности функционального и логического программирования
3 Обратимся к истории … 3
4 Программирование для математиков … 4
5 Бурное развитие языков … 5
6 Вычисление факториала 6
7 Императивный стиль 7 Традиционно под программой понимают последовательность операторов ( команд, выполняемых компьютером ). Такой стиль программирования принято называть императивным. Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд / логических переходов, которые должен выполнить компьютер. Основные конструкции : Манипулирование ячейками памяти Оператор присваивания Явные операторы передачи управления Циклы, условный оператор
8 Императивные языки 8 Основаны на фон неймановской модели вычислений. Решая задачу, императивный программист вначале создает модель в некоторой формальной системе, а затем переписывает решение на императивный язык. Для человека рассуждать в терминах компьютера довольно неестественно. Во - вторых, последний этап этой деятельности ( переписывание решения на язык программирования ), что по сути не имеет отношения к решению исходной задачи. Часто императивные программисты даже разделяют работу в соответствии с двумя описанными выше этапами. Одни люди, постановщики задач, придумывают решение задачи, а другие, кодировщики, переводят это решение на машинный язык.
9 Декларативный стиль 9 программа представляет собой совокупность утверждений, описывающих фрагмент предметной области или сложившуюся ситуацию ; описывается результат ( его свойства ), а не методы его достижения. программируя в декларативном стиле, программист должен описать, что нужно решать. В основе декларативных языков лежит формализованная человеческая логика. Человек лишь описывает решаемую задачу, а поиском решения занимается императивная система программирования. В итоге получаем значительно большую скорость разработки приложений, значительно меньший размер исходного кода, легкость записи знаний на декларативных языках, более понятные, по сравнению с императивными языками, программы.
10 Уровни языков программирования 10 Известна классификация языков программирования по их близости либо к машинному языку, либо к естественному человеческому языку. Те, что ближе к компьютеру, относят к языкам низкого уровня, а те, что ближе к человеку, называют языками высокого уровня. В этом смысле декларативные языки можно назвать языками сверхвысокого или наивысшего уровня, поскольку они очень близки к человеческому языку и человеческому мышлению.
11 Парадигма программирования 11 Парадигма программирования - исходная концептуальная схема постановки проблем и их решения ; вместе с языком, ее формализирующим, парадигма формирует стиль программирования. Парадигма является инструментом грамматического описания фактов, событий, явлений и процессов, возможно, не существующих одновременно, но интуитивно объединяемых в общее понятие. Т. е., парадигма представляет ( и определяет ) то, как программист видит выполнение программы. Например, в объектно - ориентированном программировании программист рассматривает программу как набор взаимодействующих объектов, тогда как в функциональном программировании программа представляется в виде цепочки вычисления функций.
12 Основные виды парадигм 12 Процедурная Функциональная Логическая Объектно - ориентированная
13 Языки парадигм программирования 3 Языки программирования Императивные (алгоритмические языки) Декларативные (неалгоритмические) языки Языки логического программирова ния (Prolog, …) Языки функциональ ного программирова ния (Lisp, …) Процедурные языки (Fortran, Pascal, C, …) Объектно- ориентированн ые языки (C++, SmallTalk …)
14 Семантика языков 14
15 Процедурное программирование 15 Программа состоит из структур данных ( объектов обработки ) и алгоритма ( метода обработки ). Программист должен в явном виде описать все вычисления, которые должен проделать компьютер. Для управления процессом выполнения используются следующие конструкции, последовательность, ветвление, цикл и вызов подпрограммы. Эта парадигма является самой старой. Она развивалась по мере появления новых концепций в языках программирования : трансляция ( Ассемблер, Fortran, Cobol), типизация (Pascal), модули (Modula), специализация на конкретной области применения (RPG, Clipper) и универсальность (PL/I, С, Ada).
16 Функциональное программирование 16 Сформировалось как дань математической направленности при исследовании и развитии искусственного интеллекта и освоении новых горизонтов в информатике. Единственной управляющей конструкцией является вызов функции. В языке, реализующем функциональную парадигму, сущест вует некоторое множество базовых функций, и все другие функции строятся из базо вых функций с помощью композиции. Теоретической основой является лямбда - исчисление и теория рекурсивных функций. В настоящее время существуют сотни функциональных языков программирования, ориентированных на разные классы задач и виды технических средств : Lisp, Haskell, …
17 Логическое программирование 17 Возникло как упрощение функционального программирования для математиков и лингвистов, решающих задачи символьной обработки. Вместо описания алгоритма решения задачи описывается мир задачи, какие имеются объекты, их свойства и отношения между ними. За основу описания берутся отношения между объектами. Логическая программа представляет собой набор отношений, которые называются фактами, и правил, на основании которых могут быть получены новые отношения. Она не за дает никакого процесса вычислений. Это своего рода база данных ( БД ) о предметной области задачи. Ее применение инициализируется запросом. Поиск ответа на запрос заключается в попытке логического вывода запроса на основании фактов и правил, имеющихся в БД. Поиск решения выполняется специальной программой - интерпретатором. Основной ( самый популярный ) язык – Prolog, с множеством диалектов. Другие ( менее популярные ) языки : Datalog, Mercury, Oz,
18 Объектно - ориентированное программирование 18 Мир задачи описывается как совокупность объектов, обладающих некоторыми свойствами и вступающих во взаимодействие. За основу описания берутся не отношения, а сами объекты. Объект состоит из данных ( внутренняя структура объекта ) и методов ( набор операций, приме нимых к данному объекту ). С помощью понятия класс, объединяющего совокупности объектов с похожими свойствами и поведением, выстраиваются иерархия объектов. Каждый объект наследует свойства своего класса и может иметь свои собственные свойства. Программа в ООП - это совокупность объектов, обменивающихся между со бой сообщениями. Языками ООП являются Smalltalk, C++, Delphi, …
19 Развитие парадигм 19 По мере возрастания сложности задач, произошло расслоение средств и методов программирования. Выделились основные стили ( внутренне концептуально согласованные совокупности средств, базирующихся на некоторой логике построения программ ). Различным классам задач и методов соответствуют различные методы / логики построения программ, часто несовместимые между собой. Современные специализированные парадигмы программирования : Машинно - ориентированное Системное Высокопроизводительное Трансформационное Прикладное Теоретическое Концептуальное
20 Наглядное сравнение … Сравнительная характеристика языков программирования.
21 Мульти - парадигмные языки 21 Некоторые языки сочетают в себе свойства разных парадигм. Примеры языков: C# - императивный (ОО) + элементы функциональности F# - функциональный с элементами императивности Mercury – функционально-логический
22 Области применения декларативных языков 22 Создание систем искусственного интеллекта Автоматическое доказательство теорем Разработка экспертных систем и оболочек экспертных систем Создание систем помощи принятия решений Разработка систем обработки естественного языка Построение планов действий роботов …
23 Преимущества функционального программирования 23 Программа представляет собой множество вычисляемых функций Отсутствует операция присваивания (осн. Императивный оператор) Порядок выполнения программы (вычислений) несущественен Быстродействие (по сравнению с аналогичными императивными вычислениями) Компактность кода (особенно для списков и вариантных типов) Суперпозиции/склеивания функций: из простых – сложные, редукция Суперпозиция моделей: склеивание программ, ленивые вычисления Численное дифференцирование/интегрирование (в т.ч. модульное) Алгоритмы искусственного интеллекта (эвристический поиск и т.п.) Распараллеливание вычислений (Haskell) Интерактивная отладка, Unit-тестирование, карринг Сопоставление с образцом
24 Преимущества логического программирования 24 Задача программиста – описание логической модели предметной области в терминах объектов, их свойств и отношений между ними (без деталей): описание данных и логики их обработки ~ аналогия с ООП Удобство описания отношений между объектами (реляционная модель) Компактность кода (обработка структурированных данных, лог. правила) Возможность перебора и поиска различных решений, заложенная в язык Легкость понимания (описание отд. правил), отладки программ (trace) Легкость описания сложных структур данных (деревья, списки и т.п.) Эффективный метод вычислений – рекурсия Отсутствие указателей, операторов присваивания и безусловного перехода Множество областей для применения: автоматический перевод, обработка текстов, экспертные системы, САПР, Data-minig системы, автоматическое управление, СУБД, символьные вычисления
25 Выводы 25 Существуют императивный и декларативный стили программирования ( и соответствующие им языки ). Языки программирования принято разделять по уровням ( низкий, высокий ) Существует множество парадигм программирования, основными из которых являются : Процедурная, Функциональная, Логическая, Объектно - ориентированная ( а также ряд узкоспециализированных парадигм ) Существует ряд задач, для которых удобно использовать языки функционального и / или логического программирования, достоинствами которых являются компактность программного кода и высокая скорость выполнения программ.
26 Литература 26 1.Джон Хьюз. Сильные стороны функционального программирования. [ ] 2. В. Ахмечет. Функциональное программирование для всех [ ] 3. Н.Н. Непейвода. Стили и методы программирования. Л. 1, 8, 17. [ ] 4. Л.В. Городняя. Основы функционального программирования. Л. 1, 15. [ ]
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.