34
”Сила парадигмы” Василий Сабадаж 21 августа 2009г.

Сила парадигмы: обзор парадигм программирования

Embed Size (px)

Citation preview

Page 1: Сила парадигмы: обзор парадигм программирования

”Сила парадигмы”

Василий Сабадаж

21 августа 2009г.

Page 2: Сила парадигмы: обзор парадигм программирования

План

1. Определение парадигмы

2. Сила парадигмы

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

Page 3: Сила парадигмы: обзор парадигм программирования

Определение 1 (скучное)

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

Page 4: Сила парадигмы: обзор парадигм программирования

Определение 2 (менее скучное)

Парадигма (англ. paradigm) – это способ толкования человеком рассматриваемого объекта или явления.

Термин также часто используется в значении «теория», «модель», «представление», «понятие» или «система взглядов».

Page 5: Сила парадигмы: обзор парадигм программирования

Место парадигмы в принятии решений

Проблема сначала проходит через нашу призму восриятия.

Восприятие, или видение проблемы – и есть парадигма.

Page 6: Сила парадигмы: обзор парадигм программирования

Иллюстрация силы парадигмы

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

рассмотрения две картинки Для чистоты эксперимента, не нужно

обсуждать увиденное до того, как я скажу Если вы уже видели этот ”фокус” раньше –

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

Page 7: Сила парадигмы: обзор парадигм программирования

Иллюстрация: изображение для группы №1

Внимательно рассмотрите картинку в течение 10-15 секунд

Page 8: Сила парадигмы: обзор парадигм программирования

Иллюстрация: изображение для группы №2

Внимательно рассмотрите картинку в течение 10-15 секунд

Page 9: Сила парадигмы: обзор парадигм программирования

Сейчас обеим группам будет предложено еще одно изображение.

Опишите предлагаемую картинку.

Page 10: Сила парадигмы: обзор парадигм программирования

Иллюстрация: изображение для обеих групп

Попробуйте в нескольких предложениях описать то, что видите на картинке

Page 11: Сила парадигмы: обзор парадигм программирования

Иллюстрация силы парадигмы: Обсуждение

Мы видим, что на принятие решения восприятие, или парадигма, влияет коренным образом

Восприятие, в свою очередь, зависит от жизненного опыта

Page 12: Сила парадигмы: обзор парадигм программирования

Парадигмы в программировании Определение 1 (нудное). Парадигма

программирования – способ построения системных абстракций на основе свойств общности и изменчивости.

Определение 2. Парадигма программирования — это совокупность идей и понятий, определяющая стиль написания программ.

Существует множество других определений, однако все они, вообще говоря, эквивалентны.

Page 13: Сила парадигмы: обзор парадигм программирования

Значение парадигмы в программировании

”Если прогресс искусства программирования в целом требует постоянного изобретения и усовершенствования парадигм, то совершенствование искусства отдельного программиста требует, чтобы он расширял свой репертуар парадигм.”

Роберт Флойд

Page 14: Сила парадигмы: обзор парадигм программирования

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

Императивное программирование Структурное программирование Функциональное программирование Логическое программирование Объектно-ориентированное

программирование Программирование, основанное на классах Программирование, основанное на прототипах Субъектно-ориентированное программирование

Page 15: Сила парадигмы: обзор парадигм программирования

Императивное программирование

Императивное программирование — это парадигма программирования, которая описывает программу в виде последовательности действий, или инструкций, изменяющих состояние компьютера.

Примеры императивно-ориентированных языков: FORTRAN (1954), ALGOL (конец 1950-х), COBOL (1960), BASIC (1964), Pascal (1970-е), C (1983), Ada (1983).

Page 16: Сила парадигмы: обзор парадигм программирования

Структурное программирование

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

Предложена в 70-х годах XX века Э.Дейкстрой, разработана и дополнена Н.Виртом.

Page 17: Сила парадигмы: обзор парадигм программирования

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

структуру, построенную из трёх типов базовых конструкций:• последовательное исполнение;• ветвление;• цикл.

2.Повторяющиеся фрагменты программы (либо логически целостные вычислительные блоки) могут оформляться в виде т.н. подпрограмм.

3.Разработка программы ведётся пошагово, методом «сверху вниз».

