Что такое преднамеренное программирование - PullRequest
15 голосов
/ 14 октября 2008

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

Ответы [ 7 ]

9 голосов
/ 15 октября 2008

Ты заставил меня начать на этом ...
Похоже, С. Симони хотел перейти на следующий уровень абстракции от языков высокого уровня. Уменьшите зависимость клиентов от разработчиков для внесения каждого изменения в коде (загадочно для людей, не находящихся в разработке). Поэтому он изобрел этот новый продукт под названием IP, в котором есть редактор графического интерфейса типа WYSIWYG для создания модели, специфичной для домена. (т. е. IP имеет графический интерфейс для создания строительных блоков для вашего приложения. LISP позволял вам создавать мета / строительные блоки, но не так, как это могли бы сделать специалисты по предметной области.)
Как и модели в UML, обещание состоит в том, что вы можете автоматически генерировать соответствующий исходный код одним нажатием кнопки. Таким образом, специалисты по доменам могут настроить модель в будущем и нажать кнопку «Испечь», чтобы доставить следующую версию приложения. Однако кажется, что используются DSL с дополнительным преимуществом, что несколько созданных пользователями DSL могут общаться друг с другом через встроенный механизм IP ... что означает, что финансовая модель и модель продаж могут взаимодействовать и повторно использовать блоки по мере необходимости. Как и в случае с DSL, вы получаете преимущество кода, который передает намерение разработчика, а не смягчает языковые ограничения реализации.

Идея состоит в том, чтобы дать больший контроль над БА и экспертами в области, которые действительно знают, что нужно ...

Обновление : Реальное использование выглядит как «еще нет» ... хотя Симони считает, что «1015 * абсолютно в долгосрочной перспективе ».
Short Story : MS сжал IP в пользу .Net Framework, Симони покинул MS и создал свою собственную компанию Intentional Software '.. с контрактом, что он мог бы использовать идеи IP, но ему придется переписать свой рабочий прото с нуля ... (это должно его замедлить). Я думаю, что это все еще в стадии разработки ... и пишется на C # (для загрузки)

Источники:

Думать до вчерашнего дня .. Я ничего об этом не знал. Следственный репортер подписывает. Возвращаясь к дневной работе:)

6 голосов
/ 15 октября 2008

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

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

А может, это то, что сказал workmad3.

4 голосов
/ 18 ноября 2010

У меня немного другое понимание преднамеренного программирования (как более общего термина, а не только того, что делает Чарльз Симони). Он тесно связан с плавными интерфейсами и может быть достигнут с различной степенью сложности на современных объектно-ориентированных языках.

Некоторые из этих концепций основаны на доменно-ориентированном дизайне (на самом деле термин «свободный интерфейс» популяризировал Эрик Эванс, автор «синей книги») Программное обеспечение ).

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

Рассмотрим два приведенных ниже примера, которые достигают одного и того же: создание заказа для клиента со скидкой 10% и добавление к нему пары продуктов.

//C#, Normal version
Customer customer = CustomerService.Get(23);

Order order = new Order();
//What is 0.1? Need to look at Discount property to understand
order.Discount = 0.1; 
order.Customer = customer;

//What's 34?
Product product = ProductService.Get(34); 
//Do we really care about Order stores OrderLines?
order.OrderLines.Add(new OrderLine(product, 1)); 

Product product2 = ProductService.Get(54);
order.OrderLines.Add(new OrderLine(product2, 2)); //What's 2?

Order.Submit();

//C#, Fluent version
//byId is named parameter, states that this method looks up customer by Id
ICustomerForOrderCreation customer = 
  CustomerService.GetCustomerForOrderCreation(byId: 23); 
//Explicit method to create a discount order and explicit percentage
Order order = customer.CreateDiscountOrder(10.Percent()) 
  .WithProduct(ProductService.Get(byId: 34))
  .WithProduct(ProductService.Get(byId: 54))
  .WithQuantity(2); //Explicit quantity

Order.Submit();

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

4 голосов
/ 14 октября 2008

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

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

Для вашей последней части, да LISP (и, следовательно, преднамеренное программирование) используется в некоторых проектах. Пол Грэм - отличный сторонник LISP, и другие примеры этого включают оригинальный Crash Bandicoot (для этого в LISP была создана система создания игровых объектов, включая компилятор LISP PlayStation)

3 голосов
/ 15 октября 2008

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

Почему? Фредерик Брукс уже ответил на этот вопрос более 20 лет назад: у нет ни одной серебряной пули , чтобы убить оборотня ...

2 голосов
/ 29 ноября 2015

Преднамеренное программирование - это кодирование вашего намерения или целей . Таким образом, это целенаправленное программирование или планирование. Подойдите к управлению.

0 голосов
/ 14 октября 2008

Это то место, где вы собираетесь программировать, вы не просто случайно делаете это. ;)

...