2013-12-03 4 views
1

Я помогаю другу разрабатывать программу в Smalltalk (никогда не закодированную в Smalltalk раньше, я знаю только C++), где мне нужно прочитать транзакции из файла txt и реализовать его. Могут быть случаи, когда мы можем столкнуться с разными валютами. В этом случае мне нужно взять курс обмена валюты из таблицы с валютой валютного курса currency1-currency2 | currency2-currency1. Поэтому я смоделировал свой класс следующим образом:Проектирование менеджера транзакций в Smalltalk

  1. Прочтите файл для транзакции.
  2. Сделайте сложение или вычитание суммы.

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

Итак, у меня есть базовый класс Валюта, производный класс Канадский доллар & доллар. мой оператор по загрузке выглядит так.

Currency& operator+(Currency& c) { 
    local_var + c.to_canadian_dollar(); 
} 

uint32 to_canadian_dollor() { 
    return local_var * er.conversion_rate(); **<-- I need to pass date for the exchange rate function to get the exchange rate for today's date.** 
} 

Проблема заключается в том, что мне нужно передать дату коэффициент конверсии, но я не могу передать дату с помощью оператора перегрузки.

Есть ли у кого-нибудь еще лучший дизайн? или какой-либо особенностью языка в малом разговоре, который позволит мне передать дату, не нарушая цепочку? Я могу сделать дизайн уродливым, установив дату перед транзакцией. Но просто любопытно, если есть лучший дизайн, который я мог бы изучить.

+0

Я думаю, вы должны прочитать о smalltalk и о том, как он отличается от C++. Модель OO совсем другая, система типов отличается. Мышление в C++ не приведет к созданию счастливого кода smalltalk. – Marcin

+0

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

+0

Очевидным решением является не перегрузка оператора. – Marcin

ответ

4

Smalltalk не имеет перегрузки оператора. Потому что у него нет операторов. В C++ у вас есть операторы и методы как разные, но похожие аналогичные объекты. В Smalltalk у вас есть только методы. Период. Поэтому, когда вы видите «+» в коде Smalltalk, это не оператор (потому что они не существуют в Smalltalk). Это послание. Левый объект действует как приемник, а метод «+» отправляется ему с правым боковым объектом в качестве единственного аргумента.

Так что вы, могли бы сделать, было бы определить новый числовой объект, который инкапсулирует ваши динамические данные даты в нем.

Вы не скажете, какой Smalltalk вы используете, но большинство ароматов используют шаблон double dispatch, чтобы включить трансцендентную математику между объектами, обладающими «математикой». Если вы предоставите более подробную информацию о своей проблеме, возможно, я приведу более подробную информацию на примере здесь ...

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