Перейти к содержимому

Декларативная цена что это

  • автор:

ДЕКЛАРАТИВНЫЙ

ДЕКЛАРАТИ́ВНЫЙ, декларативная, декларативное; декларативен, декларативна, декларативно (книжн.). прил. к декларация в 1 знач.; торжественный, объявляемый в порядке осведомления. Это заявлено в декларативной форме.

Толковый словарь Ушакова . Д.Н. Ушаков. 1935-1940 .

Синонимы:

Смотреть что такое «ДЕКЛАРАТИВНЫЙ» в других словарях:

  • декларативный — внешний, торжественный, показной, словесный Словарь русских синонимов. декларативный прил., кол во синонимов: 4 • внешний (33) • … Словарь синонимов
  • декларативный — ая, ое. déclarartif, ve adj. Торжественный, объявляемый в порядке осведомления. Это заявлено в декларативной форме. Уш. 1934. || Связанный с декларацией, излагающий какую л. программу действий (обычно без достаточного обоснования). Деклративное… … Исторический словарь галлицизмов русского языка
  • ДЕКЛАРАТИВНЫЙ — ДЕКЛАРАТИВНЫЙ, ая, ое; вен, вна (книжн.). 1. полн. Имеющий форму декларации (во 2 знач.), торжественный. Д. тон. 2. Чисто словесный, внешний. Обещания носят д. характер. | сущ. декларативность, и, жен. Толковый словарь Ожегова. С.И. Ожегов, Н.Ю.… … Толковый словарь Ожегова
  • Декларативный язык программирования — язык программирования высокого уровня, построенный: на описании данных; и на описании искомого результата. Декларативные языки подразделяются на функциональные и логические языки. См. также: Декларативные языки программирования Языки… … Финансовый словарь
  • декларативный язык — Язык программирования для выражения определений. Примечание В качестве такого языка часто выступает язык описания данных. [ГОСТ 19781 90] декларативный язык непроцедурный язык Язык программирования, который задает отношения между объектами, но не … Справочник технического переводчика
  • Декларативный язык — 34. Декларативный язык Declarative language Язык программирования для выражения определений. Примечание. В качестве такого языка часто выступает язык описания данных Источник: ГОСТ 19781 90: Обеспечение систем обработки информации программное.… … Словарь-справочник терминов нормативно-технической документации
  • Декларативный — I прил. 1. соотн. с сущ. декларация I, связанный с ним 2. Имеющий форму декларации [декларация I], носящий характер декларации; торжественный. II прил. 1. соотн. с сущ. декларация II, связанный с ним 2. Содержащийся в декларации [декларация II].… … Современный толковый словарь русского языка Ефремовой
  • декларативный — декларативный, декларативная, декларативное, декларативные, декларативного, декларативной, декларативного, декларативных, декларативному, декларативной, декларативному, декларативным, декларативный, декларативную, декларативное, декларативные,… … Формы слов
  • декларативный — декларат ивный; кратк. форма вен, вна … Русский орфографический словарь
  • декларативный — кр.ф. декларати/вен, декларати/вна, вно, вны; декларати/внее … Орфографический словарь русского языка
  • Обратная связь: Техподдержка, Реклама на сайте
  • �� Путешествия

Экспорт словарей на сайты, сделанные на PHP,

WordPress, MODx.

  • Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
  • Искать во всех словарях
  • Искать в переводах
  • Искать в ИнтернетеИскать в этой же категории

Поделиться ссылкой на выделенное

Прямая ссылка:

Нажмите правой клавишей мыши и выберите «Копировать ссылку»

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

ПЛАНИРОВАНИЕ ЗАКУПОК / ABC-АНАЛИЗ / XYZ-АНАЛИЗ / ПРОГРАММИРОВАНИЕ В ОГРАНИЧЕНИЯХ / ЗАДАЧА УДОВЛЕТВОРЕНИЯ ОГРАНИЧЕНИЙ / КОМБИНАТОРНЫЙ ПОИСК / КОМБИНАТОРНАЯ ОПТИМИЗАЦИЯ / PROCUREMENT PLANNING / ABC-ANALYSIS / XYZ-ANALYSIS / CONSTRAINT PROGRAMMING / CONSTRAINT SATISFACTION PROBLEM / COMBINATORIAL SEARCH / COMBINATORIAL OPTIMIZATION

Аннотация научной статьи по экономике и бизнесу, автор научной работы — Македонов Роман Александрович, Зуенко Александр Анатольевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по экономике и бизнесу , автор научной работы — Македонов Роман Александрович, Зуенко Александр Анатольевич

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

