タグ付けされた質問 「paradigms」

コンピュータプログラミングの基本的なスタイル。

5
インターフェイスに代わる機能プログラミングとは何ですか?
「機能的な」スタイルでプログラミングしたい場合、インターフェイスを何に置き換えますか? interface IFace { string Name { get; set; } int Id { get; } } class Foo : IFace { ... } たぶんTuple<>? Tuple<Func<string> /*get_Name*/, Action<String> /*set_Name*/, Func<int> /*get_Id*/> Foo; そもそもインターフェイスを使用している唯一の理由は、特定のプロパティ/メソッドを常に利用できるようにしたいからです。 編集:私が考えている/試みていることについてのいくつかの詳細。 たとえば、次の3つの関数を取るメソッドがあります。 static class Blarf { public static void DoSomething(Func<string> getName, Action<string> setName, Func<int> getId); } Bar私のインスタンスでこのメソッドを使用できます: class …

1
アスペクト指向、サブジェクト指向、およびロール指向プログラミングの違いは何ですか?
これら3つのパラダイムを説明する多くの論文があることは知っていますが、模式的な説明を探しています。 ここにはアスペクト指向プログラミングの非常に良い説明がいくつかありますので、Stack Overflowの人々が配信に慣れているような質の高い答えを得るためにこの質問をしています。

6
どの機能機能がもたらすメリットについて、OOPを少し混乱させる価値がありますか?
HaskellとF#で関数型プログラミングを学んだ後、OOPパラダイムはクラス、インターフェース、オブジェクトで後戻りしているように見えます。同僚が理解できるFPのどの側面を仕事に持ち込めますか?使用できるようにチームを再訓練することについて、上司と話す価値のあるFPスタイルはありますか? FPの可能な側面: 不変性 部分適用とカレー ファーストクラス関数(関数ポインター/機能オブジェクト/戦略パターン) 遅延評価(およびモナド) 純粋な機能(副作用なし) 式(対ステートメント-コードの各行は、副作用の代わりに、または副作用を引き起こすことに加えて、値を生成します) 再帰 パターンマッチング それは、プログラミング言語がサポートしている限り、その言語がサポートする制限まで何でもできる、すべての人にとって自由なものですか?または、より良いガイドラインがありますか?

