Universidad Nacional del Sur Lenguajes de Programación Licenciatura en Ciencias de la Computación 1er Cuatrimestre 2016 PÁGINA WEB: www.cs.uns.edu.ar/~sg/lp LECTURA: Ghezzi Cap.3, Scott Cap. 7.1-7.2, Sebesta 6 TRABAJO PRÁCTICO Nº 5 TIPOS DE DATOS Y SISTEMAS DE TIPOS PARTE I: CONCEPTOS 1. ¿Qué es un sistema de tipos? ¿Cuáles son los principales criterios de evaluación de un lenguaje de programación que se ven afectados por el sistema de tipos? ¿Por qué? 2. Defina que significa que un lenguaje sea fuertemente tipado. ¿Qué desventajas tiene un lenguaje que no es fuertemente tipado? Ejemplifique. 3. Defina la noción del grado de dureza de una característica del sistema de tipos. Seleccione dos características diferentes del sistema de tipos y, para cada una de ellas, indique restricciones que influyen en su grado de dureza. 4. Analice las ventajas y desventajas de: a) Tipado estático vs. Dinámico. b) Conversión implícita vs. explícita. c) Alto grado de dureza vs Bajo grado de dureza. 5. ¿Cuál es la diferencia entre un error del lenguaje y un error de aplicación? ¿Qué relación tienen estos conceptos con la noción de lenguaje fuertemente tipado? 6. Defina los siguientes tipos: a) Ordinal b) Enumerado c) Subrango 7. ¿Por qué los números reales no pueden ser el dominio de un mapeo finito? ¿Podrían ser los enteros? 8. ¿Cuáles son los aspectos que deben tenerse en cuenta en la etapa de diseño de un lenguaje al especificar los atributos de: a) cadenas de caracteres? b) arreglos? c) unión y unión discriminada? 9. ¿Cuáles son las desventajas de tener coerciones respecto al chequeo de tipos? ¿Cómo influyen en el grado de dureza del sistema de tipos? 10. Indique claramente que efectos en la determinación de tipos puede tener un lenguaje de programación que cuenta simultáneamente con coerción, sobrecarga y expresiones mixtas. 11. Indique en aspectos el alcance dinámico afecta al sistema de tipos 12. ¿Cuál es la principal diferencia entre un tipo producto cartesiano y un tipo unión? 13. ¿Qué dificultades presenta en cuanto al chequeo de tipos el uso de los constructores de unión y unión discriminada? Universidad Nacional del Sur Lenguajes de Programación Licenciatura en Ciencias de la Computación 1er Cuatrimestre 2016 14. ¿Qué diferencia encuentra entre la sub-indicación de arreglos y la selección de campos de registros en un lenguaje de programación como Pascal? 15. ¿A qué se le llama arreglo asociativo? 16. Muestre gráficamente las distintas formas de polimorfismo y explique cada uno de ellas. PARTE II: CASOS DE ESTUDIO 17. Explique y ejemplifique porque Pascal no es considerado un lenguaje fuertemente tipado. 18. ¿Qué lenguaje tiene un sistema de tipos más duro respecto a expresiones mixtas, Pascal o Python? ¿Por qué? ¿y respecto a las declaraciones de tipo? 19. Considere las siguientes sentencias en Java a) double v1 = 4.0 / (5 / 10) ; b) double v2 = 4.0 / (5.0 / 10) ; ¿Qué diferencias ve entre a) y b)? ¿Qué valores quedaran almacenados en v1 y v2 respectivamente luego de ejecutar esas sentencias? ¿Por qué son diferentes? 20. Desarrolle un ejemplo en Pascal y contrástelo con otro en Python donde se muestre que el chequeo estático de tipos puede ayudar a la detección temprana de errores. 21. Describa las facilidades provistas por Pascal, Python y Java para soportar arreglos, presente ejemplos mostrando las diferencias. 22. Que formas de polimorfismo soporta: a) Java b) Pascal c) Python 23. ¿Qué lenguaje tiene un sistema de tipos más duro respecto al polimorfismo por inclusión, Java o Python? ¿Por qué? ¿y respecto al polimorfismo por sobrecarga?