Novena Clase de Algoritmica II

23
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS INGENIERIA DE SISTEMAS ALGORITMICA II 9. Clases Genéricas

description

Clase de Java

Transcript of Novena Clase de Algoritmica II

Page 1: Novena Clase de Algoritmica II

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOSINGENIERIA DE SISTEMAS

ALGORITMICA II

9. Clases Genéricas

Page 2: Novena Clase de Algoritmica II

Temas DEFINICION DE CLASES GENERICAS RELACION ENTRE CLASES GENERICAS METODOS GENERICOS EJERCICIO

Page 3: Novena Clase de Algoritmica II

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.

Page 4: Novena Clase de Algoritmica II

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.

Page 5: Novena Clase de Algoritmica II

CLASES GENERICAS EN JAVA

Las clases genéricas simplifican la implementación de clases que definen contenedores.

Listas Dinámicas Matrices (vectores).

Page 6: Novena Clase de Algoritmica II

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 >( );

Page 7: Novena Clase de Algoritmica II

Programación Genérica

Una programación que utiliza tipos como parámetros recibe el nombre de programación genérica.

Page 8: Novena Clase de Algoritmica II

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

Page 9: Novena Clase de Algoritmica II

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:

Page 10: Novena Clase de Algoritmica II

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.

Page 11: Novena Clase de Algoritmica II

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]

Page 12: Novena Clase de Algoritmica II

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); }

Page 13: Novena Clase de Algoritmica II

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]); }

Page 14: Novena Clase de Algoritmica II

EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR Constructor Copia

Public CVector (final Cvector v){ copiar(v);}

Page 15: Novena Clase de Algoritmica II

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;}

Page 16: Novena Clase de Algoritmica II

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”);}

Page 17: Novena Clase de Algoritmica II

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; }}

Page 18: Novena Clase de Algoritmica II

EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR

Public int longitud() { return vector.size(); }}

Page 19: Novena Clase de Algoritmica II

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.

Page 20: Novena Clase de Algoritmica II

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(); }

Page 21: Novena Clase de Algoritmica II

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}

}

Page 22: Novena Clase de Algoritmica II

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();}

Page 23: Novena Clase de Algoritmica II

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)

{ //………}