Парадигмы Томаса Куна

Автор работы: Пользователь скрыл имя, 20 Декабря 2010 в 23:20, реферат

Описание работы

Паради́гма это (от греч. παράδειγμα, «пример, модель, образец») — универсальный метод принятия эволюционных решений, гносеологическая модель эволюционной деятельности.

Файлы: 1 файл

Парадигмы Томаса Куна.doc

— 134.00 Кб (Скачать файл)

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

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

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

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

- выявить формы проявления противоречий управленческой парадигмы и управляемых систем ;

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

Модели  программирования

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

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

В соответствии с данной методологией любая программа  представляет собой структуру, построенную  из трёх типов базовых конструкций:

- последовательное  исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы;

- ветвление  — однократное выполнение одной  из двух или более операций, в зависимости от выполнения  некоторого заданного условия;

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

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

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

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

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

Методология структурного программирования появилась  как следствие возрастания сложности  решаемых на компьютерах задач, и  соответственного усложнения программного обеспечения. В 70-е годы XX века объёмы и сложность программ достигли такого уровня, что «интуитивная» (неструктурированная, или «рефлекторная») разработка программ, которая была нормой в более раннее время, перестала удовлетворять потребностям практики. Программы становились слишком сложными, чтобы их можно было нормально сопровождать, поэтому потребовалась какая-то систематизация процесса разработки и структуры программ.

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

Следование  принципам структурного программирования сделало тексты программ, даже довольно крупных, нормально читаемыми. Серьёзно облегчилось понимание программ, появилась возможность разработки программ в нормальном промышленном режиме, когда программу может без особых затруднений понять не только её автор, но и другие программисты. Это позволило разрабатывать достаточно крупные для того времени программные комплексы силами коллективов разработчиков, и сопровождать эти комплексы в течение многих лет, даже в условиях неизбежных изменений в составе персонала.

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

Перечислим  некоторые достоинства структурного программирования:

1. Структурное  программирование позволяет значительно  сократить число вариантов построения  программы по одной и той  же спецификации, что значительно  снижает сложность программы  и, что ещё важнее, облегчает  понимание её другими разработчиками.

2. В структурированных  программах логически связанные  операторы находятся визуально  ближе, а слабо связанные —  дальше, что позволяет обходиться  без блок-схем и других графических  форм изображения алгоритмов (по  сути, сама программа является собственной блок-схемой).

3. Сильно  упрощается процесс тестирования  и отладки структурированных  программ.

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

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

На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции взаимодействуют и изменяют уже определённые данные. Таким образом, в императивном программировании, при вызове одной и той же функции с одинаковыми параметрами можно получить разные данные на выходе, из-за влияния на функцию внешних факторов. А в функциональном языке при вызове функции с одними и теми же аргументами мы всегда получим одинаковый результат в обоих случаях, входные данные не могут измениться, выходные данные зависят только от них.

λ-исчисления являются основой для функционального  программирования, многие функциональные языки можно рассматривать как  «надстройку» над ними.

Наиболее  известными языками функционального  программирования являются:

1. XQuery

2. Haskell —  чистый функциональный. Назван в  честь Хаскелла Карри.

3. LISP (Джон  МакКарти, 1958, множество его потомков, наиболее современные из которых  — Scheme и Common Lisp).

4. ML (Робин  Милнер, 1979, из ныне используемых диалектов известны Standard ML и Objective CAML).

5. Miranda (Дэвид  Тёрнер, 1985, который впоследствии  дал развитие языку Haskell).

6. Erlang —  (Joe Armstrong, 1986) функциональный язык  с поддержкой процессов.

7. Nemerle —  гибридный функционально/императивный язык.

8. F# - функциональный  язык для платформы .NET

Ещё не полностью  функциональные изначальные версии и Lisp и APL внесли особый вклад в создание и развитие функционального программирования. Более поздние версии Lisp, такие  как Scheme, а так же различные варианты APL поддерживали все свойства и концепции функционального языка.

Как правило, интерес к функциональным языкам программирования, особенно чисто функциональным, был сугубо научный, нежели коммерческий. Однако, таким примечательным языкам как Erlang, OCaml, Haskell, Scheme (после 1986) а так же специфическим R (статистика), Mathematica (символическая математика), J и K (финансовый анализ), и XSLT (XML) находили применение в индустрии коммерческого программирования. Такие широко распространенные декларативные языки как SQL и Lex/Yacc содержат некоторые элементы функционального программирования, они остерегаются использовать переменные. Языки работы с электронными таблицами также можно рассматривать как функциональные.

Многие нефункциональные языки, такие как C, C++ и C# могут вести себя как функциональные при использовании указателей на функцию, в соответствие с библиотекой <functional> и λ-исчислениями.

λ-исчисления позволили осуществить теоретическое  описание функции и её вычисление. Хотя функция чаще рассматривается как математическая абстракция, а не понятие из языка программирования, она составила базис всех языков функционального программирования на сегодняшний день. Сходное теоретическое понятие, комбинаторная логика, является более абстрактной нежели λ-исчисления и было основано раньше. Эта логика используется в некоторых эзотерических языках, например в Unlambda. И λ-исчисления, и комбинаторная логика были разработаны для более ясного и точного описания принципов и основ математики.

Первым функциональным языком был Lisp, созданный Джоном МакКарти в период его работы в Массачусетском технологическом институте в начале пятидесятых. Lisp ввел множество понятий функционального языка, хотя при этом исповедовал не только парадигму функционального программирования. Более поздние Scheme и Dylan были попытками упростить и усовершенствовать Lisp.

Язык обработки  информации (ИПЛ) иногда определяется как самый первый машинный функциональный язык. Это язык ассемблерного типа для работы со списком символов. У него было понятие «генератор», использующий функцию в качестве аргумента, а так же, поскольку язык ассемблерного уровня, он может позиционироваться как язык имеющих функции высшего порядка. Хотя в целом ИПЛ акцентирован на использование императивных понятий.

Кеннет Е. Айверсон разработал язык APL в начале шестидесятых, документировав его в  своей книге A Programming Language. APL оказал значительное влияние на FR-язык, созданный  Джоном Бэкусом. В начале девяностых Айверсон и Роджер Хьюи создали преемника APL — язык программирования J. В середине девяностых Артур Витни, ранее работавший с Айверсоном, создал язык K, который впоследствии использовался в финансовой индустрии на коммерческой основе.

В семидесятых  в университете Эдинбурга Робин  Милнер создал язык ML, а Дэвид Тернер начинал разработку языка SASL в университете Сент-Эндрюса и, впоследствии, язык Miranda в университете города Кент. В конечном итоге на основе ML были созданы несколько языков, среди которых наиболее известные Objective Caml и Standard ML. Так же в семидесятых осуществлялась разработка языка программирования по принципу Scheme (реализация не только функциональной парадигмы), получившего описание в известной работе «Lambda Papers», а так же в книге восемьдесят пятого года «Structure and Interpretation of Computer Programs», в которой принципы функционального программирования были донесены до более широкой аудитори

Информация о работе Парадигмы Томаса Куна