寻找用不同语言编写的示例程序

时间:2009-04-17 13:21:00

标签: c# c oop programming-languages procedural-programming

作为理解OOP和Procedural语言之间差异的一种方法,我一直在寻找用C和C ++或C#或Java编写的示例程序。我只想看到同一问题的不同方法,以帮助我了解真正的差异。有谁知道我在哪里可以找到这样的教程?

10 个答案:

答案 0 :(得分:9)

我认为这不太可能教会你。在不同编程范例之间的差异真正显示之前,程序必须具有一定的大小。如果相同的程序使用不同的语言,人们不可能写相同的副本,除非程序是微不足道的。

大多数现实生活中的例子也会受到很多额外噪音的污染,可以在一种语言的标准库中完成,但在另一种语言中需要第三方库。编写它的程序员可能对一种语言比另一种语言更熟悉,因此他在某些语言中的实现并不代表它应该如何“完成”。

你更有可能通常的方式来学习这些范式之间的区别。通过了解每个意味着什么,以及如何使用它。

答案 1 :(得分:6)

我推荐99 bottles of beer网站

答案 2 :(得分:4)

您可以随时查看Project Euler。人们用许多不同的语言解决了同样的问题。大多数人都会在解决问题后发布他们可以访问的解决方案。

答案 3 :(得分:4)

看看The Computer Language Benchmarks Game。它可以用你想象的几乎所有语言实现各种程序。

答案 4 :(得分:1)

这可能对您的目的来说有点简单,但the Hello World Collection总是很有趣。

答案 5 :(得分:1)

Rosetta Code有大量数据,但很少与程序/面向对象的区别有关。您还应该看到他们的related sites

集合

答案 6 :(得分: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。

答案 7 :(得分:0)

有人在Reddit上发布了Evil Walrus / ReFactory:

http://www.refactory.org/

答案 8 :(得分:0)

这是两个实现n-body

的程序

Java implementation

C implementation

他们之间有什么区别?

答案 9 :(得分: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如此强大。