sintaxis java inheritance parameters abstract-class smalltalk

java - sintaxis - GNU Smalltalk-Herencia y métodos de parámetros múltiples/constructores



sintaxis pharo (1)

  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.

  2. Sí. Se puede acceder a todos los vars de instancia mediante una subclase.

  3. 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. en init principal. Luego, para mejorar tu vida, realizas un new 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:

  1. ¿Cómo puedo hacer que Account sea una clase abstracta en Smalltalk?
  2. ¿Estoy en lo correcto al asumir que todas las variables de instancia de la Cuenta solo son accesibles por nombre en la clase SavingsAccount?
  3. ¿Cómo puedo implementar algo que imita el constructor de parámetros múltiples en Java SavingsAccount Class?