Разработка менеджера транзакций в Smalltalk

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

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

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

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

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.**
}

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

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

1

Решение

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

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

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

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]