Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
teaching:cc4101:tareas:2021-1:tarea3 [2021/06/17 14:20] – created tvallejosteaching:cc4101:tareas:2021-1:tarea3 [2021/07/06 16:01] (current) – [Objetos como valores (3,0 ptos.)] bortiz
Line 17: Line 17:
 En esta tarea extenderemos un lenguaje base para soportar objetos y delegación. El lenguaje base tiene números, booleanos y operaciones sobre ellos. Además contiene expressiones ''if'', ''seqn'', ''local'' y ''define'', pero  no tiene soporte para funciones. Se emplea call-by-value como estrategia de evaluación. Tome un tiempo de experimentar con el lenguaje entregado antes de comenzar a implementar las extensiones pedidas. En esta tarea extenderemos un lenguaje base para soportar objetos y delegación. El lenguaje base tiene números, booleanos y operaciones sobre ellos. Además contiene expressiones ''if'', ''seqn'', ''local'' y ''define'', pero  no tiene soporte para funciones. Se emplea call-by-value como estrategia de evaluación. Tome un tiempo de experimentar con el lenguaje entregado antes de comenzar a implementar las extensiones pedidas.
  
 +
 +<note warning> 
 +  * la tarea se debe realizar SIN usar macros
 +  * los objetos NO deben ser codificados como lambdas: un objectV es una estructura que agrega campos y métodos (y de alguna forma, el ambiente para las variables libres), así como su padre en el caso de la delegación. (*)
 +
 +En resumen, del OOPLAI, tienen que reusar *los conceptos*, no el código.
 +Además, pueden usar OBJECT-DEL del OOPLAI como semántica de referencia, para consultar como se debe comportar su lenguaje.
 +
 +(*) nada de ''(lambda (msg . args) ...)'' en su código!
 +</note>
  
 ===== Objetos como valores (3,0 ptos.) ===== ===== Objetos como valores (3,0 ptos.) =====
Line 39: Line 49:
   * ''send'' permite invocar un método de un objeto dado, con 0 o más argumentos.   * ''send'' permite invocar un método de un objeto dado, con 0 o más argumentos.
   * ''this'' permite acceder al objeto actual.    * ''this'' permite acceder al objeto actual. 
-  * una definición de campo (''field'') incluye una expresión de inicialización, que se ejecuta nuevamente para cada instancia creada.+  * una definición de campo (''field'') incluye una expresión de inicialización, importa el orden en el cual están declarados y usados.
   * una definición de método (''method'') especifica 0 o más parámetros, y el cuerpo del método.   * una definición de método (''method'') especifica 0 o más parámetros, y el cuerpo del método.