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

看看计算机语言基准游戏。它以您能想象到的几乎所有语言实现了各种程序。

于 2009-04-17T13:31:19.917 回答
1

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

于 2009-04-17T13:25:50.850 回答
1

Rosetta Code拥有丰富的数据,但与过程/面向对象的区别相关的数据很少。您还应该看到他们收集的相关网站

于 2009-04-17T13:45:46.967 回答
1

多种语言的 Black Scholes有很多 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

这是两个实现 n-body 的程序

Java 实现

C 实现

你发现它们之间有什么不同?

于 2009-04-17T19:59:04.290 回答
0

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

http://www.refactory.org/

于 2009-04-17T14:40:52.123 回答
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 回答