Я помогаю другу разрабатывать программу в Smalltalk (никогда не закодированную в Smalltalk раньше, я знаю только C++), где мне нужно прочитать транзакции из файла txt и реализовать его. Могут быть случаи, когда мы можем столкнуться с разными валютами. В этом случае мне нужно взять курс обмена валюты из таблицы с валютой валютного курса currency1-currency2 | currency2-currency1. Поэтому я смоделировал свой класс следующим образом:Проектирование менеджера транзакций в Smalltalk
- Прочтите файл для транзакции.
- Сделайте сложение или вычитание суммы.
При добавлении или вычитании могут быть разные валюты, например, канадский доллар, доллар. Следовательно, если у текущего счета есть доллар, мне может потребоваться конверсия в доллар с канадского доллара с использованием перегрузки оператора.
Итак, у меня есть базовый класс Валюта, производный класс Канадский доллар & доллар. мой оператор по загрузке выглядит так.
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.**
}
Проблема заключается в том, что мне нужно передать дату коэффициент конверсии, но я не могу передать дату с помощью оператора перегрузки.
Есть ли у кого-нибудь еще лучший дизайн? или какой-либо особенностью языка в малом разговоре, который позволит мне передать дату, не нарушая цепочку? Я могу сделать дизайн уродливым, установив дату перед транзакцией. Но просто любопытно, если есть лучший дизайн, который я мог бы изучить.
Я думаю, вы должны прочитать о smalltalk и о том, как он отличается от C++. Модель OO совсем другая, система типов отличается. Мышление в C++ не приведет к созданию счастливого кода smalltalk. – Marcin
Согласен, но мне просто нужно понять на уровне дизайна. Я никогда не буду писать в разговоре. Просто нужно проверить дизайн. Я предполагаю, что перегрузка оператора означает то же самое на всех языках. – howtechstuffworks
Очевидным решением является не перегрузка оператора. – Marcin