Está en la página 1de 6

CHAPTER 2: VALUES AND TYPES

2.1 TYPES Valor es cualquier entidad que puede ser manipulada por un programa. Pueden ser evaluados, almacenados, pasados como argumentos, devueltos por una funcin, etc. Cada lenguaje de programacin soporta diferentes Tipos de datos: C: integers, real numbers, structures, arrays, unions, pointers to variables and structures. C++: soporta todo lo anterior y tambin objetos. Java: booleans, integers, real numbers, arrays, and objects. Ada: Booleans, characters, enumerands, integers, real numbers, records, discriminated records, objects, pointers to data and to procedures, etc.

Type es un set de valores. Si v es un valor del tipo T, quiere decir que v pertenece a T. Si la expresin E es del tipo T, quiere decir que el resultado de la expresin ser un valor del tipo T. Adems, type est equipado con una o ms operaciones que pueden ser aplicadas uniformemente a todos esos valores. Todos los lenguajes de programacin soportan tipos tanto primitivos como compuestos, pero solo algunos de ellos soportan tambin los tipos recursivos. 2.2 PRIMITIVE TYPES (tipos primitivos) El tipo primitivo es aquel que tiene valores primitivos. Los valores primitivos son los que no pueden ser descompuestos en valores ms simples. 2.2.1 BUILT-IN PRIMITIVE TYPES Esta opcin nos dice mucho sobre el rea de aplicacin prevista del lenguaje de programacin. Lenguajes destinados al procesamiento de datos comerciales pueden tener tipos primitivos cuyos valores son cadenas de longitud fija y nmeros de punto fijo. Los destinados a la computacin numrica pueden tener tipos primitivos cuyos valores son nmeros reales y quizs nmeros complejos. Y los destinados al procesamiento de cadenas pueden tener tipos primitivos cuyos valores son cadenas con longitud arbitraria. 2.2.2 DEFINED PRIMITIVE TYPES Otra forma de evitar problemas es permitiendo que los programas definan sus propios tipos primitivos (integer, float point) con mayor precisin; por ejemplo con rangos determinados: en ADA tenemos lo siguiente -> type population is range 0..1e10; Countrypop: population; Worldpop: population; 2.2.3 DISCRETE PRIMITIVE TYPES Es un tipo primitivo cuyos valores tienen una relacin uno a uno con los rangos de enteros. En ADA es importante xq los valores de cualquier tipo primitivo discreto pueden ser usados como ndices de arreglos, conteos, etc. Por ejemplo en Ada se veria: Freq: array(Character) of Natural;

For ch in Character loop Freq(ch) :=0; End loop; 2.3 COMPOSITE TYPES (tipos compuestos) Un valor compuesto (estructura de datos) es un valor compuesto por valores ms simples. Tipo compuesto es aquel dond sus valores con compuestos. Ejemplos de valores compuestos: tuplas, estructuras, records, arreglos, objetos, unions, strings, listas, arboles, etc. 2.3.1 CARTESIAN PRODUCTS, STRUCTURES, AND RECORDS En un product cartesiano, valores de diferentes tipos son agrupados en tuplas. Se usa la notacin SxT, x se escoge de S y y se escoge de T: S T = {(x, y) | x S; y T} Las operaciones bsicas en pares son: o o Construction: de un par de un valor compuesto; Selection: del primer o segundo componente de un par.

Se puede inferir: #(S T) = #S #T Cuando los componentes de la tuplas son escogidos del mismo set se llaman Homogeneos. Homogeneos n-tuplas : #(Sn) = (#S)n 2.3.2 MAPPINGS, ARRAYS, AND FUNCTIONS
m : S T ; m es mapping de set S a set T; es decir, m maps cada valor en S a un valor T.

Si m maps el valor x en el set S para un valor y en el set T se escribe y= m(x). Y es llamado como la imagen de x sobre m. Un array es una secuencia de componentes indexados. Un array tiene un componente del tipo S por cada valor del tipo T. the lenght del array es #S. El tipo S tiene que ser finito. Los limites del rango del ndice se le llaman lower bound y upper bound. Las operaciones bsicas son: o o Construction: de un array de sus componentes; Indexing: seleccionando un componente en particular de un array, dado su ndice.