Page 18: Сила парадигмы: обзор парадигм программирования

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

Снижается сложность программы. Облегчается понимание её другими

разработчиками. Сама программа является собственной

блок-схемой. Сильно упрощается процесс тестирования и

отладки структурированных программ.

Page 19: Сила парадигмы: обзор парадигм программирования

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

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

Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательность изменения состояний.

Page 20: Сила парадигмы: обзор парадигм программирования

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

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

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

Page 21: Сила парадигмы: обзор парадигм программирования

Примеры функциональных языков программирования XQuery. Haskell. LISP (а также современные потомки Scheme

и Common Lisp). ML (более современные диалекты –

Standard ML и Objective CAML). Miranda. Erlang. Также возможно использование

функциональной парадигмы в C, C++ и C#

Page 22: Сила парадигмы: обзор парадигм программирования

Пример решения задачи

Рассмотрено решение одной и той же задачи императивным и функциональным стилем на языке Python. Задача – обработать каждый элемент списка x сначала функцией G, затем функцией F.

# Императивный стиль

target = [] for item in source_list: trans1 = G(item) trans2 = F(trans1) target.append(trans2)

# Функциональный стиль

compose2 = lambda A, B: lambda x: A(B(x))

target = map(compose2(F, G), source_list)

Page 23: Сила парадигмы: обзор парадигм программирования

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

Повышение надёжности кода Удобство организации модульного

тестирования Возможности оптимизации при компиляции Возможности параллелизма

Page 24: Сила парадигмы: обзор парадигм программирования

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

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

В чистой функциональной парадигме отсутствуют циклы в привычном понимании

Page 25: Сила парадигмы: обзор парадигм программирования

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

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

Первый ”логический” язык – Planner, самый известный – Prolog.

Page 26: Сила парадигмы: обзор парадигм программирования

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

Объектно-ориентированное программирование (ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо прототипов).

Page 27: Сила парадигмы: обзор парадигм программирования

Основные понятия ООП

Абстракция данных Инкапсуляция

Сокрытие данных

Наследование Полиморфизм

Page 28: Сила парадигмы: обзор парадигм программирования

Строгое определение ООП

Принципы ООП, сформулированные Аланом Кеем, которого считают одним из «отцов-основателей» ООП:1. Всё является объектом.

2. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие.

3. Каждый объект имеет независимую память, которая состоит из других объектов.

4. Каждый объект является представителем (экземпляром) класса, который выражает общие свойства объектов.

5. В классе задаётся поведение (функциональность) объекта.

6. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования.

Page 29: Сила парадигмы: обзор парадигм программирования

Прототипное программирование

Прототипное программирование — стиль объектно-ориентированного программирования, при котором отсутствует понятие класса, а повторное использование (наследование) производится путём клонирования существующего экземпляра объекта — прототипа.

Канонический пример прототип-ориентированного языка – Self. Среди других примеров – JavaScript, Cecil, NewtonScript, Io, Slate, MOO, REBOL, Kevo, Lua.

Page 30: Сила парадигмы: обзор парадигм программирования

Мультипарадигмальное программирование

Мультипарадигмальное программирование -- это программирование с одновременным использованием нескольких парадигм программирования.

Page 31: Сила парадигмы: обзор парадигм программирования

Основные методы

Создание нового языка программирования Расширение существующего языка

программирования Встраиваемые интерпретаторы Расширяемые интерпретаторы Трансляция из одного языка в другой Сборка модулей, написанных на разных

языках программирования Библиотечное расширение существующего

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

Page 32: Сила парадигмы: обзор парадигм программирования

Пример мультипарадигмального языка: Lua Lua — интерпретируемый язык

программирования. Является свободно распространяемым, с

открытыми исходными текстами на языке Си.

Поддерживает императивную, функциональную, объектно-ориентированную (прототипную) парадигмы.

Легко встраивается в программы на C,C++, etc.

Поддерживает загрузку внешних модуей.

Page 33: Сила парадигмы: обзор парадигм программирования

Вопросы, замечания

Если что-то непонятно, не стесняйтесь задавать вопросы.

Если есть что добавить или поправить – смело добавляйте/поправляйте.

Page 34: Сила парадигмы: обзор парадигм программирования

Обратная связь

E-mail: [email protected] ICQ: 446-825-705