novena clase de algoritmica ii
DESCRIPTION
Clase de JavaTRANSCRIPT
![Page 1: Novena Clase de Algoritmica II](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/1.jpg)
UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOSINGENIERIA DE SISTEMAS
ALGORITMICA II
9. Clases Genéricas
![Page 2: Novena Clase de Algoritmica II](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/2.jpg)
Temas DEFINICION DE CLASES GENERICAS RELACION ENTRE CLASES GENERICAS METODOS GENERICOS EJERCICIO
![Page 3: Novena Clase de Algoritmica II](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/14.jpg)
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR Constructor Copia
Public CVector (final Cvector v){ copiar(v);}
![Page 15: Novena Clase de Algoritmica II](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/18.jpg)
EJEMPLO: DEFINICION DE LA CLASE GENERICA CVECTOR
Public int longitud() { return vector.size(); }}
![Page 19: Novena Clase de Algoritmica II](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081420/5695d2aa1a28ab9b029b455f/html5/thumbnails/23.jpg)
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)
{ //………}