Mappings pueden ser implementados por cualquier array o funcin en los lenguajes de programacin. Se debe tener en cuenta el contexto del lenguaje de programacin cuando se habla de funciones, diferenciar entre funcion matematica (mapping) o el procedimiento funcin. 2.3.3 DISJOINT UNIONS, DISCRIMINATED RECORDS, AND OBJECTS Disjoint union, es por el que un valor se elige de uno de los varios sets. Se usa la notacin S+T para entender un set de valores de disjoint unin, cada uno de estos consiste en un tag junto a una variant escogida del set de S o de T. Tag indica el set de donde fue elegido la variant. S + T = {left x | x S} {right y | y T}

Las operaciones bsicas son: o o o Construction: de un valor de disjoint unin; Tag test: determina si la variant fue elegida de S o de T; Projection: para recuperar la variant en S o la variant en T.

Los componentes tag y variant de los descriminated records son seleccionados de igual forma que los componentes ordinarios de los records. Cuando se habla de objeto, se puede entender a cada objeto de una clase en particular como una tupla de componentes. Cualquier lenguaje de progrmacion permite objetos de diferentes clases para ser usados intercambiadamente. Por ello, veremos cada objeto como un tagged tupla. 2.4 RECURSIVE TYPES Este tipo esta definido en terminos de si mismo. Existen 2 comunes tipos recursivos, listas y cadenas (strings). 2.4.1 LISTS Es una secuencia de valores. El numero de componentes se llama lenght de la lista. Si los componentes son del mismo tipo de dice q la lista es homognea, si no se dice heterogenea. La tpicas operaciones son: o o o o o Lenght Emptiness test Head selection (selecciona el primer elemento de la lista) Tail selection (selecciona todos los elementos excepto del primer elemento) Cancatenation