Методика применения ABC/XYZ-анализа для целей управления запасами в ERP-системе предприятия
Особенности организации закупочной деятельности
Совершенствование системы управления запасами на торговом предприятии

Применение методов удовлетворения нечисловых ограничений в задачах качественного моделирования статических и динамических систем

i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

DECLARATIVE APPROACHTO PROCUREMENT PLANNING BY A SMALL ENTERPRISE

The paper proposes to apply constraint programming technology to solve the problem of merchandise turnover planning for small enterprises. The choice in favor of this technology is due to the fact that often classical numerical mathematical models are not able to adequately describe the subject domain tasks, which require flexible constraints, that is, a variety of logical and analytical conditions for the delivery, delivery time and cost, storage and sale of goods.

Текст научной работы на тему «Декларативный подход к планированию оборота товаров для малых предприятий»

DOI: 10.25702/^^2307-5252.2019.9.126-136 УДК 004.832

Р. А. Македонов, А. А. Зуенко

Институт информатики и математического моделирования ФИЦ КНЦ РАН

ДЕКЛАРАТИВНЫЙ ПОДХОД К ПЛАНИРОВАНИЮ ЗАКУПОК МАЛЫМ ПРЕДПРИЯТИЕМ*

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

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

R. A. Makedonov, A. A. Zuenko

DECLARATIVE APPROACH TO PROCUREMENT PLANNING BY A SMALL ENTERPRISE

The paper proposes to apply constraint programming technology to solve the problem of procurement planning by a small enterprise. The choice in favor of this technology is due to the fact that often classical numerical mathematical models are not able to adequately describe the subject domain tasks, which require flexible constraints, that is, a variety of logical and analytical conditions for the delivery, delivery time and cost, storage and sale of goods.

procurement planning, ABC-analysis, XYZ-analysis, constraint programming, constraint satisfaction problem, combinatorial search, combinatorial optimization.

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

* Работа выполнена в рамках темы НИР «Развитие методологии построения интеллектуальных мультипредметных систем информационной поддержки регионального развития на примере территорий Арктической зоны Российской Федерации (АЗРФ)» (№ 0226-2019-0036).

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

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

Исходные данные для задачи берутся из результатов совмещенного ABC-XYZ-анализа. ABC-анализ — это инструмент, который позволяет определить рейтинг товаров по получаемой прибыли (как один из возможных критериев) [1, 2]. Он основан на правиле Парето: согласно которому 20% ассортиментных позиций обеспечивает 80% прибыли. Таким образом, весь ассортимент торгового предприятия в результате ABC-анализа можно разделить на группы по степени важности: группа A — очень важные товары, которые приносят наибольшую прибыль; группа B — товары средней степени важности; группа C — наименее важные товары, это претенденты на исключение из ассортимента.

XYZ-анализ — это инструмент, позволяющий разделить продукцию по степени стабильности продаж и уровню колебаний потребления [2]. Анализ заключается в расчете каждой товарной позиции колебания расхода (коэффициента вариации). Этот коэффициент показывает отклонение расхода от среднего значения и выражается в процентах. Результатом XYZ-анализа является группировка товаров по трем категориям, исходя из стабильности их поведения:

• категория X, в которую попадают товары с колебанием продаж от 5 % до 15 % (условно), характеризующиеся стабильной величиной потребления и высокой степенью прогнозирования;

• категория Y, товары с колебанием продаж от 15 % до 50 %. Это товары с сезонными колебаниями и средними возможностями их прогнозирования;

• категория Z, товары с колебанием продаж от 50 % и выше. Это товары с нерегулярным потреблением и непредсказуемыми колебаниями.

При совмещенном ABC-XYZ-анализе определяется девять групп товаров (AX,, BX, CX, . CZ), из которых наибольших интерес вызывают товары групп AX и BX, как наиболее прибыльные и прогнозируемые.

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

Программирование в ограничениях как основа эффективной совместной обработки количественных и качественных соотношений

В качестве методологической основы исследований выбрана технология программирования в ограничениях. Для применения предлагаемой технологии необходимо, чтобы прикладная задача была сформулирована в виде задачи удовлетворения ограничений.

Согласно [3-5] задача удовлетворения ограничений (CSP — Constraint Satisfaction Problem) состоит из трех компонент: < X, D, C >. X — множество

переменных . В — множество доменов , где Вг является доменом (областью определения) переменной Хг. С — множество ограничений , которые предписывают допустимые комбинации значений переменных. Каждый домен Юг описывает множество допустимых значений для переменной Хг. Под ограничением понимается любое соотношение между переменными предметной области. В качестве ограничений могут выступать арифметические выражения; логические формулы; таблицы; выражения, формулируемые на языке специализированных теорий.

