2009-04-17 3 views
2

В качестве способа понять различия между ООП и процедурными языками я искал образец программы, написанной на языках C и C++ или C# или Java. Я просто хочу увидеть различные подходы к одной и той же проблеме, чтобы помочь мне разобраться в реальных различиях. Кто-нибудь знает, где я могу найти учебник, подобный этому?Ищите пример программы, написанной на разных языках

+1

В качестве остроумного предложения рассмотрите записи в http://golf.shinh.org/ :-) –

ответ

4

Вы всегда можете посмотреть Project Euler. Люди решают одни и те же проблемы на разных языках. Большинство людей опубликует свои решения, к которым вы можете получить доступ, после того как вы решите проблему.

+2

Это не будет показывать различия между ООП и процедурными подходами. Большинство людей, которые выполняют проблемы на Java, просто пишут несколько строк в основном методе. На самом деле это не те проблемы, которые связаны с множеством ... ну ... объектов. –

+0

, но это все еще интересно! –

1

Это может быть немного просто для ваших целей, но the Hello World Collection всегда интересно просматривать.

4

Взгляните на The Computer Language Benchmarks Game. У него есть реализации различных программ практически на каждом языке, который вы могли себе представить.

1

Rosetta Code имеет множество данных, но очень малое из них связано с процедурным/объектно-ориентированным различием. Вы также должны увидеть их коллекцию related sites.

1

Black Scholes in multiple languages имеет множество реализаций формулы Блэка-Шоулза. Формула реализована в 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.

9

Я не думаю, что это, вероятно, научит вас многому. Программа должна иметь определенный размер до того, как действительно показывают различия между различными парадигмами программирования. И люди вряд ли будут писать одинаковые копии, если одна и та же программа на разных языках, если программа не является тривиальной.

Большинство примеров в реальной жизни также будут загрязнены большим количеством лишнего шума, что может быть сделано в стандартной библиотеке одного языка, но требует наличия сторонних библиотек в другом. И программист, который написал это, может быть более знаком с одним языком, чем с другим, поэтому его реализация на некоторых языках не отражает того, как это должно быть сделано.

Вы, скорее всего, узнаете разницу между этими парадигмами обычным способом. Изучая то, что каждый означает, и как его использовать.

+2

Это, безусловно, лучший ответ. Программа для печати «Hello world» или для того, чтобы найти сумму всех остальных простых чисел ниже двух тысяч, не научит вас разнице между процедурной и OO. –

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 

, как вы можете видеть, мы реализуем правила игры в объектах , а также на пути они состоят (а не в случае заявления выключателя). Это имеет то преимущество, что

  • это просто добавить новые правила игры во время разработки, вы просто написать новый подкласс площади
  • просто изменить макет игры во время выполнения (могущества звучит странно для игры, но для вашего среднего делового приложения это именно то, что вы хотите)

Эта гибкость делает OO настолько мощным.

Смежные вопросы