11

わかりやすいソフトウェアを設計する(そして実際、何でも設計する)ための重要な特性の1つは、優れた抽象化のセットを開発することです。最近では、これらの抽象化には、関数、クラス、インターフェイス、再帰、高階関数などが含まれます。しかし、他に何がありますか?デザインをさらに抽象化して、当面の直接的な目標以外のことを考える必要がないようにするにはどうすればよいでしょうか。既存のテクノロジーでまだ活用されていない新しい抽象化は何ですか?

また、私のリストにあるほとんどの項目(おそらく再帰を除く)は、コードの再利用に使用されるツールでもあることに注意してください。コードの再利用はこの質問の主題ではなく、優れた抽象化の必要な側面として私が見ているものでもありません関数は、いくつかの異なる場所から呼び出すことができるためではなく、説明的な名前の背後に関数が実行していることを隠すため、抽象化として役立ちます。

形の悪い考え:それ自体の状態を維持せずに、他の関数のシーケンスのみを呼び出すドライバー関数は、実際には関数と同じですか?それを関数として書き、それを関数と呼びますが、おそらくそれは別の概念を表していますか?これは、値を返すプロシージャと値を返さないプロシージャを区別することにより、一部の言語に反映されています。しかし、おそらく、その違いを確認するためのより良い方法、比較的無関係なステップのシーケンスを抽象化するためのいくつかの異なる方法がありますか?

繰り返しになりますが、将来のプログラミング言語はどのようにして抽象化をより容易にすることができますか?

4

8 に答える 8

5

強力な抽象化ツール、Lisp マクロ。過去と現在を振り返ってみませんか?:)

于 2009-07-21T22:16:33.410 に答える
3

私が潜在的に実りあると思ういくつかの分野:

  • インテンショナルプログラミング、または同様のもの。CharlesSimonyiの会社であるIntentionalSoftwareは、しばらくの間かなり静かにしていましたが、現在、いくつかの有望な初期のデモンストレーションを示し始めています。

  • 関数型プログラミング:関数型プログラミングのアイデアは、Python、C#(Linq、ラムダなど)、さらにはC ++(C ++ 0xのラムダ)などのより主流の言語への道をますます見つけています。F#は、VisualStudioで完全にサポートされるファーストクラスの.NET言語になりつつあります。マルチコア開発の台頭は、機能概念の幅広い採用を推進するもう1つの要因です。

  • ドメイン固有言語(DSL):インテンショナルプログラミングの背後にある考え方と密接に関連しているため、Microsoftは.NETエコシステムの一部としてDSLをサポートすることにある程度の努力を払っているようです。

  • はるかに洗練されたIDE。Visual StudioやIntelliJなどのIDEのリファクタリングツールにはすでにいくつかの前向きな進展がありますが、この分野では進歩の余地がたくさんあると思います。ダムテキストのソースファイルから抽象構文ツリー表現のようなものに移行すると、より高いレベルの抽象化での作業がはるかに簡単になります。繰り返しますが、これはインテンショナルプログラミングの背後にある多くのアイデアと関連しています。

于 2009-07-22T00:11:21.603 に答える
3

自己公開セマンティクスを使用して、エンドユーザー インターフェイスとして提示される環境/言語のメタプログラミングをより適切に許可できます。可変言語セマンティクス。

于 2009-07-21T22:26:43.110 に答える
1

ばかげたアイデアの検出を組み込むことにより、つまずいた場合、開発者は IDE から締め出され、二度とコードを作成することを拒否されます。

OOP は抽象化を非常にうまく促進します。形の整っていないアイデアを思いつくのは開発者です。

于 2009-07-21T22:15:54.677 に答える
0

見てみましょう。すべてのデータ型に対して抽象化を必須にし、型パラメーターに対して抽象化を一般化する方法を提供する場合はどうでしょうか。待って!CLUを再発明しました。チューリング賞はもらえますか?

プログラミングにおける抽象化の役割に興味のある人は、CLUを勉強する必要があります。

于 2009-07-21T22:59:41.000 に答える
0

エッフェル コードの証明。(警告: PDF へのリンク!)

于 2009-07-21T23:26:24.580 に答える
0

関数型プログラミング、アスペクト指向プログラミング、契約による設計、および一般的に、命令型プログラミングの暗黒時代から私たちを遠ざけるすべてのもの.

また、管理されていないソフトウェア開発がなくなることを願っています。C++ やその他の低レベルのものは、私を悲しくさせます。:-(

LINQ、ラムダ演算子、拡張メソッド、流暢なインターフェイスが気に入っています。ああ、私は PostSharp.NET が大好きです。そして F# ですが、F# を愛さないのは非常に難しいと思います。:-)

于 2010-07-09T14:08:59.243 に答える
0

間接的にお答えします。プログラミング言語でより優れた構造を開発する前に、まず抽象化の理論を理解する必要があります。

そうそう、現代のコンピューティングよりも前の実際の理論があり、それは圏論と呼ばれています

于 2011-12-26T00:35:18.567 に答える