OOP 言語と手続き型言語の違いを理解する方法として、C と C++、C#、または Java で記述されたサンプル プログラムを探していました。本当の違いを理解するのに役立つように、同じ問題に対するさまざまなアプローチを確認したいだけです。このようなチュートリアルをどこで見つけることができるか知っている人はいますか?
10 に答える
これではあまり教えてもらえないと思います。異なるプログラミング パラダイム間の違いが実際に現れる前に、プログラムは一定のサイズを持っている必要があります。また、同じプログラムが別の言語で書かれている場合、そのプログラムが些細なものでない限り、人々は同一のコピーを作成する可能性は低いです。
実際の例のほとんどは、多くの余分なノイズで汚染されています。これは、ある言語の標準ライブラリ内で実行できることですが、別の言語ではサードパーティのライブラリが必要です。そして、それを書いたプログラマーはある言語に精通しているかもしれません。
通常の方法でこれらのパラダイムの違いを学ぶ可能性が高くなります。それぞれの意味と使い方を学びます。
99本のビールのウェブサイトをお勧めします
Project Eulerはいつでも見ることができます。人々は同じ問題を多くの異なる言語で解決します。ほとんどの人は、問題を解決した後にアクセスできるソリューションを投稿します。
The Computer Language Benchmarks Gameをご覧ください。想像できるほぼすべての言語でさまざまなプログラムが実装されています。
これはあなたの目的にとっては少し単純かもしれませんが、Hello World コレクションはいつ見ても楽しいものです。
Rosetta Codeには豊富なデータがありますが、手続き型/オブジェクト指向の区別に関連するものはほとんどありません。関連サイトのコレクションも表示されるはずです。
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。
ヘビとはしごゲームの実装を検討してください
手続き型の設計では、次のような関数を書くかもしれません
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
いくつかLadder
のSnake
インスタンスを他の正方形に分岐させます。
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 を強力なものにしているのです。