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

Post on 15-Jun-2015

4.282 Views

Category:

Education

5 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

21 августа 2009г.

План

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Роберт Флойд

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рассмотрено решение одной и той же задачи императивным и функциональным стилем на языке 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)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

E-mail: vsabadazh@yandex.ru ICQ: 446-825-705

top related