Download Los tipos genéricos son clases parametrizadas por uno o más tipos

Document related concepts
no text concepts found
Transcript
GH0D\RGH)XQGDPHQWRVGH7HOHPiWLFD
ÈUHDGH,QJHQLHUtD7HOHPiWLFD
'HSDUWDPHQWRGH,QJHQLHUtDGH6LVWHPDV\$XWRPiWLFD
(VFXHOD6XSHULRUGH,QJHQLHURV
8QLYHUVLGDGGH6HYLOOD
(MHUFLFLRSXQWRV
Los tipos genéricos son clases parametrizadas por uno o más tipos que deben ser facilitados por el
programador cuando quiera crear objetos de esa clase. Estas clases pueden usar los métodos genéricos,
en los que los argumentos; y el resultado puede incluir referencias a tipos que no se conocerán hasta
que vayamos a usar el método.
• Implemente en el lenguaje de programación Java la clase genérica 3DUHMD67! en el paquete
que permite mediante su instanciación una asociación de dos datos de tipos
formales 6 y 7. Proporcione su constructor, y los métodos JHW y VHW para ambos tipos.
Implemente en el lenguaje de programación Java la clase $VRFLD)LFKHURV, en el paquete
(MHUFLFLR que use la clase 3DUHMD67! para asociar la primera línea de un fichero con la
(MHUFLFLR
•
•
primera del segundo fichero, la segunda línea con la segunda línea, y así sucesivamente utilizando
objetos de tipo 6WULQJ. Los objetos creados con los constructores 3DUHMD67!se añadirán a
una estructura de tipo $UUD\/LVW7!.
Implemente una clase con el método PDLQ que invoque de forma apropiada los objetos para que
realice la operación indicada.
(MHUFLFLRSXQWRV
•
Implemente en el lenguaje de programación Java la clase &DGHQDV)LOWUDGDV que implemente
los métodos de ,WHUDWRU(!, para que filtre las cadenas (objetos del tipo 6WULQJ) que tenga
una longitud superior a un determinado valor proporcionado mediante el constructor de la clase. El
constructor constará de dos parámetros: Un iterador con los objetos a filtrar y la longitud máxima a
partir de la cual los objetos de tipo 6WULQJ del iterador son descartados.
•
El método UHPRYH , implementa una operación que no se va a utilizar. Deberá lanzar la
excepción MDYDXWLO8QVXSSRUWHG2SHUDWLRQ([FHSWLRQ.
El método QH[Wgenerará la excepción 1R6XFK(OHPHQW([FHSWLRQ si se invoca y no hay más
elementos en el iterador.
• Implemente una clase que instancia la clase &DGHQDV)LOWUDGDV, en el método PDLQ, use la
clase $UUD\/LVW(! para insertar los objetos de tipo 6WULQJ, para poder proporcionarla al
constructor de la clase.
• Implemente un método public void SULQW&ROOHFWLRQ(Collection<? extends
Object> c) que proporciona por la salida estándar los objetos de la colección mediante un
bucle for-each.
• Implemente en el método PDLQ, el recorrido mediante los métodos de iteración la secuencia de
cadenas filtradas.
(MHUFLFLR6ROXFLyQ
package Ejercicio1;
import java.util.ArrayList;
import java.util.List;
public class Pareja<S,T>{
private S primero;
private T segundo;
public Pareja(S primero, T segundo){
this.primero
= primero;
this.segundo
= segundo;
}
public S getS(){
return this.primero;
}
public T getT(){
return this.segundo;
}
public void setS(S s){
this.primero = s;
}
public void setT(T t){
this.segundo = t;
}
}
Página-2
package Ejercicio1;
import
import
import
import
import
import
import
java.util.ArrayList;
java.util.List;
java.io.InputStreamReader;
java.io.BufferedReader;
java.io.FileInputStream;
java.io.FileNotFoundException;
java.io.IOException;
public class AsociaFicheros{
private BufferedReader primero;
private BufferedReader segundo;
public AsociaFicheros(String fichero1, String fichero2){
try{
this.primero
=
new BufferedReader(new InputStreamReader(new FileInputStream(fichero1)));
this.segundo
=
new BufferedReader(new InputStreamReader(new FileInputStream(fichero2)));
}catch(FileNotFoundException e){
System.out.println("Fichero no encontrado " + e);
System.exit(0);
}
}
public ArrayList<Pareja> lectura(){
String s1 = null;
String s2 = null;
Pareja<String,String> o = null;
ArrayList<Pareja> resultado = new ArrayList<Pareja>();
try{
s1 = primero.readLine();
s2 = segundo.readLine();
for(; s1 != null || s2 != null;){
System.out.println("holla "+ s1 +s2);
o = new Pareja<String,String>(s1,s2);
resultado.add(o);
s1 = primero.readLine();
s2 = segundo.readLine();
}
}catch(IOException e){
System.out.println("Error en lectura" + e);
System.exit(0);
}
return resultado;
}
public void cierreFicheros(){
try{
this.primero.close();
this.segundo.close();
}catch(IOException e){
System.out.println(e);
}
}
}
class ppal{
public static void main(String args[]){
AsociaFicheros f = new AsociaFicheros("a","b");
f.lectura();
f.cierreFicheros();
}
}
Página-3
(MHUFLFLR6ROXFLyQ
import
import
import
import
import
java.util.Iterator;
java.util.Collection;
java.util.ArrayList;
java.util.List;
java.util.NoSuchElementException;
public class Ejercicio3 implements Iterator<String>{
private Iterator
cadenas;
private String
sigCortos;
//null si next no conocido
private final int maxLong;
//solo devuelve cadenas <= a dicho valor
public Ejercicio3 (Iterator<String>
this.cadenas
= cadenas;
this.maxLong
= maxLong;
this.sigCortos = null;
}
cadenas,int maxLong){
public boolean hasNext(){
if(this.sigCortos != null)
//ya encontrado
return true;
while (cadenas.hasNext()){
this.sigCortos= (String)cadenas.next();
if(this.sigCortos.length() <= maxLong)
return true;
}
this.sigCortos = null; //no encontrado
return false;
}
public String next(){
if((this.sigCortos == null) && (!this.hasNext()))
throw new NoSuchElementException();
String n = sigCortos;
//recuerda sigCorto
sigCortos = null;
return n;
}
public void remove(){
throw new UnsupportedOperationException();
}
public void printCollection(Collection<? extends Object> c){
for(Object e : c){
System.out.println(e);
}
}
}
class Ejemplo{
public static void main(String args[]){
List<String> c = new ArrayList<String>();
c.add("UnoUnoUno");
c.add("DosDos");
c.add("TresTresTres");
c.add("CuatroCuatro");
c.iterator();
//el parámetro indica
Ejercicio3 s = new Ejercicio3 (c.iterator(),10); //la longitud máxima
//de la cadena para
//que no sea filtrada
while(s.hasNext()){
System.out.println((String)s.next());
}
System.out.println("--------------------");
s.printCollection(s);
}
}
Página-4