Por ejemplo si se kiere definir un tipo integer-lists dond sus valores son listas de enteros. Se define un integer-list para que sea un valor. Esta definicin es recursiva
Integer-List = nil Unit + cons(Integer Integer-List

2.4.2 STRINGS Es una secuencia de caracteres. Puede tener cualquier numero de caracteres incluyendo ninguno. El numero de caracteres se llama lenght de string. Las tpicas operaciones son: o o o o o o Lenght Equality comparison Lexicographic comparison Character selection Substring selection Concatenation

2.4.3 RECURSIVE TYPES IN GENERAL Los valores de un tipo recursivo estn compuestos de valores del mismo tipo. En general, el set de valores del tipo recursivo, R, esta definido por la siguiente ecuacin recursiva:

R = . . . + (. . .R. . .R. . .) pueden tener diferentes soluciones. Pero siempre tiene una least solution que es un subset de cada otra solucin.

La cardinalidad de un tipo recursivo es infinito, incluso si cada valor individual del tipo es finito. 2.5 TYPE SYSTEMS Agrupa los valores en tipos. Permite a los programadores describir los datos efectivamente. Adems, ayuda q prevenir a los programas de cometer errores como: multiplicar un string con un boolean. Este tipo de operaciones se llama type error. 2.5.1 STATIC VS. DINAMIC TYPING Antes de que cada operacion sea ejecutada, los tipos de los operandos tienen que ser chekeados para prevenir type errors. Dichos chekeos se llaman type checks, que tienen q ser ejecutados antes de las operaciones. Existe una importante clasificacin de lenguajes de programacin es: statically typed y dynamically typed languages. o o Statically typed language: cada variable y cada expresin tiene un tipo fijo. Todos los operandos pueden ser typed-checked en tiempo de compilacin. Dynamically tped language: valores tienen tipos fijos, pero las variables y expresiones no. Cada vez q un operando es computado podra dar un valor de tipo diferente. Por lo que, los operandos tienen q ser typed-checked despus de que sean computados, pero antes que sean ejecutados, en tiempo de ejecucin. Eleccin entre static y dynamic typing es esencialmente pragmtico: o Static typing es mas eficiente. Dynamic typing requiere typed-checks en tiempo de ejecucin, lo cual reduce la eficiencia de la ejecucin del programa. Static typing solo requiere typed-checks en tiempo de compilacin, un menor costo. Dynamic typing fuerza a todos los valores a ser tagged y estos tags ocupan storage space. Static typing no requiere mucho tagging. o o Static typing es mas seguro, xq en la compilacin se certifica q no hay errores.dynamic typing no provee seguridad. Dynamic typing provee mayor flexibilidad, lo cual se necesita para algunas aplicaciones dond los tipos de datos no son conocidos. La mayora de lenguajes son statically typed. 2.5.2 TYPE EQUIVALENCE Cuando alguna operacion que espera un operando del tipo T1. Supongamos que eso se da en vez de un operando que su tipo es T2. Entoncs, checkeamos si T1 es equivalente a T2. Una definicin de type equivalence es structural equivalence; es decir, si T1 y T2 tienen el mismo set de valores. Otra definicin, es name equivalence, si T1 y T2 estan definidos en el mismo lugar.

Ventajas y desventajas de structural y name equivalence: o o Name equivalence fuerza cada tipo distinto a ser definido en un solo lugar. A veces es inconveniente, pero ayuda a hacer el programa mas fcil de mantener. Structural equivalence permite una confusin entre tipos que son coincidentemente similares. 2.5.3 THE TYPE COMPLETENESS PRINCIPLE Ninguna operacion debe ser arbitrariamente restringida en los tipos de sus operandos. Por ejemplo, los operandos de la operacin and son booleans no es una restriccin arbitraria, xq es inherente en la naturaleza de la operacin. 2.6 EXPRESSIONS Una expresion es una construccion que va a ser evaluada para producir un valor. Hay diferentes maneras de formar una expresin: o o o o o o Literals Constructions Function calls Conditional expressions Iterative expressions Constante and variable accesses

Lo que realmente importa para la programacin es que el lenguaje provea todas o casi todas las formas de expresiones. 2.6.1 LITERALS El ms simple tipo d expresin, q denota un valor fijo de algn tipo. 365 denota integer. 2.6.2 CONSTRUCTIONS Una construccion es una expresion que construye un valor compuesto desd sus valores componentes. En algunos lenguajes, los valores componentes deben ser literals. Pero en otros, los valores componentes son computarizados evaluando subexpresiones. Una construccin en java, es una invocacion a una operacin llamada constructor. 2.6.3 FUNCTION CALLS Una llamada a funcin calcula un resultado por la aplicacin de un procedimiento de funcin de uno o mas argumentos. La llamada a una funcin tiene tpicamente la forma de F(E), donde F es la funcin y E es la expresin que ser evaluada para determinar el argumento. Un operador puede ser considerado como indicador de una funcin. Se dice infix notation cuando el operador esta entre dos operandos. Se dice prefix operation cuando el operador esta antes de los operandos.

examples of JAVA operators: The unary operator ! denotes the function {falsetrue, truefalse} in BooleanBoolean. The binary operator % denotes the remainder function in Integer IntegerInteger. The binary operator + denotes several functions at the same time: integer addition in Integer Integer Integer, real addition in Float Float Float, and concatenation in String StringString.

2.6.4 CONDITIONAL EXPRESSIONS Calcula un valor que depende de una condicin. Tiene una o mas subexpresiones, donde una es escogida para ser evaluada. (cuando se usa if) 2.6.5 ITERATIVE EXPRESSIONS Una expresin iterativa es aquella que realiza un calculo sobre una serie de valores (componentes de una matriz o lista), dando algn resultado. 2.6.6 CONSTANT AND VARIABLE ACCESSES Un acceso constant es una referencia a una constante con nombre y obtiene un valor de esa constante. Un acceso variable es una referencia a una variable con nombre, y obtiene el valor actual de esa variable.

También podría gustarte