novena clase de algoritmica ii

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

Upload: brian

Post on 19-Feb-2016

243 views

Category:

Documents


0 download

DESCRIPTION

Clase de Java

TRANSCRIPT

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)

{ //………}