Ejercicio07

Anuncio
Qué propósito tienen los tipos en los lenguajes de programación
- Los tipos proveen un contexto implícito para muchas operaciones, por lo que el
programador se evita de especificar el contexto explícitamente.
- Los tipos limitan un conjunto de operaciones que pueden ser manejadas en una
semántica valida dentro del programa. Ello previene que el programador agregue un
carácter y un record por dar un ejemplo.
Cuál es la diferencia entre los tipos de equivalencia y los tipos de compatibilidad
Los tipos equivalentes determinan las reglas cuando los tipos de dos valores son el
mismo. Los tipos de compatibilidad determinan las reglas cuando un valor es dado y
puede ser usado en el contexto dado.
Qué es el tipo de inferencia
Un tipo de inferencia es cuando se determinan o definen las reglas de un tipo de una
expresión basada sobre los tipos sobre las partes que la constituyen en el contexto que la
rodea.
Qué es el tipo clash
El tipo de chequeo es cuando el proceso se cerciora que los programas obedecen las
reglas de compatibilidad de tipos, una violación de dichas reglas es lo que se conoce
como tipo clash.
Qué significa que un lenguaje sea fuertemente tipeado
Si las reglas del lenguaje permiten verificar que toda posible aplicación de operación a
objetos sea adecuada.
Qué significa que un lenguaje sea estáticamente tipeado
Es lo mismo que fuertemente tipeado solo que adicionalmente que todas las
verificaciones pueden ser hechas antes de la ejecución de los programas.
Si hay record variantes se consideran los mismos una forma de polimorfismo, por
qué si o no
Efectivamente los registros de tamaño variable son una forma de polimorfismo ya que
constituyen el mismo ente semánticamente solo que varían sus elementos constituyentes
cada vez.
Algunas definiciones de lenguajes especifican una representación particular de los
tipos de datos en la memoria, mientras que otros especifican solamente el
comportamiento semántico de los tipos. Algunas implementaciones de lenguajes
garantizan una representación en particular, mientras otros reservan la manera
correcta de representar in diferentes circunstancias. Cuál prefieres y por qué?
Argumentando a través de un caso, supongamos que se tiene predefinida la disposición
por fila en memoria para un arreglo multidimensional y por otro lado puede escoger de
acuerdo a las circunstancias el tipo de disposición que tendrá (por fila o columna)
influyendo en flexibilidad y eficiencia. Por tanto pareciera ser más adecuado el uso de un
modelo adaptado a la ocasión.
Más lenguajes modernos de la familia Algol usa de alguna manera la equivalencia
por nombres para tipos, es estructuralmente equivalente una mala idea? Por qué?
La equivalencia estructural resulta un enfoque que se ha dejado de lado en los lenguajes
modernos ya que en primer lugar requiere un esfuerzo adicional del compilador para
realizar comparaciones componente a componente que requiere expansión de código in
situ.
Considera las siguientes declaraciones
1.- type cell
2.- type cell.ptr = pointer to cell
3.- x : cell
4.- type cell = record
5.val : integer
6
next : cell.ptr
7/- y : cell
Podría ser la declaración de la línea cuatro, introducir un tipo alias? Bajo estricta
equivalencia pueden tener “x” y “y” el mismo tipo
Si es un alias ya que se está definiendo un tipo en términos de otro. “x” e “y” pueden
tener el mismo tipo a pesar de la equivalencia estricta por nombre ya que cuando se le
asigna el valor a “x” no estaba definido el tipo con solo declararlo, por tanto toma el valor
de su posterior definición al igual que “y”.
Ada provee dos operadores de tipo “remainder”, rem y mod para tipos enteros. Da
valores para A y B en el que “A rem B” y “A mod B” dan diferentes, considere el
operador % de C y el mod operador de Pascal.
A = (A/B)*B + (A rem B)
Despejando (A rem B) obtenemos:
(A rem B) = A – (A/B)*B
A = B*N + (A mod B)
Despejando (A mod B) obtenemos:
(A mod B) = A – B*N
Suponiendo valores arbitrarios para A = 11, B = 4 y N=1 tenemos:
A rem B = A – (A/B)*B
= 11 – 2 * 4
= 3
A mod B = A – B*N
= 11 – 4*1
= 7
Debido a la posibilidad de obtener resultados diferentes de acuerdo a la operación
aplicado, no son redundantes. Por otro lado el porcentaje (%) de C y el mod de pascal
tienen comportamiento similar al mod de Ada, que resulta más cercano a la noción de
resto que se tiene habitualmente.
Descargar