Estructura_de_datos
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

TIPOS DE DATOS ABTRACTOS (ANA ORTEGA)

Ir abajo

TIPOS DE DATOS ABTRACTOS (ANA ORTEGA) Empty TIPOS DE DATOS ABTRACTOS (ANA ORTEGA)

Mensaje  Ana Ortega Miér Ene 07, 2009 1:35 pm

1.- ¿Qué entendemos por los tipos de datos abstractos?
Una abstracción de datos (tipo de dato o tipo abstracto de dato) es un nuevo tipo de dato más un conjunto de operaciones que permiten manipular los objetos de dicho tipo. En esta definición juega un papel importante el uso de la palabra objeto en lugar de variable.
La correcta utilización de los tipos abstractos de datos (TAD en lo sucesivo) en el diseño de programas da lugar a programas de gran modularidad y calidad:
 son más legibles,
 son más fáciles de mantener y
 son más fáciles de modificar.
Si se considera el tipo de dato como un conjunto de valores, entonces todo lo que se necesita para implementarlo es elegir una representación de almacenamiento (o estructura de datos) para las variables del tipo, por tanto, si la representación cambia también deben modificarse todos los programas que usan el tipo de dato.


2.- ¿De dónde se derivan los tipos de datos abstractos?
Un TDA se denomina Clase, y los que heredan de una clase base se llaman clases derivadas o subclases; un TDA se deriva de una clase padre denominada superclase.

3.- ¿Qué son las interfaces en Java?
En Java una interface es una clase abstracta pura, es decir una clase donde todos los métodos son abstractos (no se implementa ninguno). Permite al diseñador de clases establecer la forma de una clase (nombres de métodos, listas de argumentos y tipos de retorno, pero no bloques de código). Una interface puede también contener datos miembro, pero estos son siempre static y final. Una interface sirve para establecer un 'protocolo' entre clases.
Para crear una interface, se utiliza la palabra clave interface en lugar de class. La interface puede definirse public o sin modificador de acceso, y tiene el mismo significado que para las clases. Todos los métodos que declara una interface son siempre public.
Para indicar que una clase implementa los métodos de una interface se utiliza la palabra clave implements. El compilador se encargará de verificar que la clase efectivamente declare e implemente todos los métodos de la interface. Una clase puede implementar más de una interface.
EJEMPLO:
Una interface se declara:
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
. . .
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
Y una clase que implementa la interface:
class InstrumentoViento extends Object implements InstrumentoMusical {
void tocar() { . . . };
void afinar() { . . .};
String tipoInstrumento() {}
}
class Guitarra extends InstrumentoViento {
String tipoInstrumento() {
return "Guitarra";
}
}

4.- ¿Qué son las colecciones?
La interfaz más importante es Collection. Una Collection es todo aquello que se puede recorrer (o “iterar”) y de lo que se puede saber el tamaño. Muchas otras clases extenderán Collection imponiendo más restricciones y dando más funcionalidades. Es de notar que el requisito de "que se sepa el tamaño" hace inconveniente utilizar estas clases con colecciones de objetos de las que no se sepa “a priori” la cantidad (ésto podría considerarse una limitación de este framework).
Por las dudas vuelvo a aclarar: No puedo construir una Collection. No se puede hacer “new” de una Collection, sino que todas las clases que realmente manejan colecciones “son” Collection, y admiten sus operaciones.
Las operaciones básicas de una collection entonces son:
add(T)
Añade un elemento.
iterator()
Obtiene un “iterador” que permite recorrer la colección visitando cada elemento una vez.
size()
Obtiene la cantidad de elementos que esta colección almacena.
contains(t)
Pregunta si el elemento t ya está dentro de la colección.
iterator()
Obtiene un “iterador” para recorrer la colección.
Si yo tengo un objeto Collection hay muchas cosas que no puedo asumir. No puedo asumir que el orden en el que lo recorro sea relevante, es decir, que si lo recorro de nuevo vea los elementos en el mismo orden en el que los vi la primera vez. Tampoco puedo asumir que no hay duplicados. No puedo asumir características de rendimiento: Preguntar si existe un objeto en la colección puede tardar desde muy poco hasta... mucho =).
Una capacidad de un objeto Collection es la de poder ser recorrido. Como a este nivel no está definido un orden, la única manera es proveyendo un iterador, mediante el método iterator(). Un iterador es un objeto “paseador” que nos permite ir obteniendo todos los objetos al ir invocando progresivamente su método next(). También, si la colección es modificable, podemos remover un objeto durante el recorrido mediante el método remove() del iterador. El siguiente ejemplo recorre una colección de Integer borrando todos los ceros:
void borrarCeros(Collection<Integer> ceros)
{
Iterator<Integer> it = ceros.iterator();
while(it.hasNext())
{
int i = it.next();
if(i == 0)
it.remove();
}
}
En este ejemplo hago uso de la conversión automática entre Integer e int.
A partir de Java 6 hay una manera simplificada de recorrer una collection (que sirve si no necesitamos borrar elementos). Se hace mediante una nuevo uso del keyword for:
void mostrar(Collection<?> col)
{
for(Object o : col)
System.out.println(o);
}


5.- Agregue un ejemplo (código en Java de su respuesta)

interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
class InstrumentoViento extends Object implements InstrumentoMusical {
void tocar() { . . . };
void afinar() { . . .};
String tipoInstrumento() {}
}
class Guitarra extends InstrumentoViento {
String tipoInstrumento() {
return "Guitarra";
}
}

Ana Ortega

Mensajes : 1
Fecha de inscripción : 10/12/2008

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.