Trabalho 1: sistema de objetos

Descrição

Implemente um sistema de objetos para Scheme, de acordo com a descrição a seguir, mais um dos opcionais na próxima seção.

Classe são criadas com define-class. Os argumentos são o nome da classe, o nome da superclasse e os atributos (ou slots).

(define-class server host
              tcp-ports
              host-name)

Classes são instanciadas com make-NOME.

(define h (make-host '(22 80)
                     "meu-host"))

Atributos são referenciados por NOME-ATRIB-ref e NOME-ATRIB-set!

(host-tcp-ports-ref h)   ==> '(22 80)

(host-host-name-set! h "kruger") 
A segunda linha muda o atributo host-name de h.

Deve ser possível inserir novos atributos em uma classe, sem precisar criar uma superclasse, usando add-ports.

(add-slot server udp-ports '())
(add-slot server location  "Santo André")

Todas as instâncias de host passarão imediatamente a ter estes dois slots, com estes valores.

Opcionais

(I) Deve haver também um remove-slot que remove atributos de uma classe, e um list-slots que lista os atributos de alguma classe.

Deve haver um procedimento class que, dado um objeto, retorna o nome de sua classe (como símbolo).

(II) Implemente herança múltipla: ao invés de uma superclasse, define-class deve aceitar uma lista de superclasses.