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

Презентация:



Advertisements
Похожие презентации
ВЫПОЛНЕНИЕ АЛГОРИТМОВ КОМПЬЮТЕРОМ. Алгоритм, записанный на «понятном» компьютеру языке программирования, называется программой. Программа данные, предназначенные.
Advertisements

Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
Тема 15. Этапы подготовки и решения задач на ЭВМ.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 3.
Этапы решения задач на компьютере 1. Постановка задачи. 2. Построение математической модели. 3. Составление алгоритма. 4. Запись алгоритма на языке программирования(кодирование)
1 Тема 1.7. Алгоритмизация и программирование Информатика.
Сравнительный анализ языков программирования Автор Родионов Михаил.
Алгоритмизация и программирование. Языки программирования высокого уровня. Технологии программирования Алгоритмизация и программирование. Языки программирования.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Языки программирования часто классифицируют по уровню. Уровень языка показывает, насколько язык близок к естественной для человека записи. Уровни языков.
OOП Инна Исаева. Подпрограмма – это большая программа, разделённая на меньшие части. В программе одна из подпрограмм является главной. Её задача состоит.
ПРОГРАММИРОВАНИЕ/ ЯЗЫКИ ПРОГРАММИРОВАНИЯ Лекция 1 Процедурный подход к разработке программ (весенний семестр 2012 г.) Доцент Кафедры вычислительных систем,
Что такое программирование? Совокупность процессов, связанных с разработкой программ и их реализацией. В широком смысле к указанным процессам относят все.
От сложного – к простому. От непонятного – к понятному.
1 © Luxoft Training 2012 Введение в ООП Модуль #2.
Теория систем и системный анализ Тема1 «Системные исследования. Теория систем»
Программирование Программирование – это раздел информатики, задача которого – разработка программного обеспечения компьютера. Люди, работающие на компьютерах.
Языки программирования.. Этапы создания программы. Для представления алгоритма в виде, понятном компьютеру, служат языки программирования. Сначала разрабатывается.
Экспертные системы (ЭС). Характеристика и назначение. Лекция 1.
Основы объектно-ориентированного программирования (ООП)
Транксрипт:

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

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

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

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

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

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

Императивный стиль 7 Традиционно под программой понимают последовательность операторов ( команд, выполняемых компьютером ). Такой стиль программирования принято называть императивным. Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу. Императивная программа очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд / логических переходов, которые должен выполнить компьютер. Основные конструкции : Манипулирование ячейками памяти Оператор присваивания Явные операторы передачи управления Циклы, условный оператор

Императивные языки 8 Основаны на фон неймановской модели вычислений. Решая задачу, императивный программист вначале создает модель в некоторой формальной системе, а затем переписывает решение на императивный язык. Для человека рассуждать в терминах компьютера довольно неестественно. Во - вторых, последний этап этой деятельности ( переписывание решения на язык программирования ), что по сути не имеет отношения к решению исходной задачи. Часто императивные программисты даже разделяют работу в соответствии с двумя описанными выше этапами. Одни люди, постановщики задач, придумывают решение задачи, а другие, кодировщики, переводят это решение на машинный язык.

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

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

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

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

Языки парадигм программирования 3 Языки программирования Императивные (алгоритмические языки) Декларативные (неалгоритмические) языки Языки логического программирова ния (Prolog, …) Языки функциональ ного программирова ния (Lisp, …) Процедурные языки (Fortran, Pascal, C, …) Объектно- ориентированн ые языки (C++, SmallTalk …)

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

Процедурное программирование 15 Программа состоит из структур данных ( объектов обработки ) и алгоритма ( метода обработки ). Программист должен в явном виде описать все вычисления, которые должен проделать компьютер. Для управления процессом выполнения используются следующие конструкции, последовательность, ветвление, цикл и вызов подпрограммы. Эта парадигма является самой старой. Она развивалась по мере появления новых концепций в языках программирования : трансляция ( Ассемблер, Fortran, Cobol), типизация (Pascal), модули (Modula), специализация на конкретной области применения (RPG, Clipper) и универсальность (PL/I, С, Ada).

Функциональное программирование 16 Сформировалось как дань математической направленности при исследовании и развитии искусственного интеллекта и освоении новых горизонтов в информатике. Единственной управляющей конструкцией является вызов функции. В языке, реализующем функциональную парадигму, сущест ­ вует некоторое множество базовых функций, и все другие функции строятся из базо ­ вых функций с помощью композиции. Теоретической основой является лямбда - исчисление и теория рекурсивных функций. В настоящее время существуют сотни функциональных языков программирования, ориентированных на разные классы задач и виды технических средств : Lisp, Haskell, …