2
アクターモデルの説明は正しいですか?
私が理解した場合、アクターモデルはオブジェクトモデルに似ていますが、いくつかの違いがあります。 すべてのオブジェクトはそれ自身の独立したスレッドを生成し、数千のオブジェクトがある場合でも問題はありません。 アクターは、関数を呼び出して戻り値を取得することによって対話するのではなく、メッセージを送受信することによって対話します。 そのモデルに違反しない場合、アプリは競合状態のリスクなしに、最大限の同時実行を使用します。 オブジェクト指向でできることはすべて、アクターを使用して行うことができますが、問題は、ここ数年でコーディングしたすべてがオブジェクト指向に基づいていたということです-しかし、移行は差し迫っています。 したがって、たとえば、3Dベクトルクラス/アクターを定義し、2つのインスタンスを作成し、それらの和演算を呼び出す必要があるとします。 オブジェクト指向: class V3d { constructor V3d(x,y,z) //bla float x,y,z; function sum(V3d b) { return V3d(x+b.x,y+b.y,z+b.z); } } //using: mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly drawPoint(mySum) //uses the result 俳優モデル: actor V3d { constructor V3d(x,y,z) //bla float x,y,z; loop { receive 'sum',b:V3d …


3
なぜロジックプログラミング(ではない)ですか?
ソフトウェア業界での論理プログラミング言語(Prologなど)の使用についてはまだ聞いていませんし、趣味のプログラミングやオープンソースプロジェクトでの使用についても知りません。(Prolog)は、ある程度学問的な言語として使用されます(学問で使用される理由)。 これは、なぜロジックプログラミングを使用する必要があるのか​​、なぜ使用しないのかと疑問に思います。検出可能な業界で使用されていないのはなぜですか?

20
すべてのコンピューターサイエンスの学生にどのプログラミング言語を教える必要がありますか?
ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け付けていません。 すべてのコンピューターサイエンスの学生は、どの言語(またはプログラミング言語のクラス(パラダイムなど)に加えて、そのクラスの推奨言語)を大学で教えるべきですか?答えを動機付けます。なぜその言語?それからどのような用途がありますか?それはどのような概念を教えていますか(言語Xが教えるよりも良い)? 注/説明:この質問は、純粋なコンピューターサイエンスではなく、ソフトウェアエンジニアリングに重点を置いたコンピューターサイエンスに関するものです。焦点を当てているのは、まだコンピュータサイエンス教育であり、ソフトウェアエンジニアリング教育ではありません。

4
FPとOOは直交ですか?
私は何度も何度も耳にしましたが、FPとOOは直交しているという考えを理解し、検証しようとしています。 まず、2つの概念が直交しているとはどういう意味ですか? FPは、可能な限り不変性と純度を推奨します。そしてオブジェクト指向は、状態と突然変異(命令型プログラミングのわずかに組織化されたバージョン?)のために構築されたもののようです。そして、私はオブジェクトが不変であることを理解しています。しかし、オブジェクト指向は私に状態/変化を暗示しているようです。 彼らは反対のように見えます。それは、それらが直交しているということですか? Scalaのような言語を使用すると、OOとFPの両方を簡単に実行できますが、これは2つのメソッドの直交性に影響しますか?

1
機能的リアクティブ/リレーショナルプログラミング–違いはありますか?
私が使用してきた反応ココア(GitHubによる)、機能性反応性今しばらくの間、ココアライブラリで使用するためのプログラミングAPIを、ちょうど読みました「タールピットのアウト」、おそらくその背後にある概念を提示することを紙、私は少し混乱しています。 この論文は(私が理解しているように)関数関係プログラミングを提示します。データ間の関係は、必要な「偶発的な」ロジックと状態の量を減らすためにFRPシステムによって強制される条件で作成されます。 私の質問は、これらの2つの概念-FR(eactive)PとFR(elational)Pは本質的に同じものですか(前者は後者の実装にすぎません)、または2つのコアの違いはありますか?残念ながら、現時点では、この分野に関する私の知識は、それらを十分に差別化するのに十分ではありません。 違いがある場合は、名前が示すように、データの変更に反応しているように見えます。確かに、Reactive Cocoa(およびC#のRx)には、データの変更でトリガーされるシグナルを作成するという概念があり、時間をかけて継続的に値を変更するために使用できます。 これは違いですか?そうでない場合、何ですか? (不適切なタグ付けはご容赦ください。関連するタグが見つからず、まだ作成できません。可能な場合は、タグをより適切なものに更新してください。)

2
関数型リアクティブプログラミング—フェイは十分に表現力がありますか?
だから私はかなり多くのajax呼び出しとコールバックイズムの他の関与でかなり関与したjavascript / htmlクライアントをやっています。私はこの目的のためにFayを使用することを考えています。私はエルムを知っています。それを試してみて、FRPの要素が好きだった。今、私はフェイで同様の構造が可能かどうかを知りたいと思っています。 この時点でFayにFRPの具体的な例はありますか? 関連する技術: Arrowlets、javascriptの矢印付きFRP FlapJax、別のJavaScriptの代替 Bacon.js、javascriptのFRP Baconを使用した解決策の1つ。デモ。

5
言語指向プログラミングは実用的ですか?
言語指向プログラミングに関するこの記事を読みました。彼は、プログラミングに対する最新の手続き型/ OOPアプローチの弱点を指摘し、それらを解決する新しいプログラミングパラダイムを提案します。 私は小さな、疎結合のプログラムパーツに賛成です:ほんの少しだけ使用するいくつかの大きなことより、使用するすべての小さなことを学ぶ方がはるかに優れています。 記事を読んで、著者が次の2つのいずれかを推進しているという印象を受けました。 簡単に作成できる多数のスクリプト言語 プログラマのニーズに合わせて自分自身を書き換えることができる、単一の簡単に拡張可能な言語 彼が2番目を提案している場合、私は「もうやった!」と答えます。そして、例としてLispを与えます。ポール・グラハムが示唆するように、言語はとにかくこれに向かって絶えず動いているようです。 最初のものに関する限り、それらをすべて結び付ける基礎となる言語がある場合、これは良いアイデアだと思います。それは私にとって弱点であるように思えます:言語間のコミュニケーション。プロセス間通信を思い出させる手続き型の概念またはメッセージの受け渡しである呼び出しを使用しますか?すべての言語を同時に使用するのが簡単な場合は、小さなドメイン固有の言語で作業する機会を歓迎します。このアプローチ(LOP)は実用的でしょうか?

7
問題に対処するためのプログラミングパラダイムの選択に関する経験的証拠
C2 wikiには、オブジェクト指向プログラミングの経験的証拠に関する議論があり、基本的には、権威への訴求以上のものはないと結論付けています。これは、ここでは、2008年の議論で最後に編集されたこのアウトを負担するようです:上の質問OOが古いされているかどうか、関数型プログラミングは悪い選択であるときとAOPの利点と欠点がすべての証拠に頼ることなく、貢献者の意見に答えています。 もちろん、定評のある有名な開業医の意見は歓迎すべきものであり、貴重なものですが、実験データと矛盾しない場合はより妥当です。この証拠は存在しますか?証拠に基づいたソフトウェアエンジニアリングが重要であることは知っていますが、この文脈で実践できますか?具体的には、Pソフトウェアを書くことで解決したい特定の問題がある場合、Pプログラミングパラダイムの選択に依存するような問題解決の結果がどのように決まるかを知ることができる知識、研究、研究がありますか? 「正しい答え」としてどのパラダイムが出てくるかは、特定の研究が注意を払うメトリックス、研究が一定または変動する条件、そして疑いなく他の要因に依存することを知っています。これは、この情報を見つけて批判的に評価したいという私の願望には影響しません。 私は「クランクを回す」ソリューションを探していると考える人がいることが明らかになります-私の問題に関する情報を入れ、その中から「機能的」または「構造化」のような言葉が出てくるソーセージマシンです。これは私の意図ではありません。私が探しているのは、方法についての研究です-ここには入りませんが、問題に関する良い文献がありますが、多くの警告と仮定があります-ソフトウェアの特定の特性は、問題とパラダイムの選択によって異なります。 言い換えれば、「OOの方が柔軟性が高い」または「機能プログラムのバグが少ない」と言う人もいます-(一部)私が求めているのはこの証拠です。残りは、これに対する証拠、またはこれらの記述が真であるという仮定、またはこれらの考慮事項が重要ではないことを示す証拠を求めています。あるパラダイムが他のパラダイムよりも優れている理由については、多くの意見があります。これらの背後にある目的はありますか?

4
なぜデスクトップパラダイムではなくブラウザーでDOMを使用しているのですか
私の理解では、WebインターフェイスはHTMLを使用するように開発されました。当時、帯域幅の制限や処理能力のために、SilverlightやFlashの動作など、ブラウザーでデスクトップスタイルのアプリケーションをシミュレートできなかったからです。 なぜ過去に存在しなかったのか、そして現在はFlash / Silverlightのようなテクノロジーに対するより大きな受け入れとプッシュだったのですか?私の経験から、彼らは(もちろん私の意見では)一緒に開発する方が楽しいですし、クロスブラウザーコンプライアンスや古いブラウザー(大部分)に対処する必要はありません。 ポストバック、AJAXなどの処理は、デスクトップアプリケーションの開発パラダイムと比較して、余分な不必要な努力のようです。DOMとそれを補完するテクノロジーは、Silverlight / Flashがプラグインのインストールを必要とし、一部のモバイルデバイスがプラグインをサポートしていないという事実に基づいて成長し続けていますか?

6
「スプレッドシートプログラミング」の用途はありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 少し前に、プログラミングロジックを指定する方法としてスプレッドシート(​​マクロコードではなくセルと数式を使用する)を使用するという概念に出会いました。アイデアは次のとおりです。 明確に定義された計算フローでスプレッドシートを作成します(プロシージャまたはオブジェクト指向のプログラミングスタイルではなく、スプレッドシートの「データフロー」パラダイムにより適している場合があります) 入力セルを定義する 出力セルを定義する 全体をスタンドアロンの実行可能クラス(または関数、プロシージャなど)にコンパイルする より広範なソフトウェアプロジェクト内の通常のコードで使用する スプレッドシートをソースコードとして使用し、長期にわたって維持する アイデアは、モデルに実際に適合する問題に対してこの手法を使用することであり、これにより、自然に文書化された、保守が容易なコードが作成されるということです。このテクニックの使用経験があるかどうか、また何のために興味があるかを知りたいです。私の頭に浮かんだアプリケーションの例は保険料金計算機で、通常Excelシートでアクチュアリーによって作成、作成、検証され、保守が難しいプログラミングロジックで後でコーディングされます(苦痛なプロセスです)。

2
関数型プログラミング言語は副作用を許可しませんか?
ウィキペディアによると、宣言型である関数型プログラミング言語は、副作用を許可していません。一般に宣言型プログラミングでは、副作用を最小限に抑えたり、排除したりします。 また、ウィキペディアによると、副作用は状態変化に関連しています。したがって、関数型プログラミング言語は、その意味では、状態を保存しないため、実際には副作用を排除します。 しかし、それに加えて、副作用には別の定義があります。副作用 値を返す以外に、呼び出し側の関数または外界との観測可能な相互作用があります。たとえば、特定の関数は、グローバル変数または静的変数の変更、その引数の1つの変更、例外の発生、ディスプレイまたはファイルへのデータの書き込み、データの読み取り、または他の副作用のある関数の呼び出しを行う場合があります。 その意味で、関数型プログラミング言語は実際には副作用を許容します。外部の世界に影響を及ぼし、他の関数を呼び出し、例外を発生させ、ファイルに書き込むなどの無数の例があるからです。 それで、最後に、関数型プログラミング言語は副作用を許可するかどうか? または、何が「副作用」とみなされるか理解していないため、命令型言語では許可され、宣言型言語では許可されません。上記と私が得た結果によると、副作用を排除する言語はないため、副作用について何か見落としているか、ウィキペディアの定義が誤っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.