Вопрос

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

Это было полезно?

Решение

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

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

Обновлять:Реальное использование выглядит как «пока нет»...хотя Симони считает 'абсолютно в долгосрочной перспективе'.
Короткий рассказ:MS отказалась от IP в пользу .Net framework, Симони покинул MS и основал свою собственную компанию.Преднамеренное программное обеспечение'..с контрактом, согласно которому он мог использовать идеи интеллектуальной собственности, но ему пришлось бы переписать свой рабочий прототип с нуля..(это должно его замедлить).Думаю, это все еще в стадии разработки..и написано на C# (для загрузки)

Источники:

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

Другие советы

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

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

Или, может быть, это то, что сказал workmad3.

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

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

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

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

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

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

Рассмотрим два примера ниже, которые достигают одной и той же цели — создания заказа для клиента со скидкой 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();

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top