парадигмы программирования.ppt
- Количество слайдов: 35
Парадигмы программирования Проблема сначала проходит через нашу призму восприятия Восприятие, или видение проблемы – и есть парадигма
Парадигма программирования (англ. paradigm) —некоторый цельный набор идей и рекомендаций, определяющих стиль написания программ. l Парадигма программирования представляет (и определяет) то, как программист видит выполнение программы. l Парадигма– это способ толкования человеком рассматриваемого объекта или явления. l Термин часто используется в значении «теория» , «модель» , «представление» , «понятие» или «система взглядов» . l
объектное операционное декларативное структурное логическое функциональное
Декларативное программирование является противоположностью императивного (процедурного) программирования; первое описывает, что необходимо сделать, а второе — как именно это сделать. Декларативная парадигма программирования определяет процесс вычислений посредством описания логики самого вычисления, а не управляющей логики программы
Императивное программирование основано на описании последовательного изменения состояния вычислителя (компьютера) для решения поставленной задачи. ИП - парадигма программирования, которая описывает программу в виде последовательности действий, или инструкций, изменяющих состояние компьютера. Оперируют состоянием памяти ЯП С, Паскаль, Бейсик, FORTRAN , ALGOL , COBOL … Основная единица программы – процедура Применение: - Перевод с одного языка на другой - Разработка компиляторов - Создание экспертных систем - Создание динамических реляционных баз данных - Создание пакетов символьных вычислений
Структурное программирование l СП — парадигма разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. l Предложена в 70 -х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом. l Программа состоит из структур данных (объектов обработки) и алгоритма (метода обработки)
Теорема о структурном программировании Теорема Бома-Якопини (1966 г) l Суть ее в том, что алгоритм для решения любой логической задачи можно составить только из структур «следование, ветвление, цикл»
технология разработки программ, основана на принципах: l использование трёх базовых алгоритмических структур: следование, ветвление, цикл l использование модулей l программирование «сверху-вниз» l последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается l
Способ программирования «сверху-вниз» заключается в том, что задача решается от общего к частному, крупные задачи разбиваются на более мелкие и т. д. пока очередные задачи смогут быть реализованы одним или несколькими простыми операторами языка программирования.
Преимущества структурного программирования Снижается сложность программы l Облегчается понимание её другими разработчиками. l Сама программа является собственной блок-схемой. l Сильно упрощается процесс тестирования и отладки структурированных программ. l
Эта парадигма является самой старой. Она развивалась по мере появления новых концепций в языках программирования: l трансляция (Ассемблер, Fortran, Cobol), l типизация (Pascal), l модули (Modula), l специализация на конкретной области применения (RPG, Clipper) l универсальность (PL/I, С, Ada) l
l Основной проблемой процедурного программирования считается то, что данные и функции их обработки не были связаны l процедуры обработки структур строились на основе вложенных условных операторов или переключателей, любое изменение данных вело к изменению их обработчиков. Приходилось модифицировать практически каждую процедуру, связанную с обработкой соответствующих структур.
Декларативное программирование l Декларативное программирование – такой стиль программирования, при использовании которого в программах описывается способ решения поставленной задачи, а не предписываются шаги для получения результата. l Функциональное программирование Логическое программирование l
Функциональное программирование l ФП — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних. Противопоставляется парадигме императивного программирования, которая описывает процесс вычислений как последовательность изменения состояний.
Особенности функционального программирования Функциональное программирование не предполагает изменяемость данных (отсутствует такое понятие, как переменная). l Основой для функционального программирования является лямбдаисчисление. l Оперируют с данными (подход ориентированный на данные). Применение функций изменяет данные l
l Функциональное программирование основано на решении задачи только с помощью вызова функций l l l В функциональном программировании способ решения задачи описывается при помощи зависимости функций друг от друга Функции высших порядков — производная и первообразная Вместо цикла обычно реализуется рекурсия. Рекурсивные функции вызывают сами себя, позволяя операции выполняться снова и снова l (ЯП Лисп, Миранда, Хаскель)
Достоинства ФП - Повышение надёжности за счет чёткой структуризации - Широчайшие возможности для автоматического распараллеливания вычислений - Последовательность операций, приводящая к вычислению результата получается автоматически. - Возможность применения автоматической оптимизации Недостатки ФП - Отсутствие присваиваний и замена их на порождение новых данных приводят к необходимости постоянного выделения и автоматического освобождения памяти, что требует затрат времени и памяти. - Очень серьёзным ограничением является отсутствие циклов для промышленных программ
Логическое программирование — парадигма программирования, основанная на автоматическом доказательстве теорем l Возникло как упрощение функционального программирования для математиков и лингвистов, решающих задачи символьной обработки l Первый ”логический” язык – Planner, самый известный – Prolog. l
Логическое программирование основано на описании задачи как системы фактов и логических правил. Способ получения результата при этом в программе не указывается. Оперируют с пространством поиска решений. Программа задает множество возможных переходов в пространстве поиска Метод унификации - сопоставление двух произвольных выражений, содержащих переменные, с целью определения того, можно ли присвоить этим переменным такие значения, чтобы получились одинаковые выражения F(X, 2), F(1, Y) → X=1, Y=2 Метод резолюции – метод доказательства теорем, использующий правило вывода, называемое резолюцией: если P|Q и ~P|R, то Q|R Создание интерфейсов для общения с ЭВМ на естественном языке
Достоинства ЛП l l l l Удобство описания отношений между объектами (реляционная модель) Компактность кода Возможность перебора и поиска различных решений Легкость понимания (описание отд. правил), отладки программ Легкость описания сложных структур данных (деревья, списки и т. п. ) Эффективный метод вычислений – рекурсия Отсутствие указателей, операторов присваивания и безусловного перехода Множество областей для применения: автоматический перевод, обработка текстов, экспертные системы, САПР, автоматическое управление, СУБД, символьные вычисления
Объектно-ориентированное программирование ООП — парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо прототипов). l ООП является основным инструментом для построения кода l
Принципы ООП сформулированные Аланом Кеем ( «отцом- основателем» ООП): 1. 2. 3. 4. 5. 6. Всё является объектом. Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие Каждый объект имеет независимую память, которая состоит из других объектов. Каждый объект является представителем класса, который выражает общие свойства объектов. В классе задаётся поведение (функциональность) объекта. Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования.
l. С точки зрения восприятия человеком объектом может быть: - осязаемый и (или) видимый предмет (мяч) - нечто, воспринимаемое мышлением (алгоритм) - нечто, на что направлена мысль или действие (время).
l l l С точки зрения ОО подхода объект представляет собой конкретный опознаваемый предмет, единицу или сущность (реальную или абстрактную), имеющую четко определенное функциональное назначение в данной предметной области. Объект моделирует часть окружающей действительности и таким образом существует во времени и пространстве. Объект может быть определен как нечто, имеющее четко очерченные границы. Существуют такие объекты, для которых определены явные концептуальные границы, но сами объекты представляют собой неосязаемые события или процессы (химический процесс на заводе ) Объекты могут быть осязаемыми, но иметь размытые физические границы: реки, туман или толпы людей.
Объекты взаимодействуют друг с другом с помощью сообщений. Сообщение – совокупность данных определенного типа, передаваемого объектом отправителем объекту получателю, имя которого указывается в сообщении. Получатель реагирует на сообщение выполнением некоторого метода Объект обладает состоянием, поведением и идентичностью; структура и поведение схожих объектов определяет общий для них класс; термины "экземпляр класса" и "объект" взаимозаменяемы. С++, Паскаль, Visual Basic (VBA), Small. Talk, …
Методы ООП Конструкторы – методы создания объекта и/или его инициализации Деструкторы – методы, освобождающие состояние и ресурсы объекта и/или разрушающие сам объект Селекторы – методы, считывающие, но не изменяющие состояние объекта Мощные возможности ООП демонстрирует любой графический интерфейс пользователя (множество кнопок, окон…)
Основные понятия ООП l l Абстракция данных Инкапсуляция Сокрытие данных Наследование Полиморфизм Инкапсуляция –комбинирование и сокрытие внутри объекта данных и процедур, функций (методов), которые их обрабатывают. Инкапсуляция обеспечивает сокрытие данных, что позволяет защитить эти данные l Наследование -возможность использования уже введенных объектов для создания других объектов. Каждый из “наследников” наследует определение данных и методов своего “родителя”. Новый объект будет обладать всеми свойствами родительского класса плюс своими собственными отличительными особенностями l Полиморфизм -возможность определения единого по имени метода, который по-разному определен для объекта-родителя и объекта-наследника. Помогает снижать сложность программ, разрешая использование одного интерфейса для единого класса действий
Центром вселенной в мире ООП являются интерфейсы, точнее сигнатуры процедур и функций. Именно через сигнатуры должно идти все взаимодействие классов. l В противном случае нарушается инкапсуляция, затрудняется модификация, а также возникает множество других проблем. l
l современные ОО языки поддерживают параллельную обработку данных, которая осуществляется либо через системные вызовы ОС, либо непосредственно встроена в ОО язык (например, в Java)
Прототипное программирование стиль ООП, при котором отсутствует понятие класса, а повторное использование (наследование) производится путём клонирования существующего экземпляра объекта — прототипа. l пример прототип-ориентированного языка – Self. Среди других примеров – Java. Script, Cecil, Newton. Script, Io, Slate, MOO, REBOL, Kevo, Lua. l
Мультипарадигмальное программирование l l l программирование с одновременным использованием нескольких парадигм программирования. Создание нового языка программирования Расширение существующего языка программирования Встраиваемые интерпретаторы, Расширяемые интерпретаторы Трансляция из одного языка в другой Сборка модулей, написанных на разных языках программирования Библиотечное расширение существующего языка программирования Lua — интерпретируемый язык программирования
Модульное программирование l Модульное программирование – предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные в отдельно компилируемые модули (библиотеки подпрограмм)
«Производственное» программирование – разработка программ, предназначенных для управления реальными производственными объектами, процессами и системами. Требования: 1) устойчивость к сбоям аппаратуры, работающей в составе комплекса, к сбоям компьютера, изменениям внешней среды, неправильным действиям оператора; 2) в основном автоматический режим функционирования; 3) распоряжение всеми ресурсами компьютера; 4) ограниченная функциональность
Системное программирование – разработка программ для обеспечения проблемноориентированной, эффективной работы компьютера с пользователями Требования: 1) создание специализированных пользовательских интерфейсов; 2) эффективное использование ресурсов компьютера; 3) обеспечение гибкого и разнообразного межпрограммного интерфейса
«Пользовательское» программирование – составление прикладных программ в средах, формируемы системными программами. Требования: 1) надежность программы; 2) наглядность текста программы и ее исполнения; 3) экономичность программы; 4) удобство пользовательского интерфйса
парадигмы программирования.ppt