jueves, 5 de septiembre de 2013

Estructuras Lineales y no Lineales



Existen tres estructuras lineales especialmente importantes:
1.-Las pilas
2.-Las colas
3.-Las listas


Su importancia radica en que son muy frecuentes en los esquemas algorítmicos.
Las operaciones básicas para dichas estructuras son:


• Crear la secuencia vacía
• Añadir un elemento a la secuencia
• Borrar un elemento a la secuencia
• Consultar un elemento de la secuencia
• Comprobar si la secuencia está vacía


La diferencia entre las tres estructuras vendrá dada por la posición del elemento a añadir, borrar y consultar:

• Pilas: Las tres operaciones actúan sobre el final de la secuencia
• Colas: Se añade por el final y se borra y consulta por el principio
• Listas: Las tres operaciones se realizan sobre una posición privilegiada de la secuencia, la cual puede desplazarse

Estructura de Datos No Lineales:


Se caracteriza por no existir una relación de sus elementos es decir que un elemento puede estar con cero uno o mas elementos. Las estructuras no lineales de datos mas general son los árboles donde no existe ninguna relación de orden Predefinida.
Esta estructura se usa principalmente para representar datos con una relación jerárquica entre sus elementos, como por ejemplo registros, árboles genealógicos y tablas de contenidos.

Abstracción y su Clasificación.-


Podríamos definir la abstracción como la "acción de aislar mentalmente o considerar por separado las cualidades de un objeto, considerar un objeto en su esencia". A través de la abstracción conseguimos extraer las cualidades principales sin detenernos en los detalles. Conseguimos a partir de un tema determinado, generalizar y obtener una visión global del tema. Cuando montamos un ordenador ensamblamos los componentes necesarios para construir el ordenador. 

Utilizamos una placa base, un disco duro, memoria, etc. Manejamos estos dispositivos a un nivel funcional. Es decir, abstraemos las funciones de cada dispositivo para trabajar con ellos. 

En ningún momento nos paramos a pensar cómo funcionan internamente o de cuántos condensadores y transistores está compuesto.


La abstracción es una herramienta muy potente en programación, pues reduce considerablemente el trabajo de implementación y aumenta la portabilidad del código. La programación orientada a objetos aporta elementos para abstraer el problema en dos sentidos: 
Por un lado nos permite referirnos a objetos para representar la realidad, describiendo el problema en términos del problema en lugar de en términos de la solución. En un programa de gestión comercial, tendremos el objeto cliente o el objeto factura, que no son más que representaciones de otros objetos en el espacio del problema. 

La clave de la programación orientada a objetos está en abstraer los métodos y los datos comunes a un conjunto de objetos y agruparlos en una clase. Gracias a este nivel de abstracción, añadir o eliminar un objeto nuevo supondrá muy poco esfuerzo. 

A grandes rasgos, la abstracción, permite que dispongamos de las características de un objeto que necesitemos. Si necesitamos el objeto Persona, podríamos poner nombre, edad, dirección, estado civil, etc. 



Si lo necesitamos en un sistema administrativo, pero, si lo requerimos para el área de biología, dentro de sus atributos quizá tengamos, ADN, RND, Gen x1, Gen x2, etc., y los atributos antes mencionados no sean requeridos. En general, podemos decir que Persona cuenta con todos los atributos mencionados aquí, pero por el proceso de abstracción excluimos todos aquellos que no tienen cabida en nuestro sistema. Se define como un método por el cual se rescatan los datos relevantes y se ignoran los irrelevantes.
Veamos los diferentes tipos de abstracción que podemos encontrar en un programa:


1. Abstracción funcional: crear procedimientos y funciones e invocarlos mediante un nombre donde se destaca qué hace la función y se ignora cómo lo hace. El usuario sólo necesita conocer la especificación de la abstracción (el qué) y puede ignorar el resto de los detalles (el cómo).


2. Abstracción de datos: 


Tipo de datos: proporcionado por los leguajes de alto nivel. La representación usada es invisible al programador, al cual solo se le permite ver las operaciones predefinidas para cada tipo. 

Tipos definidos: por el programador que posibilitan la definición de valores de datos más cercanos al problema que se pretende resolver. 

TDA: para la definición y representación de tipos de datos (valores + operaciones), junto con sus propiedades. 

Objetos: Son TDA a los que se añade propiedades de reutilización y de compartición de código.

Datos Compuestos.-



Un tipo compuesto es diferente del tipo de datos de cualquiera de sus componentes. Por ejemplo, una matriz de elementos Entero no es del tipo de datos Entero.

No existe ningún tipo de datos que incluya todas las estructuras. En su lugar, cada definición de una estructura representa un tipo de datos exclusivo. La misma exclusividad es aplicable a las clases.


No existe ningún tipo de datos que incluya todas las matrices. El tipo de datos de una instancia específica de una matriz está determinada por: 
  • El hecho de ser una matriz 
  • La longitud de la matriz 
  • El tipo de matriz 
  • El tipo de elemento de la matriz 
Esto queda reflejado en el ejemplo siguiente:

Var A[12]:Byte Var B[2]:Byte Var C[2]:Entero Var D[]:Entero

En el ejemplo anterior, las variables de matriz A y B no se consideran del mismo tipo de datos porque poseen distintas longitudes. Las variables de matriz B y C no son del mismo tipo porque sus tipos de elemento son distintos. C y D no son del mismo tipo porque una matriz es estática y la otra dinámica.

