Что такое намеренное программирование?
В моем чтении, я наткнулся на что-то, называемое Преднамеренное программирование.
Я это немного понял, но не полностью. Если кто-нибудь может объяснить это более подробно, пожалуйста. Используется ли он в любом реальном приложении?
Ответы
Ответ 1
Ты меня начал с этого...
Похоже, С. Симони хотел перейти на следующий уровень абстракции от языков высокого уровня. Уменьшите зависимость клиентов от разработчиков, чтобы делать все изменения.. в коде (загадочный для людей, не находящихся в разработке).
Поэтому он изобретает этот новый продукт под названием IP, который имеет редактор GUI типа WYSIWYG для создания модели, специфичной для домена. (то есть IP имеет графический интерфейс для создания строительных блоков для вашего приложения. LISP позволяет создавать мета/строительные блоки, но не таким образом, чтобы эксперты домена могли легко это сделать.)
Как и модели в UML, обещают, что вы можете автоматически сгенерировать соответствующий исходный код при нажатии кнопки. Поэтому эксперты домена могут подгонять модель в будущем и нажать кнопку Bake, чтобы доставить следующую версию приложения.
Похоже, что DSLs используют DSL, но с дополнительным преимуществом, благодаря которому несколько DSL-приложений, созданные пользователем, могут разговаривать друг с другом через встроенный механизм IP... что означает, что модель финансирования и модель продаж могут взаимодействовать и повторно использовать блоков по мере необходимости. Как и в DSL, вы получаете преимущество от кода, который передает намерение разработчика, а не успокаивает ограничения языка реализации.
Идея состоит в том, чтобы дать больший контроль над экспертами BA и домена, которые действительно знают, что нужно...
Обновление:
Использование в реальном мире выглядит "еще не". Хотя Симони считает " абсолютно в долгосрочной перспективе.
Краткая история: MS скрепил IP в пользу .Net framework, Симони оставил MS и сформировал собственную компанию "Намеренное программное обеспечение" с контрактом что он мог бы использовать идеи ИС, но ему пришлось бы переписать свой рабочий прото с нуля... (это должно его замедлить). Он все еще работает в процессе, я думаю.. и записывается на С# (для загрузки)
Источники:
Думать до вчерашнего дня. Я ничего об этом не знал. Следователь-репортер подписывается. Возвращение к дневной работе:)
Ответ 2
Это противоположность тому, что происходит, когда я прихожу домой в 2 часа ночи после того, как паб сканирует и запускает ноутбук "просто для того, чтобы проверить мою электронную почту быстро, дорогой".
Затем, на следующий день, когда я открываю один глаз и нахожу свой путь в ванную на трещине полудня, я начинаю чистить зубы и осознавать, зубная паста из моего рта, что вчера вечером я сделал 4 SVN-коммиты, закрыл 3 ошибки и выяснил, как решить проблему голодания в нашем распределенном протоколе блокировки. И у меня есть no idea, как, черт возьми, все это работает.
Или, может быть, это то, что сказал workmad3.
Ответ 3
Это, по-видимому, метод программирования, который позволяет программисту расширять то, что на самом деле находится на этом языке, чтобы более внимательно следить за их первоначальным намерением, а не заставлять программистов задуматься в ограниченном синтаксисе языка.
Он явно упоминает LISP как язык, который поддерживает это, поэтому я бы посоветовал вам прочитать этот замечательный язык:) LISP Макросы - это именно то, что описано в статье, что позволяет вам неограниченно расширять язык чтобы покрыть почти все, что вы хотели бы выразить. (Достаточно общий результат больших систем LISP заключается в том, что в конечном итоге вы используете язык, специфичный для домена, который очень хорош для написания конкретных приложений, т.е. Для написания текстового процессора в конечном итоге используется конкретный язык текстового процессора).
Для вашей последней части в некоторых проектах используется LISP (и, следовательно, преднамеренное программирование). Пол Грэм - великий сторонник LISP, а другие его примеры включают оригинальный Crash Bandicoot (для этого была создана система создания игрового объекта в LISP, включая компилятор LISP PlayStation)
Ответ 4
Кажется, мне нравится еще одна причуда разработки программного обеспечения. Мы уже видели тысячи из них: мета-программирование, генеративное программирование, визуальное программирование и т.д. В течение короткого времени они становятся очень модными, люди используют его повсюду, а затем они неизменно возвращаются к старым способам создания программного обеспечения.
Почему? Фредерик Брукс уже ответил на этот вопрос более 20 лет назад: там Нет одиночной серебряной пули, чтобы убить оборотня...
Ответ 5
У меня немного другое понимание преднамеренного программирования (как более общий термин, а не только то, что делает Чарльз Симони). Он тесно связан с плавными интерфейсами и может быть достигнут с различной степенью сложности в современных объектно-ориентированных языках.
Некоторые из этих концепций взяты из разработки, основанной на домене (на самом деле термин "свободный интерфейс" был популяризирован Эриком Эвансом, автором "синей книги", разработанной под управлением домена: "Сложность решения в сердце программного обеспечения" ).
Цель состоит в том, чтобы сделать код бизнес-уровня понятным для не-программиста (то есть для бизнес-лица). Это может быть достигнуто с помощью имен классов и методов, в которых явно указано намерение операции. По-моему, явное и преднамеренное создает хорошо читаемый и поддерживаемый код.
Рассмотрим два примера ниже, которые достигают того же: создание заказа для клиента со скидкой 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 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 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();
Изменяя свой стиль программирования немного, вы можете более четко сообщить свои намерения и уменьшить количество необходимости искать код в другом месте, чтобы понять, что происходит.
Ответ 6
Преднамеренное программирование кодирует ваши намерения или цели. Таким образом, это ориентированное на цель программирование или планирование. Подходите к настройке.
Ответ 7
Здесь, где вы собираетесь программировать, вы не просто случайно это делаете.;)