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

Главная > Информатика > Языки программирования > Парадигмы программирования
Языки передачи, хранения, обработки и представления информации

Разделы страницы о концепциях и технологиях программирования:


Технологии программирования (сетевые обзоры и сборники статей)

Классификации языков программирования

По методологии и назначению языки программирования можно разделить на следующие категории (перечислены по алфавиту):

  1. Аспектно-ориентированные
  2. Декларативные
  3. Динамические
  4. Логические
  5. Объектно-ориентированные
  6. Описания интерфейсов
  7. Прототипные
  8. Процедурные (императивные)
  9. Рефлексивные (поддерживающие отражение)
  10. Скриптовые (сценарные)
  11. с обобщённым программированием
  12. Стековые [язык Форт]
  13. Учебные [например, язык Лого]
  14. Функциональные [R, Haskell]
  15. Эзотерические

Ссылки по классификации методологий и языков программирования:

Далее приведены главы с описанием каждой методологии, но уже не по алфавиту, а в порядке усложнения.

Процедурное (императивное) программирование

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

Декларативное программирование

Декларативные языки программирования - это языки объявлений и построения структур. К ним относятся функциональные и логические языки программирования. В этих языках не производится алгоритмических действий явно, то есть алгоритм не задается прграммистом, а строится самой программой. В декларативных языках задается, производится построение какой-либо структуры или системы, то есть декларируются (объявляются) какие-то свойства создаваемого объекта. Эти языки получили широкое применение в 1) системах автоматизированного проектирования (САПР), 2) в так называемых CAD-пакетах, 3) в моделировнии, 4) системах исккусственного интеллекта [и, наверное, 5) в визуальном программировании?].

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

Структу́рное программи́рование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 1970-х годах Э. Дейкстрой и др. В соответствии с данной методологией любая программа строится без использования оператора goto [ноги которого растут из машинного языка Assembler] из трёх базовых управляющих структур: последовательность, ветвление, цикл; кроме того, используются подпрограммы. При этом разработка программы ведётся пошагово, методом «сверху вниз» [вложенно].

Методология структурного программирования появилась как следствие возрастания сложности решаемых на компьютерах задач, и соответственно, усложнения программного обеспечения. [Запутанность переходов между строками кода с помощью GOTO порождала трудно отлавливаемые ошибки и непредсказуемые последствия. На самом деле, оператор GOTO опасен, но очень эффективен.]

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

Мо́дульное программи́рование — это организация программы как совокупности небольших независимых блоков, называемых модулями. [Является развитием концепций подпрограмм из структурного программирования.]

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

Термин «модуль» в программировании начал использоваться в связи с внедрением модульных принципов при создании программ. В 1970-х годах под модулем понимали какую-либо процедуру или функцию, написанную в соответствии с определёнными правилами. Например: «модуль должен быть простым, замкнутым (независимым), обозримым (от 50 до 100 строк), реализующим только одну функцию задачи, имеющим одну входную и одну выходную точку». Первым основные свойства программного модуля более-менее чётко сформулировал Д. Парнас (David Parnas) в 1972 году: «Для написания одного модуля должно быть достаточно минимальных знаний о тексте другого». Таким образом, в соответствии с определением, модулем могла быть любая отдельная процедура (функция) как самого нижнего уровня иерархии (уровня реализации), так и самого верхнего уровня, на котором происходят только вызовы других процедур-модулей.

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

Впервые специализированная синтаксическая конструкция модуля была предложена Н. Виртом в 1975 г. и включена в его новый язык Modula (а затем - Modula-2).

Минусы модульности: требуется большая аккуратность и больше времени на разработку. При выполнении требуется больше памяти. Преимущества модульного программирования: 1) модули можно тестировать, отлаживать и поддерживать по отдельности; 2) можно повторно использовать модули из других проектов или купить их у сторонних производителей; 3) программу можно легче модернизировать простой заменой модулей.

Обобщённое программирование

Обобщённое программирование (англ. generic programming) — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными языками программирования. Возможности обобщённого программирования впервые появились в виде дженериков (обобщённых функций) в 1970-х годах в языках Клу и Ада, затем в виде параметрического полиморфизма в ML и его потомках, а затем во многих объектно-ориентированных языках, таких как C++, Java, Object Pasca, D, Eiffel, языках для платформы .NET и др.

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

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

  1. Инкапсуляция - объединение данных и свойственных им процедур обработки в одном объекте. Фундаментальным понятием является класс - шаблон, на основе которого может быть создан конкретный программный объект. Он описывает свойства и методы, определяющие поведение объектов этого класса. Каждый конкретный объект, имеющий структуру этого класса, называется экземпляром класса.
  2. Наследование - такая организация классов, которая предусматривает создание новых классов на базе существующих и позволяет классу потомку иметь (наследовать) все свойства класса – родителя.
  3. Полиморфизм - означает, что рожденные объекты обладают информацией о том, какие методы они должны использовать в зависимости от того, в каком месте цепочки (дерева классов) они находятся. Это концепция, реализующая "множество методов в одном интерфейсе".
  4. Модульность - такая организация объектов, когда они заключают в себе полное определение их характеристик, никакие определения методов и свойств не должны располагаться вне его, это делает возможным свободное копирование и внедрение одного объекта в другие.
  5. .

ООП обычно реализуется совместно с событийно-ориентированным и визуальным пограммированием.

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

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

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

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

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

Языки функционально программирования (Лисп, Хэскел, R...)

Глубокая идея функциональных языков на самом деле гораздо глубже, чем кажется на первый взгляд. Джон Маккарти, автор Лиспа, перевернул всё программирование 50-х и 60-х годов с головы на ноги: он поставил на первое место не данные, вокруг которых суетятся мелкие программки, а сами эти программки. Данные же он предлагал протаскивать через цепочки выполнения, а язык для описания этого дела был назван «List Processor», то есть Язык Обработки Списков. (С Лурки)

Языками функционального программирования являются Haskell и универсальный сценарный язык Python, а также Erlang - Функциональный язык программирования с сильной динамической типизацией, предназначенный для создания распределённых вычислительных систем, который разработан и поддерживается компанией Ericsson.

Еще один функциональный язык программирования - Scheme, один из трёх наиболее популярных в наши дни диалектов языка Лисп. Авторы языка - Гай Стил и Джеральд Сассмен из Массачусетского технологического института - создали его еще в середине 1970-х годов.

Функциональный язык статистической обработки R

В последнее время силное развитие получили технологии обработки больших данных (Big Data и Data Science). В этих сферах необходимо иметь мощный язык для работы со статистикой и графиками. И таким языком стал именно функционально-ориентированный язык R. Сегодня R уже конкурирует по популярности с SQL, он активно используется в коммерческих организациях, исследовательских и университетах.

R — мощный скриптовый язык, ориентированный на статистику. Его можно рассматривать в качестве конкурента для таких аналитических систем, как SAS Analytics, не говоря уже о таких более простых пакетах, как StatSoft STATISTICA или Minitab. R-фанаты считают, что этот язык заключает в себя возможности Явы, Питона, Перла, Раби и Дотнета.

На основе R создан другой статистический интерпретатор - язык S.

Языки функционально-логического программирования (Mercury, Curry)

Методы функционального программирования попытались приложить для решения проблем логического (интеллектуального) программирования. Так появились языки функционально-логического программирования, например, Curry, Mercury.


Главная

Языки программирования: 1GL и 2GL | 3GL (Яву) | Пионеры ООП | 4GL и RAD | Визуально-объектные | Сценарные (скриптовые) | Ява-подобные Парадигмы информатики

Алгоритмы | Бизнес-анализ | Жизненный цикл программ | Интернет | IT-стандарты | ОС | СУБД | Искусственный интеллект и 5GL

ИТ-менеджмент | Электроника | Математика | Эвристика | Компьютерные игры

На правах рекламы (см. условия):    


© «Сайт Игоря Гаршина», 2002, 2005. Пишите письма (Письмо И.Гаршину).
Страница обновлена 18.01.2018
Я.Метрика: просмотры, визиты и хиты сегодня