~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 2DAD067CD6C83A20E75CCFB9EB882884__1707111360 ✰
Заголовок документа оригинал.:
✰ Intentional programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Преднамеренное программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Intentional_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/2d/84/2dad067cd6c83a20e75ccfb9eb882884.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/2d/84/2dad067cd6c83a20e75ccfb9eb882884__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:34:20 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 5 February 2024, at 08:36 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Преднамеренное программирование — Википедия Jump to content

Преднамеренное программирование

Из Википедии, бесплатной энциклопедии

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

Преднамеренное программирование было разработано бывшим Microsoft главным архитектором Чарльзом Симони , который возглавлял группу в Microsoft Research , которая разработала парадигму и создала интегрированную среду разработки (IDE) под названием IP (для намеренного программирования), которая продемонстрировала парадигму. Microsoft решила не внедрять парадигму намеренного программирования, поскольку в начале 2000-х годов Microsoft внедряла C # и .NET, чтобы противостоять внедрению Java. [1] Чарльз Симони решил, с одобрения Microsoft, заимствовать свою идею у Microsoft и самому коммерциализировать ее. он основал компанию Intentional Software Для этого . Microsoft передала Intentional Software лицензию на патенты на преднамеренное программирование, которые Симони приобрел во время работы в Microsoft, но без исходного кода.

Обзор намеренного программирования, разработанного в Microsoft Research, приведен в главе 11 книги « Генераторное программирование: методы, инструменты и приложения» . [2]

Цикл разработки [ править ]

По замыслу Симони, разработка нового приложения с использованием парадигмы намеренного программирования происходит следующим образом. Программист создает WYSIWYG -подобную среду, поддерживающую схему и обозначение бизнес-знаний для заданной проблемной области (например, приложений для повышения производительности или страхования жизни). Затем пользователи используют эту среду для фиксации своих намерений, которые записываются на высоком уровне абстракции. Среда может управлять этими намерениями и помогать пользователю создавать семантически более богатые документы, которые можно обрабатывать и выполнять, подобно электронной таблице . Записанные знания выполняются оценщиком или компилируются для создания окончательной программы. Последовательные изменения выполняются только на уровне WYSIWYG. В отличие от текстовых процессоров, электронных таблиц или программного обеспечения для презентаций, преднамеренная среда лучше поддерживает структуру и семантику выражаемых намерений и может создавать интерактивные документы, которые более полно отражают то, что пользователь пытается выполнить. Особым случаем является ситуация, когда контент программный код , и среда становится интеллектуальной IDE. [3]

Разделение хранения и представления исходного кода [ править ]

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

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

Система использует нормализованный язык для популярных языков, таких как C++ и Java , позволяя пользователям среды смешивать и сопоставлять их с идеями Эйфеля и других языков. IP , часто упоминаемый в том же контексте, что и языково-ориентированное программирование с использованием предметно-ориентированных языков и аспектно-ориентированное программирование , призван обеспечить некоторые прорывы в генеративном программировании . Эти методы позволяют разработчикам расширять языковую среду для захвата конструкций, специфичных для предметной области, не вкладывая средства в написание полноценного компилятора и редактора для любых новых языков.

Пример программирования [ править ]

Программа Java , записывающая числа от 1 до 10, используя синтаксис фигурных скобок , может выглядеть так:

 для   (  int   я   знак равно   1  ;   я   <=   10  ;   я  ++  )   { 
     System  .   вне  .   println  (  "число"   +   i  ); 
   } 

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

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

В системах намеренного программирования приведенный выше цикл на каком-то уровне может быть представлен как нечто столь же очевидное, как « print the numbers 1 to 10Затем система будет использовать намерения для генерации исходного кода, что, вероятно, очень похоже на приведенный выше код. Ключевое отличие состоит в том, что системы намеренного программирования поддерживают семантический уровень, которого нет в исходном коде, и который может значительно облегчить читаемость в более крупные программы.

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

Личность [ править ]

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

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

Основным преимуществом этого является то, что если объект переименовывается, все ссылки на него в программе остаются действительными (так называемая ссылочная целостность ). Это также означает, что если одно и то же имя используется для уникальных определений в разных пространствах имен (например, « .to_string()"), ссылки с одинаковым именем, но разной идентификацией не будут переименованы, как это иногда случается при поиске/замене в текущих редакторах. Эта функция также позволяет легко иметь многоязычные версии программы; она может иметь набор английских языков. -языковые названия для всех определений, а также набор названий на японском языке, которые можно менять по желанию.

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

Уровни детализации [ править ]

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

<<выведите цифры от 1 до 10>>
 

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

Похожие работы [ править ]

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

См. также [ править ]

Ссылки [ править ]

  1. ^ «Симони объясняет: «Когда Microsoft добилась огромных успехов в .Net в ближайшем будущем, было непрактично каким-то образом послать кого-то из той же организации, кто сказал: «Это не то, как вы должны поступать - что, если вы поступал другим, более разрушительным способом?» (Цитата из «Все, что вы можете сделать, я могу сделать мета» , вторник, 9 января 2007 г., Скотт Розенберг , Technology Review . Архивировано 20 сентября 2020 г. на archive.today )
  2. ^ Генеративное программирование: методы, инструменты и приложения , Кшиштоф Чарнецкий и Ульрих Эйзенекер, Аддисон-Уэсли , Ридинг, Массачусетс , США, июнь 2000 г.
  3. ^ Скотт Розенберг: « Все, что вы можете сделать, я могу сделать мета ». Technology Review , 8 января 2007 г. Архивировано 20 сентября 2020 г. на archive.today.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 2DAD067CD6C83A20E75CCFB9EB882884__1707111360
URL1:https://en.wikipedia.org/wiki/Intentional_programming
Заголовок, (Title) документа по адресу, URL1:
Intentional programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)