Ищем пример программы, написанной на разных языках

2

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

  • 1
    В качестве шутливого предложения рассмотрим записи в golf.shinh.org :-)
Теги:
oop
programming-languages
procedural-programming

10 ответов

9

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

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

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

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

Я рекомендую 99 бутылок пива веб-сайт

4

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

  • 2
    Это на самом деле не покажет различия между ООП и процедурным подходом. Большинство людей, которые делают проблемы в Java, просто пишут несколько строк в основном методе. Это на самом деле не те проблемы, которые затрагивают множество ... ну ... объектов.
  • 0
    но все равно интересно!
4

Взгляните на Компьютерная игра Benchmarks Game. Он реализовал различные программы практически на каждом языке, который вы могли себе представить.

1

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, С#, HP48, Transact SQL, O'Caml, Rebol, Real Basic, Icon, Squeak, Haskell, JAVA, JavaScript, VBA, С++, Perl, Maple, Mathematica, Matlab, S-Plus, IDL, Pascal, Python, Fortran, Scheme, PHP, GNU, gnuplot.

1

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

1

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

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). Это имеет то преимущество, что

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

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

0

Вот две программы, реализующие n-body

реализация Java

Реализация C

Какие отличия между вами?

0

Кто-то отправил Evil Walrus/ReFactory на Reddit на днях:

http://www.refactory.org/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню