意図的なプログラミングとは何ですか
-
03-07-2019 - |
質問
読書を始めて、意図的なプログラミングと呼ばれるものに出会いました。 ある程度理解しましたが、完全には理解できませんでした。誰かがそれをより詳細に説明できるなら、してください。実際のアプリケーションで使用されていますか?
解決
これで始めました...
C.シモニーは、高レベル言語から次のレベルの抽象化に進みたかったようです。コードのすべての変更を行うために、開発者に対する顧客の依存関係を減らします(開発中でない人にとっては不可解です)。
そこで彼は、IPと呼ばれるこの新しい製品を発明しました。この製品には、ドメイン固有のモデルを作成するための WYSIWYGタイプのGUIエディターがあります。 (つまり、IPには、アプリのビルディングブロックを作成するためのGUIがあります。LISPでは、メタ/ビルディングブロックを作成できましたが、ドメインの専門家が簡単に行うことはできませんでした。)
UMLのモデルと同様に、「ボタンのプッシュ」で対応するソースコードを自動生成できることが約束されています。そのため、ドメインの専門家は将来モデルを微調整し、[Bake]ボタンを押してアプリの次のバージョンを提供できます。
DSLを利用しているようですが、組み込みのIPメカニズムを介して複数のユーザー作成DSLが互いに通信できるという利点があります。つまり、金融モデルと販売モデルが相互作用して再利用できるということです。必要に応じてブロックします。 DSLと同様に、実装言語の制約を緩和するのではなく、開発者の意図を伝えるコードのメリットを享受できます。
何が必要かを実際に知っている学士号およびドメインの専門家をより強力に制御するという考え方...
更新:
実世界の使用は「まだ」ではないように見えます。しかし、Symonyiは「絶対に信じていますが用語 '。
ショートストーリー:.Netフレームワークに賛成してMSがIPを追い詰め、SimonyiはMSを辞め、自身の会社を設立しました '意図的なソフトウェア '.. IPアイデアを使用することはできますが、作業用プロトタイプを一から書き直さなければならないという契約を結んでいます。それはまだ進行中の作業だと思います.. C#で記述されて(起動するために)
出典:
- 何でもあなたができる、私はメタを行うことができます スコット・ローゼンバーグ、MIT Tech Review(2007)
昨日まで考えるために..私はこれについて何も知りませんでした。調査記者のサインオフ。仕事に戻る:)
他のヒント
パブのクロールの後、午前2時に家に帰ってラップトップを起動したときの動作とは逆です。
その後、翌日、片方の目を開いてトイレに向かう 正午に と、歯を磨き始めて気づき、歯磨き粉を口から垂らし、昨夜、4つのSVNコミットを行い、3つのバグをクローズし、分散ロックプロトコルの飢v問題を解決する方法を見つけました。そして、私は 何も考えていない 、それがどのように機能するのか、もうありません。
または、それはworkmad3が言ったことかもしれません。
プログラマの意図を言語の制約された構文に強制するのではなく、プログラマが実際の言語の内容を拡張して元の意図に近づけることができるプログラミング方法のようです。
これをサポートする言語としてLISPを明示的に言及しているため、この素晴らしい言語を読むことをお勧めします:)あなたは表現したいと思います。 (大規模なLISPシステムのかなり一般的な結果は、特定のアプリケーションの作成に非常に適したドメイン固有の言語になることです。つまり、ワードプロセッサの作成はワードプロセッサ固有の言語になります)。
最後の部分では、一部のプロジェクトでLISP(したがって意図的なプログラミング)が使用されています。 Paul GrahamはLISPの偉大な支持者であり、他の例には、オリジナルのCrash Bandicoot(LISP PlayStationコンパイラを含む、このためのLISPで作成されたゲームオブジェクト作成システム)が含まれます。
意図的プログラミングの理解が少し異なります(Charles Simonyiがやっていることだけでなく、より一般的な用語として)。流なインターフェイスと密接にリンクしており、さまざまな難易度で、現代のオブジェクト指向言語で実現できます。
これらの概念の一部は、ドメインドリブンデザインに由来します(実際、「流fluentなインターフェイス」という用語は、「the」」ブルーブックの著者であるエリックエヴァンスによって普及しています- Domain Driven Design:Tacking Complexity in theソフトウェアの中心)。
目的は、プログラマー以外の人(つまり、ビジネスマン)がビジネスレイヤーコードを読み取れるようにすることです。これは、操作の意図を明示的に示すクラス名とメソッド名によって実現できます。私の意見では、明示的で意図的であることにより、読みやすく保守可能なコードが生成されます。
同じことを達成する以下の2つの例を検討してください-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();
プログラミングスタイルをわずかに変更することで、意図をより明確に伝え、何が起こっているのかを理解するために他の場所でコードを見る必要性を減らすことができます。
ソフトウェア工学のもう1つの流行のように思えます。メタプログラミング、生成的プログラミング、視覚的プログラミングなど、すでに数千人が見ています。短い間、彼らは非常にファッショナブルになり、人々はそれをどこでも使用し、その後常にソフトウェアを作成する古い方法に戻ります。
なぜですか? Frederick Brooksはすでに20年以上前にこの質問に回答しています:狼男を殺すための単一の銀の弾丸がありません ...
意図的なプログラミングはあなたの意図、または目標をエンコードしています。したがって、それは目標指向プログラミングまたは計画です。管理へのステップアップ。
それはあなたがプログラムしようとしているところです、あなたはそれをただ偶然にしないでください。 ;)