Según Wikipedia, un tipo de dato, es "un atributo de una parte de los datos que indica al ordenador (y/o el programador) algo sobre la clase de datos sobre los que se va a procesar. Esto incluye imponer restricciones en los datos, como qué valores pueden tomar y qué operaciones se pueden realizar."
Con ese definición, es fácil imaginar un tipo de dato como una sistema para representar datos. Un tipo de dato puede ser un numero, un color, o un auto. En Java, cuando quiere usar adición de A + B, es necesario declarar A y B. Aquí es importante entender que es un tipo de dato porque no sabemos que valor ni que podemos hacer con A o B. Entonces, voy a dar el valor de el numero 10 a B y el numero 3 a A. Para Java, también necesito declarar A y B como enteros (un numero de −2,147,483,648 a +2,147,483,648). Ahora, Java sabe los valores de B y A (10 y 3) y como pueden interactuar los valores (puede sumar enteros, sustraer enteros, multiplicar enteros, etc.).
int A = 3;
int B = 10;
int total = A + B;
Aunque es diferente en todos lenguajes de programación, el tipo de dato básico es común, y ahora sabemos que es un tipo de dato básico en Java (i.e., el tipo de básico de entero tiene un numero de valor entre -2,147,483,648 a + 2,147,483,647 que puede ser manipulado por división, multiplicación, etc.).
Es importante dar cuenta que no todos tipos de datos pueden interactuar. El tipo de dato entero, en unos lenguajes de programación, no puede ser dividido por unos números de coma flotante (decimales como 2.33). Es decir,int 31 no puede interactuar con float 644.44 porque son diferentes tipos de datos. Sin embargo, si yo declara 31 como un flotante, puede interactuar con float 644.44. Por ejemplo, float 31 + float 644.44 es valido porque son el mismo tipo de dato (31 e realidad es 31.00).
Por otro mano, no todos tipos de datos aceptan todos los valores. El tipo de dato entero no sabe que hacer con un cadena de palabras como "Hola". El valor de un tipo de dato es estricto: para un entero, solo números entre -2,147,483,648 a + 2,147,483,647; para un color, solo rojo/verde/amarillo/blanco/etc.; para un nombre, solo Alejandro/Diego/Roberto/(algo con letras). Esto es importante porque cuando hacemos operaciones con los tipos de datos, es imposible sumar un entero deint 3 y int "Hola" porque no tiene sentido.
Continuando, tipos de datos, puede ser mucho mas complejo de solo un entero. Muchas vezes tipos de datos básicos pueden mezclar para hacer un tipo de dato mas grande. Por ejemplo, tengo el tipo de dato que podemos llamar Persona. Un persona tiene un apellido (cadena de palabras), un nombre (cadena de palabras), un teléfono (entero),colorPelo (color), y esposo (persona). Nota bene: la sintaxis de estos ejemplos no es ejecutable en un lenguaje de programación, pero es pseudocódigo.
class persona
{
string apellido;
string nombre;
entero teléfono;
color colorPelo;
persona esposo;
}
Ahora, ¿qué es el tipo de dato "color"? Podemos definir lo como tres enteros, uno para rojo, uno para verde, y uno para azul.
class color {
int rojo
int azul
int verde
}
Y, ahora, la cosa mas interesante, el tipo de dato persona para el valor esposo. Este es donde un tipo de dato puede relacionar con otro tipo de dato similar. Vamos a mirar como relaciona Diego aMaribella:
persona Lidia
{
string apellido = Mendoza;
string nombre = Lidia;
entero teléfono = 6391-7321;
color colorPelo = negro;
persona esposo =Diego;
}
persona Diego
{
string apellido = Sanchez;
string nombre = Diego;
entero teléfono = 3122-3314;
color colorPelo = negro;
persona esposo =Lidia;
}
color negro {
int rojo = 0;
int azul = 0;
int verde = 0;
}
Por tanto, este sistema de representación de tipo de dato puede ser mucho mas complejo. La idea central es que un tipo de dato es "un sistema de tipificación, describiendo la representación, interpretación y la estructura de los valores u objetos almacenados en la memoria del ordenador" (Wikipedia). En este sentido, un tipo de dato es una arquitectura para que los tipos pueden interactuar y ser susceptible a unos procesos o algoritmos.
Estos procesos son importantes porque son parte del protocolo o arquitectura del tipo de dato. Es decir, dan un tipo de dato el poder a relacionar con otros tipos de datos y formar un red. Esta es donde la palabra "abstracto" es importante. Un tipo de dato abstracto (TDA) es un especificación del tipo de dato y los operaciones que un programador puede preformar por el tipo de dato. Con un (TDA) la implementación del TDA no importa, solamente el interfase. Entonces, para un TDA de un árbol binario de encontrar, tenemos unos acciones (insertar, eliminar, encontrar, acciones) que son implementados con unos tipo de datos concretos: un arroyo, un árbol binario, un árbol binario negro-rojo, o otro tipo de dato concreto. La importancia de un tipo de dato abstracto es que es algo virtual, algo que es caja negra, pero define la estructura y la arquitectura para relacionar los datos.
Para tener un mejor idea de el tipo de dato, vemos el TDA de una lista. Tiene cuatro operaciones básicos:
- un operación para ver si la lista está vacía;
- un operación para inserta algo a la lista
- un operación para ver la primera dato en la lista
- un operación para ver todos la cosas en la lista sino la primera dato
En la implementación de el TDA, podemos saber si la lista es auto-referencial (si la lista puede tener un dato que es otro lista), si la lista puede tener cualquier tipo de dato o solo unos tipos de datos, y otros especificaciones de la lista, pero con estoTDA , si los especificaciones son así, puedes implementar la con cualquiera lenguaje y cualquiera tipos de datos. La imagen al principio de este post muestra la complejidad unos de estos listas puede tener.
En esto sumario de tipos de datos y TDA, tenemos muchos componentes. Mi trabajo es analizar un tipo de dato como un red.
No comments:
Post a Comment