한국   대만   중국   일본 
Union de datos - Wikipedia, la enciclopedia libre Ir al contenido

Union de datos

De Wikipedia, la enciclopedia libre

En programacion, una union es un valor que puede poseer varias representaciones o formatos; o una Estructura de datos que consiste en una variable que puede almacenar dicho valor. Algunos lenguajes de programacion admiten tipos de datos especiales, llamados union types , para describir dichos valores y variables.

Dependiendo del lenguaje y del tipo, un valor union puede ser usado en operaciones como, por ejemplo, asignacion o comparacion de igualdad, sin necesidad de saber su tipo especifico. Por el contrario, otras operaciones si que requieren saber el tipo de dato ? ya sea por medio de informacion externa, o por el uso de un tagged union .

A causa de sus limitaciones de uso, las uniones son normalmente proveidas en lenguajes sin tipado o en modo inseguro (como en C ). Tienen la ventaja sobre las uniones etiquetadas por no necesitar espacio para guardar el tag.

El nombre "union" proviene de la definicion formal de type. Si uno mira el type como el Conjunto de todos los valores que ese type puede ser, un union type es simplemente la Union de conjuntos de los types que lo constituyen, puesto que es capaz de almacenar cualquier valor que puedan sus elementos. Ademas, puesto que la union matematica evita los duplicados, si mas de un campo puede almacenar un valor comun, es imposible decir, a partir del valor, que campo fue el ultimo en ser escrito.

Union en distintos lenguajes de programacion [ editar ]

C/C++ [ editar ]

En C y C++, las uniones son expresados casi igual que los struct excepto que cada miembro empieza en la misma direccion de memoria. Los elementos, al igual que en los structs, no necesitan ser valores simples, de hecho, pueden ser structs e incluso uniones. Por otra parte, C++ no permite a un elemento ser de cualquier tipo que tenga un full fledged constructor/destructor y/o copy constructor, o una copia no-trivial del operador de asignacion. En particular, es imposible tener cadenas de caracteres estandar de C++ como miembro de una union. El objeto union ocupa tanto espacio como el elemento mas grande que lo compone, mientras que los structs necesitan al menos el mismo espacio que la suma de los tamanos de todos sus elementos. Esta ganancia en espacio, muy util en algunos casos, implica un gran coste en seguridad: la logica del programa debe asegurarse de que solo se lee el ultimo elemento en ser escrito por todos los posibles caminos que lleve el programa al ejecutarse.

La principal ventaja de la union es el ahorro de espacio, ya que proporciona una manera de guardar varios tipos de datos en el mismo espacio. Las uniones proporcionan tambien polimorfismo . Pero, no se comprueba el tipo de los datos, asi que es tarea del programador asegurarse que se accede correctamente en todos los posibles contextos. El elemento mas relevante de la variable union es normalmente determinado por el estado de otra variable, probablemente dentro de un struct.

Un uso comun de las uniones en C es lo que en C++ se llama reinterpret_cast , asignando los datos a un elemento de la union y leyendo de otro, para codigos que dependen de la representacion cruda de los valores. Aunque esta no es una forma segura de usar las uniones.


Pascal [ editar ]

El lenguaje de programacion Pascal permite crear uniones de manera muy similar a la manera en que sea crean las estructuras (cambiando "Estruc" por "Union"). El principal uso de las uniones es para interpretar un valor de un tipo de dato en otro tipo de dato, por ejemplo interpretar los bytes de un valor flotante como un entero. En este ejemplo el valor flotante no es convertido a un entero, sino que los bytes que lo componen se interpretan como un entero. A diferencia de C / C++ las uniones en Pascal pueden contener cadenas de caracteres, al igual que estructuras y otras uniones.