Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа(Городилов).doc
Скачиваний:
11
Добавлен:
17.09.2019
Размер:
474.62 Кб
Скачать

1.2. Понятие парадигмы программирования.

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

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

Ведущая парадигма прикладного программирования на основе императивного управления и процедурно - операторного стиля построения программ получила популярность более пятидесяти лет назад в сфере узкопрофессиональной деятельности специалистов по организации вычислительных и информационных процессов. Последнее десятилетие резко расширило географию информатики, распространив ее на сферу массового общения и досуга. Это меняет критерии оценки информационных систем и предпочтения в выборе средств и методов обработки информации.

Консервирующееся в наши дни доминирование одной архитектурной линии, стандартного интерфейса, типовой технологии программирования и т.д. чревато потерей маневренности при обновлении информационных технологий. Особенно уязвимы в этом отношении люди, привыкшие в учебе прочно усваивать все раз и навсегда. При изучении языков программирования подобные проблемы обходят за счет одновременного преподавания различных языков программирования или предварительного изложения основы, задающей грамматическую структуру для обобщения понятий, изменяемость которых трудно улавливается на упрощенных учебных примерах. Именно такую основу дает изучение функционального программирования тем, что оно нацелено на изложение и анализ парадигм , сложившихся в практике программирования в разных областях деятельности с различным уровнем квалификации специалистов, что может быть полезно как концептуальная основа при изучении новых явлений в информатике.

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

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

Pascal:

program HelloWorld;

uses crt;

begin

writeln('Hello,World');

end.

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

Наиболее известными языками программирования, реализующи­ми функциональную парадигму, являются LISP, Scheme, Haskell.

LISP:

Пример программы, выводящей сообщение "Hello, world!":

(format t "Hello, world!~%")

Итеративная версия функции определения N-го числа Фибоначчи с использованием макроса Loop:

(defun fibonacci (n)

(loop repeat (+ n 1)

for a = 1 then b

and b = 1 then (+ a b)

finally (return a)))

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

Наиболее распространенным языком логического программирова­ния является Prolog, у которого есть многочисленные наследники.

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

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

Данный пример иллюстрирует как организовать цикл, используя метод обобщенного правила рекурсии (ОПР)

Схема метода обобщенного правила рекурсии (ОПР)

<имя правила рекурсии> :- <условие продолжения>,

<список предикатов>,

<имя правила рекурсии>,

<список предикатов>.

Цель задачи: определить сумму ряда 1, 2, 3, ..., зная количество элементов ряда

predicates

nondeterm sum_series(integer, integer)

nondeterm sum_print

clauses

sum_series(1, 1).

sum_series(Number,Sum) :- Number > 1,

NextNumber = Number - 1,

sum_series(NextNumber, PartialSum),

Sum = Number + PartialSum.

sum_print :- sum_series(7, Sum), write("Сумма ряда: "), write(Sum).

goal

sum_print, nl.

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

Delphi:

Сама структура программы выглядит так:

program Project1; // Заголовок программы, с её именем «Project1»

uses

Forms,

Unit1 in 'Unit1.pas' {Form1}; // модули, которые подключены к проекту и используются программой

{$R *.res}

begin

Application.Initialize; // Инициализация приложения

Application.CreateForm(TForm1, Form1); // Создание формы/окна

Application.Run; // Запуск и исполнение

end.

Пример программы вывода сообщения:

program Helloworld; //название программы

{$APPTYPE CONSOLE} //директива компилятору о создании консольного приложения

begin

writeln(Helloworld); //вывод сообщения "Helloworld"

end. //конец программы

История термина "Парадигма"

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

Термин «парадигма программирования» впервые применил Роберт Флойд в своей лекции лауреата премии Тьюринга.

Флойд отмечает, что в программировании можно наблюдать явление, подобное парадигмам Куна, но, в отличие от них, парадигмы программирования не являются взаимоисключающими:

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

Таким образом, по мнению Роберта Флойда, в отличие от парадигм в научном мире, описанных Куном, парадигмы программирования могут сочетаться, обогащая инструментарий программиста.

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