作为理解OOP和Procedural语言之间差异的一种方法,我一直在寻找用C和C ++或C#或Java编写的示例程序。我只想看到同一问题的不同方法,以帮助我了解真正的差异。有谁知道我在哪里可以找到这样的教程?
答案 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:
答案 8 :(得分:0)
答案 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
个实例的链接列表,其中一些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语句中)。这有利于
这种灵活性使OO如此强大。