Решением задачи CSP является полное присваивание, которое удовлетворяет всем ограничениям. В некоторых случаях необходимо получить все решения. Иногда требуется найти такое решение, в котором значения переменных оптимизировали бы некоторый заданный функционал. CSP-задачи принадлежат классу ОТ—полных задач.

Технология программирования в ограничениях предоставляет мощные и гибкие методы, алгоритмы решения задач комбинаторного поиска. Особенности технологии:

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

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

3. Вывод (распространение) реализуется как целенаправленное сужение изначально заданных областей определения переменных.

4. Эвристики, используемые в процедурах поиска, разрабатываются не под конкретную задачу, а являются универсальными.

5. Благодаря архитектуре систем программирования в ограничениях, появляется возможность совместно обрабатывать количественные и качественные ограничения.

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

Программирование в ограничениях особенно полезно там, где нет возможности получить удовлетворительное/адекватное решение средствами «обычной» математики. Оно используется при решении задач планирования, проектирования, прогнозирования, в инженерных и экономических расчетах, при создании графических интерфейсов, в системах понимания естественного языка и др. [6, 7].

Весь процесс рассуждений на ограничениях сводится к поэтапному усечению изначально заданных областей определения переменных. Любой метод удовлетворения ограничений должен проектироваться особым образом и состоять из двух основных частей: части, реализующей поиск и части, реализующей вывод на ограничениях. Начнем с описания части, отвечающей за вывод. Как правило, под выводом на ограничениях понимается процесс сокращения размерности пространства поиска, обеспечивающий «сужение» доменов переменных, упрощение ограничений и т.п. и, при этом, имеющий низкую вычислительную сложность (оценивается полиномом низкой степени). Алгоритмы, реализующие вывод на ограничениях, называются алгоритмами-

распространителями или алгоритмами-пропагаторами. Данные алгоритмы исключают из областей определения переменных заведомо лишние значения, то есть значения, которые не входят ни в одно из допустимых присваиваний. Завершение алгоритмов-распространителей может произойти с тремя возможными исходами. Во-первых, в результате работы алгоритмов-распространителей может быть получено решение исходной задачи CSP: все домены переменных сужаются до одноэлементных множеств. Во-вторых, может быть установлено, что область определения некоторой переменной пуста, и тогда решения соответствующей задачи CSP не существует. Наконец, алгоритмы-распространители могут остановиться, достигнув некоторой неподвижной точки, а решение задачи CSP еще не получено. В этом случае в дело вступают методы, реализующие стратегии интеллектуального поиска. Эти методы, в отличие от методов вывода, имеет существенную вычислительную сложность, поскольку сопряжены с перебором вариантов гипотез о возможных значениях тех или иных переменных. В отличие от методов динамического программирования, например метода перемножения числовых матриц (matrix multiplication method), в качестве стратегий поиска в рамках парадигмы программирования в ограничениях, в основном, используются различные варианты информированного поиска в глубину с возвратами, а также методы локального поиска.

Архитектура систем программирования в ограничениях напоминает архитектуру вычислительных машин (рис. 1). В качестве своеобразной шины данных в системах программирования в ограничениях выступает так называемое хранилище ограничений, представляющее собой, список пар «переменная — перечень значений переменной, которые она может принимать на текущем этапе вывода». Аналогом центрального процессора выступает алгоритм — дирижер (управляющая подпрограмма), реализующий базовую стратегию поиска.

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

Декларативный подход как тенденция в разработке интерфейсов мобильных приложений

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

мобильная разработка
декларативный подход
императивный подход
Клоков Сергей Алексеевич

Журнал «Научный лидер» выпуск # 1 (99), Январь ‘23

Дата публикации 14.01.2023

Цитировать

Клоков С. А. Декларативный подход как тенденция в разработке интерфейсов мобильных приложений // . 2023. №1 (99). URL: https://scilead.ru/article/3741-deklarativnij-podkhod-kak-tendentsiya-v-razra

За каждым приложением стоит отдельный набор средств и библиотек для создания пользовательского интерфейса. Эти библиотеки и фреймворки играют огромную роль в том, как создаются приложения, а также насколько они производительны. Каждое средство имеет свой подход описания экранных форм в виде кода, но данные подходы можно обобщить до 2 групп: декларативной и императивной.

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

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

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

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

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

