GNU Smalltalk - Herança e Métodos de Múltiplos Parâmetros / Construtores
Digamos que eu esteja tentando traduzir as classes Java abaixo para o GNU Smalltalk:
public abstract class Account {
protected String number;
protected Customer customer;
protected double balance;
public abstract void accrue(double rate);
public double balance() {
return balance;
}
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
balance -= amount;
}
public String toString() {
return number + ":" + customer + ":" + balance;
}
}
public class SavingsAccount extends Account {
private double interest = 0;
public SavingsAccount(String number, Customer customer, double balance) {
this.number = number;
this.customer = customer;
this.balance = balance;
}
public void accrue(double rate) {
balance += balance * rate;
interest += interest * rate;
}
}
Estou lutando para entender como posso escrever métodos / construtores que usam vários parâmetros. Aqui está o que eu tenho até agora:
Object subclass: Account [
|number customer balance|
balance [
^balance
]
deposit: amount [
balance := balance + amount
]
withdraw: amount [
balance := balance - amount
]
asString [
^number asString, ':', customer asString, ':', balance asString
]
]
Account subclass: SavingsAccount [
|interest|
SavingsAccount class [
new [ "add some sort of support for multiple arguments?"
"call init"
]
]
init [ "add some sort of support for multiple arguments?"
interest := 0.
balance := accountBalance.
customer := accountCustomer.
number := accountNumber
]
accrue: rate [
balance := balance + (balance * rate).
interest := interest + (interest * rate)
]
]
Algumas questões:
Como posso fazer da Account uma classe abstrata no Smalltalk?Estou correto em assumir que todas as variáveis da instância da conta são acessíveis apenas pelo nome na classe SavingsAccount?Como posso implementar algo que imita o construtor de vários parâmetros na classe Java SavingsAccount?