Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
teaching:cc4101:tareas:2025-1:tarea3 [2025/06/19 20:37] – [Parte 3 (extra). Campos de Clase (1 pt)] dibanezteaching:cc4101:tareas:2025-1:tarea3 [2025/06/19 21:09] (current) – [Tarea 3 (Entrega: TBD)] dibanez
Line 1: Line 1:
-====== Tarea 3 (Entrega: TBD) ====== +====== Tarea 3 (Entrega: 6 de Julio de 2025) ====== 
  
-Esta tarea se distribuye con un archivo zip (<<PLACEHOLDER>>) que contiene 3 archivos: main.rkt, tests.rkt y env.rkt. Los archivos están incompletos, y en ellos tiene que implementar lo que se solicita en las preguntas siguientes. +Esta tarea se distribuye con un archivo zip ({{ :teaching:cc4101:tareas:2025-1:t3-init.zip |}}) que contiene 3 archivos: main.rkt, tests.rkt y env.rkt. Los archivos están incompletos, y en ellos tiene que implementar lo que se solicita en las preguntas siguientes. 
  
 Debe entregar via U-cursos **un archivo .zip** que contenga los archivos main.rkt y tests.rkt. Debe entregar via U-cursos **un archivo .zip** que contenga los archivos main.rkt y tests.rkt.
Line 7: Line 7:
 <note important>Consulte las normas de entrega de tareas en http://pleiad.cl/teaching/cc4101</note> <note important>Consulte las normas de entrega de tareas en http://pleiad.cl/teaching/cc4101</note>
  
-**Recuerde que el testing y calidad de código se evalúan de acuerdo a [[https://docs.google.com/document/d/1Ahtk97_teZwtpFnJ-H--rLndeiFuyeDHpoGWpC8wL5I/edit?usp=sharing|la rúbrica]].**+**Recuerde que el testing y calidad de código se evalúan de acuerdo a [[https://docs.google.com/document/d/1Ahtk97_teZwtpFnJ-H--rLndeiFuyeDHpoGWpC8wL5I/edit?usp=sharing|esta rúbrica]].**
  
 ====== Resumen ====== ====== Resumen ======
Line 302: Line 302:
 </code> </code>
  
-===== Parte 3 (extra): Campos de Clase (1 pt) ===== +===== Parte 3 (extra): Campos de Clase (1 pt de Bonus) ===== 
-En las parte 1 implementamos clases con campos y métodos de instancia, además de estos la mayoría de lenguajes que permiten POO soportan campos y métodos de clase, como también campos y métodos estáticos.+En la parte 1 implementamos clases con campos y métodos de instancia, además de estos la mayoría de lenguajes que permiten POO soportan campos y métodos de clase, como también campos y métodos estáticos.
  
 En esta parte extenderemos el lenguaje con campos de clase, para ello modificaremos la sintáxis de esta forma: En esta parte extenderemos el lenguaje con campos de clase, para ello modificaremos la sintáxis de esta forma:
Line 317: Line 317:
  
 Tenga en consideración: Tenga en consideración:
- * Un campo de clase solo puede ser modificado por objetos de esa clase. + 
- * Un campo de clase puede ser leído usando ''get'' directamente sobre el valor de la clase, o desde cualquiera de sus instancias. +  * Un campo de clase solo puede ser modificado por objetos de esa clase. 
- * No pueden haber campos de clase o instancia con el mismo nombre. Esto debe comprobarse de forma estática. En caso de encontrarse, debe lanzar el error "duplicate fields" +  * Un campo de clase puede ser leído usando ''get'' directamente sobre el valor de la clase, o desde cualquiera de sus instancias. 
- * Si un campo de clase no incluye un valor inicial, entonces se encuentra no inicializado. Intentar acceder a un campo de clase no inicializado debe lanzar el error "class field <id> not initialized".+  * No pueden haber campos de clase o instancia con el mismo nombre. Esto debe comprobarse de forma estática. En caso de encontrarse, debe lanzar el error "duplicate fields" 
 +  * Si un campo de clase no incluye un valor inicial, entonces se encuentra no inicializado. Intentar acceder a un campo de clase no inicializado debe lanzar el error "class field <id> not initialized".
  
 Programas de ejemplo: Programas de ejemplo:
Line 354: Line 355:
                    {o1 {init Test}}                    {o1 {init Test}}
                    {o2 {init Test}}                    {o2 {init Test}}
-                  {begin {-> set-b o1 #t}+                  {begin {-> o1 set-b #t}
                          {get o2 b}}})                          {get o2 b}}})
 +#t
 </code> </code>
 +
 +  * Realize las modificaciones necesarias para extender el lenguaje con campos de clase.