Objetivo
Comprender las nociones fundamentales sobre las diversas propiedades de los sistemas de tipos y los tipos de datos
- Ejercicio 1 Sistemas de tipos
- Ejercicio 2 Tipos de datos
- Ejercicio 3 Tipos compuestos
- Ejercicio 4 Mutabilidad/Inmutabilidad
- Ejercicio 5 Manejo de punteros
- Ejercicio 6 TAD
b) Definir y contrastar las definiciones de un sistema de tipos fuerte y débil (probablemente en la bibliografía se encuentren dos definiciones posibles. Volcar ambas en l respuesta). Ejemplificar con al menos 2 lenguajes para cada uno de ellos y justificar.
a) Además de la clasificación anterior, también es posible caracterizar el tipado como estático o dinámico. ¿Qué significa esto? Ejemplificar con al menos 2 lenguajes para cada uno de ellos y justificar.
1. Dar una breve definición de: producto cartesiano (en la bibliografía puede aparecer también como product type), correspondencia finita, uniones (en la bibliografía puede aparecer también como sum type) y tipos recursivos.
2. Identificar a qué clase de tipo de datos pertenecen los siguientes extractos de código. En algunos casos puede corresponder más de una
Java | C | C |
class Persona {
String nombre;
String apellido;
int edad;
} |
typedef struct _nodoLista {
void *dato;
struct _nodoLista *siguiente
} nodoLista;
typedef struct _lista {
int cantidad;
nodoLista *primero
} Lista; |
union codigo {
int numero;
char id;
}; |
Ruby | PHP | Python |
hash = {
uno: 1,
dos: 2,
tres: 3,
cuatro: 4
} |
function doble($x) {
return 2 * $x;
} |
tuple = (
'physics',
'chemistry',
1997, 2000
) |
Hashell | Hashell | |
data ArbolBinarioInt =
Nil |
Nodo int
(ArbolBinarioInt dato)
(ArbolBinarioInt dato) |
data Color =
Rojo |
Verde |
Azul |
ArbolBinarioInt
es un tipo de dato que puede ser Nil (“vacío”) o un Nodo con un dato número entero (int) junto a un árbol como hijo izquierdo y otro árbol como hijo derechColor
es un tipo de dato que puede ser Rojo, Verde o Azul
1)
Definir mutabilidad e inmutabilidad respecto a un dato. Dar ejemplos en al menos 2 lenguajes. TIP: indagar sobre los tipos de datos que ofrece Python y sobre la operación
freeze en los objetos de Ruby.
a = Dato.new(1)
a = Dato.new(2)
¿Se puede afirmar entonces que el objeto “Dato.new(1)” es mutable? Justificar la respuesta sea por afirmativa o por la negativa.