Post on 19-Feb-2016
description
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOSINGENIERIA DE SISTEMAS
ALGORITMICA II
9. Clases Genéricas
Temas DEFINICION DE CLASES GENERICAS RELACION ENTRE CLASES GENERICAS METODOS GENERICOS EJERCICIO
DEFINICION DE CLASES GENERICAS
Los tipos genéricos o tipos parametrizados permiten definir una clase o una interfaz una sola vez y después crear objetos de ella de diferentes tipos.
DEFINICION DE CLASES GENERICAS
Es un mecanismo que permite que un tipo pueda ser utilizado como parámetro en la definición de un método o una clase.
CLASES GENERICAS EN JAVA
Las clases genéricas simplifican la implementación de clases que definen contenedores.
Listas Dinámicas Matrices (vectores).
CLASES GENERICAS EN JAVA
Utilizando la clase genérica ArrayList:
ArrayList<Integer> ai = new ArrayLista<Integer>( );
ArrayList<String> as = new ArrayLista<String>( );
ArrayList<CuentaAhorro> ai = new ArrayLista<CuentaAhorro >( );
Programación Genérica
Una programación que utiliza tipos como parámetros recibe el nombre de programación genérica.
Clases Genericas en Java
La biblioteca estándar de Java, presenta muchas de sus abstracciones como clases genéricas; por ejemplo:
ArrayList, HashMap y TreeMap
DEFINICION DE CLASES GENERICAS
Class nombre_clase <lista de parametros> { … }
Ejemplo:
public class miClase < T1, T2 > { … }
La definición de una clase genérica se hace según la sintaxis siguiente:
CLASES GENERICAS
Los parámetros de la lista serán utilizados para implementar los métodos de la clase, bien como parámetros del método o como tipo del valor retornado.
CLASES GENERICASDiremos que:Se puede utilizar donde utilizamos cualquier otro tipo, aunque con bastantes restricciones.Ejemplo: No se permite crear matrices (vectores) de un tipo parametrizado privarte T[] a = new T[10]
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR
public class Cvector < T > {//vector private ArrayList < T > vector; // crear un vector con un espacio para n elementos.
public Cvector(int ne) // ne elementos
int nElementos; if (ne.length < 1) nElementos = 10; else nElementos = ne; vector = new ArrayList<T>(nElementos); }
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR crear un vector a partir de otro vector primitivo
Public CVector(T[ ] m){ int nElementos = m.length; vector = new ArrayList<T>(nElementos); //Copiar los elementos de la matriz m for ( int i = 0; i < nElementos; i++) vector.add( m[i]); }
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR Constructor Copia
Public CVector (final Cvector v){ copiar(v);}
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR Constructor Copia
Public CVector copiar (final Cvector v){ int nElementos = v.longitud(); vector = new ArrayList<T>(nElementos); //copia el objeto v for( int i = 0; i < nElementos; i++) vector.add( ( T)v.vector.get(i) ); return this;}
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR
Public void ponerValorEn (int i, T valor){int nElementos = this.longitud(); if ( i >= 0 && i < nElementos) vector.set(i, valor); else System.out.println(“Indice fuera de limites”);}
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR
Public T valorEn (int i ){ if ( i >= 0 && i<this.longitud()) return vector.get(i); else {System.out.println(“Indice fuera de limites”); return null; }}
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR
Public int longitud() { return vector.size(); }}
EJEMPLO: Definición de la clase genérica vector
OBSERVACION:Se observa que los métodos trabajan con objetos de tipo T. Ejemplo , el método ponerValorEn asigna un valor de tipo T y valorEn devuelve un valor
de T.
EJEMPLO: Aplicación que utiliza CVector
Public class Test{ //visualizar un vectorPublic static void visualizarVector (Cvector <Double> v)
{ int ne = v.longitud(); for ( int i =0 ; i < ne; i++) System.out.print(v.valorEn(i) + “ “); System.out.println(); }
EJEMPLO: Aplicación que utiliza CVector
Public static void main(String[] args){ double x[]={1.0,2.0,3.0,4.0,5.0,6.0,7.0}; CVector<Double> vector2 = new CVector<Double>(vector1); for ( int i = 0; i < vector2.longitud() ; i++) { vector2.ponerValorEn(i,(Double) vector2.valorEn(i)*10.0); } visualizarVector(vecor1); //escribe 1.0,2.0,3.0….7.0}
}
EJEMPLO: Aplicación que utiliza CVector
El esquema que construye el compilador Java para la clase CVector es el siguiente:Public class CVector extends java.lang.Object{public CVector ( int[]); public CVector (java.lang.Object[]); public CVector (CVector); public CVector copiar (CVector); public void ponerValorEn(int, java.lang.Object); public java.lang.Object valorEn(int); public int longitud();}
EJEMPLO: Aplicación que utiliza CVector
Esto permitirá declarar el parámetro v del método visualizar Vector de Test de tipo CVector.Public static void visualizarVector (CVector v)
{ //………}