Основным представителем декларативного подхода является Jetpack Compose, разрабатываемый компанией Google в рамках Jetpack — набора библиотек и инструментов для упрощения разработки под Android. Стоит рассмотреть ключевые причины перехода на данный фреймворк.

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

Инструментарий пользовательского интерфейса умеет в разы больше кода, по сравнению с новым. В Compose, в отличие от оригинального подхода, не нужно создавать файлы разметки. Меньший код помогает избежать множества ошибок. Это также делает код простым и легким в обслуживании.

При разработке с использованием фреймворка Compose используются два термина: «компоновка» (“composition”) и «перекомпоновка» (“recomposition”). Компоновка — процесс, в котором выполняются составные функции и создается пользовательский интерфейс для пользователя. Перекомпоновка — процесс обновления пользовательского интерфейса в результате изменения состояния или данных, которые составной объект использует для своего отображения. Во время перекомпоновки Compose может понять, какие данные использует каждая композиция, и обновляет только те компоненты пользовательского интерфейса, которые были изменены. Остальные составные элементы будут пропущены.

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

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

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

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

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

Важно заметить, что Jetpack Compose может использоваться не только для разработки Android интерфейсов. Compose Multiplatform получил стабильную версию 1.0 в декабре 2021 года. Он позволяет производить разработку для Android, Windows, Linux, а также информационных систем в сети Интернет.

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

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

Следующей проблемой являются побочные эффекты совместимости. При использовании Compose совместно с XML разметкой увеличивается размер приложения и время сборки. Но как только приложение будет полностью перенесено на Compose, данные параметры будут лучше, чем до переноса.

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

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

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

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

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

Список литературы

  1. Императивное и декларативное программирование. OTUS JOURNAL // [Электронный ресурс]. — Режим доступа: https://otus.ru/journal/imperativnoe-i-deklarativnoe-programmirovanie/ (дата обращения 10.01.2023).
  2. Концепции Jetpack Compose, которые должен знать каждый разработчик. AppTractor // [Электронный ресурс]. — Режим доступа: https://apptractor.ru/info/articles/kontseptsii-jetpack-compose-kotorye-dolzhen-znat-kazhdyy-razrabotchik.html (дата обращения 08.01.2023).
  3. Обзор Android Jetpack Compose. Русские Блоги //: [Электронный ресурс]. — Режим доступа: https://russianblogs.com/article/75801402833/ (дата обращения 09.01.2023).
  4. Jetpack Compose. Хабр // [Режим доступа]. — Режим доступа: https://habr.com/ru/post/451112/ (дата обращения 10.01.2023).

Декларативный и императивный подход написания кода

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

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

Функциональное программирование — это парадигма, в которой процесс вычисления определяется вычислением значений функций в математическом их понимании, а не в понимании подпрограмм, как в процедурном программировании . То есть в этих двух парадигмах значение слова “функция” трактуется по-разному. Это нужно запомнить и не путать. В Java ты с этим не запутаешься: функции в значении подпрограмм — это “методы”, а функции как математические функции — это просто “функции” (также: лямбда-функции или method reference).

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

Положительные стороны функционального программирования
  • Повышение надежности кода
  • Удобство организации модульного тестирования
  • Возможности оптимизации кода при компиляции
  • Возможности параллелизма
Отрицательные стороны функционального программирования

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

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

Краткая справка по функциональному программированию завершена, теперь перейдем непосредственно к стилям программирования.

Императивное программирование — это парадигма программирования, для которой характерны следующие черты:

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

Основные черты императивных языков:

  • Использование именованных переменных.
  • Использование оператора присваивания.
  • Использование составных выражений.
  • Использование подпрограмм.

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

К императивным языкам программирования относятся C, C++.

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

Другой язык декларативного программирования — SQL.

Чтобы сравнить два стиля программирования , рассмотрим пример из реальной жизни: как объяснить человек, как добраться до какого-то места?

Представим ситуацию: к нам подошел человек на улице и спросил: “Как пройти к музею N?”

При императивном подходе мы бы объясняли ему алгоритм того, как добраться туда пешком:

  • сейчас развернуться
  • идти 2 квартала по прямой
  • повернуть направо

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

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

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

Поэтому на данный момент Java поддерживает как и императивный (например, написание кода вызовов методов), так и декларативный подход (например, аннотации, доступные в Runtime).

Подведем итог:
  • Существуют различные парадигмы программирования.
  • Есть декларативный и императивный подходы.
  • Выбирать стоит тот, который лучше будет справляться с решением поставленных задач.
  • Java — мультипарадигменный язык, поддерживающий оба подхода.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *