Виды программирования в современности. Основы декларативного языка

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

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

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

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

Для декларативных языков (SQL):

Вам больше не нужно заботиться о цикле. Код легче читать и легче поддерживать.

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

Количество кода здесь, вероятно, то же самое. Но для более сложных циклов результаты разные.

Результаты с использованием SQL намного проще:

О языках: понятие

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

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

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

Задумываясь, что такое языки программирования, можно просто уяснить – это то, что компьютер использует для «разговора» с пользователем и программным обеспечением. Своеобразный машинный код.

Отличие от алгоритмов

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

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

Важно: любое приложение на устройстве непосредственно начинается с алгоритмов.

Особенности алгоритмических познаний

Процедурные знания еще называют алгоритмическими. Они отвечают на следующие вопросы:

  1. Как лучше выполнить что-либо?
  2. Как избежать классических ошибок при выполнении?

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

Наилучшим примером в этом случае является изобретатель Генрих Саулович Альтшуллер, который решил следовать по этому пути еще будучи подростком. Альтшуллер создал алгоритм того, как увеличить решение изобретательской задачи.

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

Представления о процедурном знании

Здесь всё сложнее. Умение жарить яичницу, умение открывать дверь или умываться — не воспринимается, как процедурное знание. Всё это настолько привычно и естественно, что все мыслимые и немыслимые действия, которые обычно выполняет человек, он не воспринимает как алгоритм.

попробуйте привести примеры декларативных и процедурных знаний

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

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

Примеры декларативных и процедурных знаний

Яблоко зеленое — это декларативное знание. Футбольное поле — тоже. Но яблоко может быть не только зеленым, да и не яблоком вовсе. Чтобы отличить настоящее яблоко от изготовленного из воска, потребуется знание того, как оно выглядит в реальности и другие отличия (запах, текстура, форма).

декларативные знания примеры я знаю что

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

  • кулинарный рецепт;
  • сборка автомобиля;
  • написание сочинения или стиха.

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

В алгоритме всегда труднее ошибиться, чем в описании. Процедурное знание, как правило, тестируется на предмет работоспособности. Декларативное тоже требует проверки, но какой именно — определяет область использования декларативного знания.

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

Что такое декларативная память?

девушка с проводами

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

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

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

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

§ 2. Алгоритмическая декомпозиция. В процедурном программировании мы представляем программу как иерархию процедур, то есть алгоритмов. Таким образом, при решении задач, мы выполняем алгоритмическую декомпозицию, а основная используемая абстракция, то есть элемент языка, с которым работает программист – алгоритм. Такое структурирование кода диктует архитектуру приложений и подходы к проектированию и анализу. При этом, конечно, процедурное программирование является императивным. Рассмотрим пример: положим, мы создаем систему мониторинга автотранспорта, отображающую на экране карту с текущим положением автобусов. Определим какие процедуры (алгоритмы) нам следует реализовать для решения задачи. Разобьем их на три группы: относящиеся к автобусу, относящиеся к маршруту и относящиеся к карте.

Во-первых, основной алгоритм: (1) «перерисовать положение автобуса на карте с указанием гос. номера, номера маршрута, уровня топлива, вместимости и статуса положения на маршруте («на маршруте» или «сошел с маршрута»)». Он относится к автобусу. Чтобы его реализовать нам потребуется несколько вспомогательных процедур: (2) «определить гос. номер», (3) «определить местоположение», (4) «определить уровень топлива», (5) «определить вместимость», (6) «определить номер маршрута». Все эти вспомогательные алгоритмы будут обращаться к базе данных и получать соответствующую информацию.

Во-вторых, чтобы определить, находиться ли автобус на маршруте или нет, нам потребуется два алгоритма, относящихся к маршруту: (7) «определить координаты границ маршрута (многоугольника)», (8) «определить, находится ли точка с указанными координатами внутри указанного многоугольника (маршрута)».

Наконец, нам потребуются алгоритмы рисования, относящиеся к карте: (9) «нарисовать точку заданного цвета и размера», (10) «добавить на карту заданный текст заданного цвета и размера» (для подписи точки-автобуса).

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

При написании кода эта модель преобразуется в иерархию вызовов процедур в коде – каждому блоку соответствует процедура, использующая (вызывающая) процедуры, соответствующие подчиненным блокам 7 .

Для запуска программы мы вызываем корневой метод для некоторого автобуса:

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

Обратим внимание, что, давая краткое описание процедурного программирования в начале параграфа, мы указали три характеристики: 1) используемые способы декомпозиции (алгоритмическая), 2) используемые абстракции (процедуры-алгоритмы) и 3) используемые иерархии, упорядочивающие эти абстракции (иерархия вызовов процедур). Дело в том, что декомпозиция, абстракция и иерархия – базовые мыслительные операции на пути от неструктурированных и неформализованных к структурированным и формализованным знаниям. Человек использует их не только в программировании, но и вообще при решении сложных задач: разделяет задачу на части (декомпозиция), выделяет только существенные аспекты (абстракция) и структурирует элементы в иерархии. Читатель может найти подробный анализ этих вопросов применительно к разработке программного обеспечения к книге [Буч 3], где этому посвящен отдельный раздел. Можно сказать, что именно используемые виды этих операций определяют подходы и к кодированию, и к проектированию, и к анализу, то есть определяют парадигму программирования. Дадим следующее уточненное определение:

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

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

Другая широко используемая парадигма программирования — функциональное программирование.

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

Преимущества

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

Недостатки

  • Использование функционального программирования исключительно в коммерческой разработке программного обеспечения не рекомендуется и не делается
  • Это требует большого количества памяти и времени
  • Это может оказаться менее эффективным, чем другие парадигмы

Оцените статью
Fobosworld.ru
Добавить комментарий

Adblock
detector