Логическое программирование 17 Возникло как упрощение функционального программирования для математиков и лингвистов, решающих задачи символьной обработки. Вместо описания алгоритма решения задачи описывается мир задачи, какие имеются объекты, их свойства и отношения между ними. За основу описания берутся отношения между объектами. Логическая программа представляет собой набор отношений, которые называются фактами, и правил, на основании которых могут быть получены новые отношения. Она не за ­ дает никакого процесса вычислений. Это своего рода база данных ( БД ) о предметной области задачи. Ее применение инициализируется запросом. Поиск ответа на запрос заключается в попытке логического вывода запроса на основании фактов и правил, имеющихся в БД. Поиск решения выполняется специальной программой - интерпретатором. Основной ( самый популярный ) язык – Prolog, с множеством диалектов. Другие ( менее популярные ) языки : Datalog, Mercury, Oz,

Объектно - ориентированное программирование 18 Мир задачи описывается как совокупность объектов, обладающих некоторыми свойствами и вступающих во взаимодействие. За основу описания берутся не отношения, а сами объекты. Объект состоит из данных ( внутренняя структура объекта ) и методов ( набор операций, приме ­ нимых к данному объекту ). С помощью понятия класс, объединяющего совокупности объектов с похожими свойствами и поведением, выстраиваются иерархия объектов. Каждый объект наследует свойства своего класса и может иметь свои собственные свойства. Программа в ООП - это совокупность объектов, обменивающихся между со ­ бой сообщениями. Языками ООП являются Smalltalk, C++, Delphi, …

Развитие парадигм 19 По мере возрастания сложности задач, произошло расслоение средств и методов программирования. Выделились основные стили ( внутренне концептуально согласованные совокупности средств, базирующихся на некоторой логике построения программ ). Различным классам задач и методов соответствуют различные методы / логики построения программ, часто несовместимые между собой. Современные специализированные парадигмы программирования : Машинно - ориентированное Системное Высокопроизводительное Трансформационное Прикладное Теоретическое Концептуальное

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

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

Области применения декларативных языков 22 Создание систем искусственного интеллекта Автоматическое доказательство теорем Разработка экспертных систем и оболочек экспертных систем Создание систем помощи принятия решений Разработка систем обработки естественного языка Построение планов действий роботов …

Преимущества функционального программирования 23 Программа представляет собой множество вычисляемых функций Отсутствует операция присваивания (осн. Императивный оператор) Порядок выполнения программы (вычислений) несущественен Быстродействие (по сравнению с аналогичными императивными вычислениями) Компактность кода (особенно для списков и вариантных типов) Суперпозиции/склеивания функций: из простых – сложные, редукция Суперпозиция моделей: склеивание программ, ленивые вычисления Численное дифференцирование/интегрирование (в т.ч. модульное) Алгоритмы искусственного интеллекта (эвристический поиск и т.п.) Распараллеливание вычислений (Haskell) Интерактивная отладка, Unit-тестирование, карринг Сопоставление с образцом

Преимущества логического программирования 24 Задача программиста – описание логической модели предметной области в терминах объектов, их свойств и отношений между ними (без деталей): описание данных и логики их обработки ~ аналогия с ООП Удобство описания отношений между объектами (реляционная модель) Компактность кода (обработка структурированных данных, лог. правила) Возможность перебора и поиска различных решений, заложенная в язык Легкость понимания (описание отд. правил), отладки программ (trace) Легкость описания сложных структур данных (деревья, списки и т.п.) Эффективный метод вычислений – рекурсия Отсутствие указателей, операторов присваивания и безусловного перехода Множество областей для применения: автоматический перевод, обработка текстов, экспертные системы, САПР, Data-minig системы, автоматическое управление, СУБД, символьные вычисления

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

Литература 26 1.Джон Хьюз. Сильные стороны функционального программирования. [ ] 2. В. Ахмечет. Функциональное программирование для всех [ ] 3. Н.Н. Непейвода. Стили и методы программирования. Л. 1, 8, 17. [ ] 4. Л.В. Городняя. Основы функционального программирования. Л. 1, 15. [ ]