2

OOP 言語と手続き型言語の違いを理解する方法として、C と C++、C#、または Java で記述されたサンプル プログラムを探していました。本当の違いを理解するのに役立つように、同じ問題に対するさまざまなアプローチを確認したいだけです。このようなチュートリアルをどこで見つけることができるか知っている人はいますか?

4

10 に答える 10

9

これではあまり教えてもらえないと思います。異なるプログラミング パラダイム間の違いが実際に現れる前に、プログラムは一定のサイズを持っている必要があります。また、同じプログラムが別の言語で書かれている場合、そのプログラムが些細なものでない限り、人々は同一のコピーを作成する可能性は低いです。

実際の例のほとんどは、多くの余分なノイズで汚染されています。これは、ある言語の標準ライブラリ内で実行できることですが、別の言語ではサードパーティのライブラリが必要です。そして、それを書いたプログラマーはある言語に精通しているかもしれません。

通常の方法でこれらのパラダイムの違いを学ぶ可能性が高くなります。それぞれの意味と使い方を学びます。

于 2009-04-17T13:54:04.370 に答える
6

99本のビールのウェブサイトをお勧めします

于 2009-04-17T13:31:06.283 に答える
4

Project Eulerはいつでも見ることができます。人々は同じ問題を多くの異なる言語で解決します。ほとんどの人は、問題を解決した後にアクセスできるソリューションを投稿します。

于 2009-04-17T13:25:08.747 に答える
4

The Computer Language Benchmarks Gameをご覧ください。想像できるほぼすべての言語でさまざまなプログラムが実装されています。

于 2009-04-17T13:31:19.917 に答える
1

これはあなたの目的にとっては少し単純かもしれませんが、Hello World コレクションはいつ見ても楽しいものです。

于 2009-04-17T13:25:50.850 に答える
1

Rosetta Codeには豊富なデータがありますが、手続き型/オブジェクト指向の区別に関連するものはほとんどありません。関連サイトのコレクションも表示されるはずです。

于 2009-04-17T13:45:46.967 に答える
1

Black Scholes in multiple languagesには、Black-Scholes 公式の多くの実装があります。この式は、Objective-C/iPhone、F#、Autoit、Fortress、Lua、APL、SAS、Mathcad、J、MEL、Postscript、VB.NET、Clean、Ruby、Lisp、Prolog、PL/SQL、LyME、ColdFusion で実装されています。 、K、C#、HP48、Transact SQL、O'Caml、Rebol、Real Basic、Icon、Squeak、Haskell、JAVA、JavaScript、VBA、C++、Perl、Maple、Mathematica、Matlab、S-Plus、IDL、Pascal、Python 、Fortran、Scheme、PHP、GNU、gnuplot。

于 2009-04-17T13:51:09.340 に答える
0

ヘビとはしごゲームの実装を検討してください

手続き型の設計では、次のような関数を書くかもしれません

function move(int n) {
    pos += n;
    switch(pos) {
        case 6: pos = 10; break;
        case 12: pos = 4; break;
        case 15: pos = 32; break;
        case 16: pos = 8; break;

        // ...

    }
 }

オブジェクト設計言語では、インスタンスのリンク リストを作成し、SquareいくつかLadderSnakeインスタンスを他の正方形に分岐させます。

class Square
  def initialize(next)
    @tokens = []
    @next = next
  end
  def next(n)
    n == 0 ? self : next.next(n-1)
  end
  def move(token,n)
    tokens.remove(token)
    target = self.next(n)
    target.tokens << token
  end
end

class SnakeOrLadder < Square
  def initialize(next,branch)
    super(next)
    @branch = branch
  end
  def next(n)
    # goes to branch when landing on this square!
    n == 0 ? @branch : next.next(n-1)
  end
end

ご覧のとおり、ゲーム ルールをオブジェクトその構成方法に実装します (switch case ステートメントではなく)。これには次の利点があります。

  • 開発時に新しいゲーム ルールを追加するのは簡単です。Square の新しいサブクラスを作成するだけです。
  • 実行時にゲームのレイアウトを変更するのは簡単です (ゲームでは奇妙に聞こえるかもしれませんが、平均的なビジネス アプリでは、これが必要です)。

この柔軟性が OO を強力なものにしているのです。

于 2009-12-09T03:36:07.113 に答える
0

n-body を実装する 2 つのプログラムを次に示します。

Java 実装

C 実装

それらの間にどのような違いがありますか?

于 2009-04-17T19:59:04.290 に答える