Datos Primitivos.-

El tipo de dato de una variable determina los valores que puede contener además de las operaciones que se puede realizar sobre ella. El lenguaje de programación Java incluye siete otros tipos de datos primitivos además de int. Un tipo primitivo está predefinido por el lenguaje y se nombra con una palabra clave reservada. Los valores primitivos no comparten estado con otros valores primitivos. Los ocho tipos de datos primitivos incluidos en el lenguaje de programación Java son:
  1. byte: El tipo de dato byte es un entero de 8 bits complemento a dos. Su valor mínimo es -128 y el máximo 127 (inclusive). El tipo de datosbyte se puede utilizar para ahorrar memoria en grandes arrays, donde el ahorro de memoria realmente importa. También se pueden utilizar en lugar de int donde sus límites ayudan a aclarar el código, el hecho de que el rango de una variable es limitado puede servir como una forma de documentación.
  2. short: El tipo de dato short es un entero de 16 bits complemento a dos. Su valor mínimo es -32,768 y el máximo 32,767 (inclusive). Se aplican las mismas directrices que con byte: puede utilizar short para ahorrar memoria en grandes arrays, en situaciones en las que el ahorro realmente importa.
  3. int: El tipo de dato int es un entero de 32 bits complemento a dos. Su valor mínimo es -2,147,483,648 y el máximo 2,147,483,647 (inclusive). Generalmente este tipo es la elección predeterminada para valores enteros a no ser que haya una razón (como las mencionadas anteriormente) para elegir otro. Este tipo de dato normalmente será lo suficiente grande para los números que su program vaya a utilizar pero si necesita un rango más amplio, utilice long.
  4. long: El tipo de dato long es un entero de 64 bits complemento a dos. Su valor mínimo es -9,223,372,036,854,775,808 y el máximo 9,223,372,036,854,775,807 (inclusive). Utilice este tipo de dato cuando necesite un rango de valores más amplio que el proporcionado por int.
  5. float: El tipo de dato float es un dato en coma flotante IEEE 754 de 32 bits y precisión simple. Su rango de valores está fuera del ámbito de este tema, pero se detalla en la sección 4.2.3 de la Especificación del lenguaje Java. Al igual que con byte y short, se recomienda usar unfloat (en vez de un double) si necesita ahorrar memoria en grandes array de números en coma flotante. Este tipo de dato nunca debería ser usado para valores precisos como, por ejemplo, divisas. Para esto debería usarla clase java.math.BigDecimal. Números y cadenas trataBigDecimal y otras clases útiles proporcionadas por la plataforma Java.
  6. double: El tipo de dato double es un dato en coma flotante IEEE 754 de 64 bits y precisión doble. Su rango de valores está fuera del ámbito de este tema, pero se detalla en la sección 4.2.3 de la Especificación del lenguaje Java. Normalmente este tipo de dato es la elección predeterminada para valores decimales. Como ya se ha mencionado, este tipo de dato no se debería utilizar para valores precisos como, por ejemplo, divisas.
  7. boolean: El tipo de dato boolean solamente tiene dos valores posibles: true (verdadero) y false (falso). Utilice este tipo de datos como conmutadores para la evaluación de condiciones verdadero/falso. Este tipo de dato representa un bit de información, pero su «tamaño» es algo que no está definido con precisión.
  8. char: El tipo de dato char es un solo carácter Unicode de 16 bits. Tiene un valor mínimo de '\u0000' (o «0») y un máximo de '\uffff' (o 65.535 inclusive).
Tipo de datoValor predeterminado (para campos)
byte0
short0
int0
long0L
float0.0f
double0.0d
char'\u0000'
String (o cualquier objeto)  null
booleanfalse

Valores predeterminados

No siempre es necesario asignar un valor cuando se declara un campo. El compilador fija un valor predeterminado razonable para los campos que se declaran pero no son inicializados. En general, este valor será cero o null, dependiendo del tipo de dato. Sin embargo, fiarse de estos valores predeterminados se considera una mala costumbre en la programación.

Estructura.-

Las estructuras de datos son una colección de datos cuya organización se caracteriza por las funciones de acceso que se usan para almacenar y acceder a elementos individuales de datos.
Una estructura de datos se caracteriza por lo siguiente:
  • Pueden descomponerse en los elementos que la forman.
  • La manera en que se colocan los elementos dentro de la estructura afectará la forma en que se realicen los accesos a cada elemento.
  • La colocación de los elementos y la manera en que se accede a ellos puede ser encapsulada.
Ejemplo: Supongamos que nos enfrentamos a un problema como este: Una empresa que cuenta con 150 empleados, desea establecer una estadística sobre los salarios de sus empleados, y quiere saber cual es el salario promedio, y también cuantos de sus empleados gana entre $1250.00 y $2500.00.
Si tomamos la decisión de tratar este tipo de problemas con datos simples, pronto nos percataríamos del enorme desperdicio de tiempo, almacenamiento y velocidad. Es por eso que para situaciones de este tipo la mejor solución son los datos estructurados.


Una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema.

Una estructura de datos define la organización e interrelación de estos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones básicas son:





Alta: adicionar un nuevo valor a la estructura.
Baja: borrar un valor de la estructura.
Búsqueda: encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma secuencial o binario (siempre y cuando los datos estén ordenados).

Otras operaciones que se pueden realizar son:

Ordenamiento, de los elementos pertenecientes a la estructura.
Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.
Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. De esta forma, la elección de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre los datos.