2


4

OOPと手続き型言語の違いを理解する方法として、CとC、C#、またはJavaで書かれたサンプルプログラムを探していました。 私は本当の違いを理解するのを手助けするために同じ問題に対する異なるアプローチを見たいだけです。 誰かが私がこのようなチュートリアルを見つけることができる場所を知っていますか?

10 Answer


9


これがあなたに多くのことを教えてくれるとは思わない プログラムは、異なるプログラミングパラダイム間の違いが実際に明らかになる前に一定のサイズを持つ必要があります。 そしてプログラムが簡単でない限り、人々は同じプログラムを異なる言語で同じコピーを書くことはまずありません。

実際の例のほとんどは、多くの余分なノイズで汚染されています。これは、ある言語の標準ライブラリ内では可能ですが、別の言語のサードパーティ製ライブラリが必要です。 そしてそれを書いたプログラマーは他の言語よりもある言語に慣れ親しんでいるかもしれないので、ある言語での彼の実装はそれがどのように「行われるべきか」を表すものではありません。

あなたはこれらのパラダイムの違いを通常の方法で学ぶ可能性があります。 それぞれの意味と使い方を学ぶことによって。


6


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


4


あなたはいつでも Project Eulerを見ることができます。 人々は同じ問題をさまざまな言語で解決します。 ほとんどの人はあなたが問題を解決した後にあなたがアクセスできる解決策を投稿するでしょう。


4


http://shootout.alioth.debian.org/[The Computer Language Benchmarks Game]をご覧ください。 それはあなたが想像できるほぼすべての言語でさまざまなプログラムの実装を持っています。


1


これはあなたの目的のために少し簡単かもしれませんが the Hello World Collectionは常に見るのが楽しいです。


1


http://rosettacode.org[Rosetta Code]には豊富なデータがありますが、手続き型とオブジェクト指向の区別に関するものはほとんどありません。  http://www.rosettacode.org/wiki/Help:Similar_Sites[関連サイト]のコレクションもご覧ください。


1


http://www.espenhaug.com/black_scholes.html[複数言語による黒人学校]には、ブラック - ショールズの公式がたくさん実装されています。 式は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、アイコン、Squeak、Haskell、JAVA、JavaScript、VBA、C、Perl、メープル、Mathematica、Matlab、Sプラス、IDL、パスカル、Python 、Fortran、Scheme、PHP、GNU、gnuplot。


0


先日、RedditにEvil Walrus / ReFactoryが投稿されました。


0


これがn-bodyを実装する2つのプログラムです。

あなたはそれらの間にどんな違いを見つけますか?


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;

        // ...

    }
 }

オブジェクトデザイン言語では、他の正方形に分岐するいくつかの Ladder`と Snake`インスタンスと共に、 `Square`インスタンスのリンクリストを作成します。

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の新しいサブクラスを書く

  • 実行時にゲームのレイアウトを変更するのは簡単です(音がするかもしれません ゲームにとっては奇妙ですが、平均的なビジネスアプリにとっては、これがあなたの望むものです)

この柔軟性がオブジェクト指向を非常に強力なものにしています。