java - sintaxis - GNU Smalltalk-Herencia y métodos de parámetros múltiples/constructores
sintaxis pharo (1)
No deberías molestarte con algún tipo de "elaboración de resumen de clase" :). Pero la solución más cercana a su pregunta es
abstractMethod [ self subclassResponsibility ]
Ahora, cuando alguien envía un mensaje a su clase, obtendrá el error de que este método debe implementarse, y debe anularlo en subclases.
Sí. Se puede acceder a todos los vars de instancia mediante una subclase.
De acuerdo, entonces los mensajes de palabras clave como
withdraw: amount
pueden tener múltiples parámetros como:withdraw: amount becauseOf: reason
. Entonces, antes que nada, crea un inicializador:initWithBalance: aBalance customer: aCustomer number: aNumber [ self init. balance := aBalance. customer := aCustomer. number := aNumber ]
Puedes mantener el
interest := 0.
eninit
principal. Luego, para mejorar tu vida, realizas unnew
parámetro parametrizado y llamas desde allí.SavingsAccount class [ newWithBalance: aBalance customer: aCustomer number: aNumber [ ^ self new initWithBalance: aBalance customer: aCustomer number: aNumber ] ]
Digamos que estoy tratando de traducir las siguientes clases de Java a 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;
}
}
Me cuesta entender cómo puedo escribir métodos / constructores que toman múltiples parámetros. Esto es lo que tengo hasta ahora:
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)
]
]
Unas cuantas preguntas:
- ¿Cómo puedo hacer que Account sea una clase abstracta en Smalltalk?
- ¿Estoy en lo correcto al asumir que todas las variables de instancia de la Cuenta solo son accesibles por nombre en la clase SavingsAccount?
- ¿Cómo puedo implementar algo que imita el constructor de parámetros múltiples en Java SavingsAccount Class?