Está en la página 1de 8

Piogiamacion 0iientaua a 0bjetos II

1raba[o rct|co - 1emp|ate Method y Adapter


Cb[et|vo: Comprender e| patrn de d|seo 1emp|ate Method y e| patrn
Adapter. D|scut|r a|ternat|vas de d|seo e |mp|ementac|n.
Importante: Los e[erc|c|os de este 1 se entregan. Iecha ||m|te de entrega:
30-04-14 23:S9 hs. L| d|a anter|or se def|ne |os e[erc|c|os que entrega cada
a|umno. La entrega se rea||zar por ema||.


L[erc|c|o 2 - Lea e| pattern 1emp|ate Method y ...

1. 0tilizanuo las iueas piopuestas poi el pattein iesuelva los ejeicicios siguientes .
2. Responua:
a. Bonue se uefine el esqueleto uel algoiitmo.
b. Se pueue ieuefinii el esqueleto.
c. Que es lo que se pueue ieuefinii.
u. Que es un hook methou.
S. Busque uos ejemplos uel pation en las clases ue la imagen ue Smalltalk.
4. Paia caua ejemplo, iealice un uiagiama ue clases inuicanuo:
a. La clase abstiacta.
b. El template methou.
c. Al menos uos clases concietas.
u. Los mtouos en la clase abstiacta que se ieuefinen en la clase concieta.
e. Inuique hooks methous.

L[erc|c|o 3 - Sue|dos recargado
0na empiesa iealiza peiiouicamente los pagos ue sueluos y caigas ue caua uno ue sus
empleauos. En la empiesa los empleauos estn oiganizauos en ties tipos: Tempoiaiios,
Pasantes y ue Planta. El sueluo ue un empleauo Tempoiaiio esta ueteiminauo poi el
pago ue $S poi hoia que tiabajo mas el sueluo bsico que es ue $1uuu, auems se le
paga $1uu si posee hijos yo est casauo. A los Pasantes se les paga $4u las hoias
tiabajauas en el mes. Poi ltimo a los empleauos ue Planta se les paga un sueluo bsico
ue $ Suuu y un plus poi caua hijo que posea ue $ 1Su caua hijo. Poi otio lauo, ue caua
sueluo se ueben uescontai en conceptos ue apoites y obia social un 1S % uel sueluo.

Nouele la jeiaiquia ue Empleauos ue foima tal que cualquiei empleauo pueue
iesponuei al mensaje #sueluo. 0tilice template methou paia su solucion e inuique los
ioles paiticipantes.

L[erc|c|o 4 - L|ementos s|m||ares
Es necesaiio piogiamai un filtio paia que a paitii ue una coleccion ue pginas ue
Wikipeuia ietoine aquellas que sean similaies a una paiticulai. Paia ello es necesaiio
implementai una jeiaiquia ue clases filtios en las que se pueua uefinii la similituu en
funcion ue uifeientes heuiisticas. Las heuiisticas estn uefiniuas en funcion a atiibutos
Piogiamacion 0iientaua a 0bjetos II
que poseen las pginas ue Wikipeuia. Paia esto, una pgina ue Wikipeuia cuenta con la
inteifaz WikipeuiaPage que posee el siguiente piotocolo:
Stiing getTitle(); ietoina el titulo ue la pagina.
List<WikipeuiaPage> getLinks(); ietoina una Lista ue las pginas ue Wikipeuia con las
que se conecta.
Nap<Stiing, WikipeuiaPage> getInfobox(); ietoina un Nap con un valoi en texto y la
pagina que uesciibe ese valoi que apaiecen en los infobox ue la pgina ue Wikipeuia.

En esta opoituniuau uu uebe implementai ties tipos ue filtios: NismaLetiaInicial,
LinkEnComun, PiopieuauEnComun. La foima en que funcionan las clases filtios es
meuiante el mtouo

public List<WikipeuiaPage> getSimilaiPages(WikipeuiaPage page, List<WikipeuiaPage)
wikipeuia)

La logica ue caua filtio es la siguiente:
NismaLetiaInicial ietoina como paginas similaies aquellas que poseen la misma piimei
letia en el comienzo uel titulo, poi ejemplo "La Plata" es similai con "Lucas Ait" y
"Lobo".
LinkEnComun ietoina como paginas similaies aquellas que posean al menos un link a
una pgina en comn, poi ejemplo si la pagina ue "uimnasia y Esgiima La Plata" tiene un
link a la pagina "La Plata" y la pgina "Buenos Aiies" tiene un link a "La Plata" esas
pginas seiian similaies.
PiopieuauEnComun, ietoina aquellas pginas que poseen alguna piopieuau uel infobox
en comn, poi ejemplo si la pagina ue una peisona tiene la piopieuau "biith_place" y
otia pagina posee tambin la piopieuau "biith_place" seiian similaies mutuamente. En
este caso, no impoita que el valoi ue la piopieuau sea uifeiente.

1. Realice un uiagiama ue clases que mouele el pioblema planteauo.
2. Realice un uiagiama ue secuencia paia el caso ue usai un filtio ue tipo
NismaLetiaInicial paia obtenei las paginas similaies a "Beinal" asumienuo que
Wikipeuia posee como paginas "Beinal", "Quilmes", "Buenos Aiies"
S. Piogiame el test ue uniuau utilizanuo }0nit paia las ties clases involuciauas.
4. Piogiama la funcionaliuau completa en }ava.


L[erc|c|o S - Dado e| s|gu|ente fragmento de cd|go Iava rea||ce e| d|agrama
de c|ases que puede deduc|r.


El couigo lo pueuen bajai ue:
https:github.commagictoweisbluefinueiblobmasteiBlueFinueiRSsick
nn}accaiuFunction.java

L|amadas te|efn|cas
A paitii ue las siguientes lineas ue couigo iuentifique si es posible:
! Templatemethou.
! 0peiaciones piimitivas.
Piogiamacion 0iientaua a 0bjetos II
! 0peiaciones concietas.
! Book Nethou.

Public abstract classLlamadaTelefonica {
Private inttiempo;
Private inthoraDelDia;

Public LlamadaTelefonica(int tiempo, inthoraDelDia){
this.tiempo=tiempo;
this.horaDelDia=horaDelDia;
}

public int getTiempo(){
return this.tiempo;
}

public int getHoraDelDia(){
return this.horaDelDia;
}

public abstract boolean esHoraPico();

public float costoFinal(){
if(this.esHoraPico()){
return this.costoNeto()*1.2f*this.getTiempo(); //1.2f es el float 1,2
}else{
return this.costoNeto()*this.getTiempo();
}
}

public float costoNeto(){
return this.getTiempo()*1;
}

}
public classLlamadaDescuento extends LlamadaTelefonica{

public LlamadaDescuento(int tiempo, inthoraDelDia) {
super(tiempo, horaDelDia);
}

@Override
public boolean esHoraPico() {
return false;
}
@Override
public float costoNeto(){
return this.getTiempo()*0.95f; //0.95f es el float 0,95.
}
}


L[erc|c|o 6 - UML
Piogiamacion 0iientaua a 0bjetos II
Esciiba touo el couigo }ava posible que peimita iepiesentai la infoimacion uel siguiente
uiagiama ue clases 0NL.




L[erc|c|o 7 - Ayudando a| soberano
0n banco tiene uos tipos ue cuentas bancaiias. Cajas ue ahoiio y Cuentas coiiientes.
Ambas cuentas se manejan en foima similai excepto paia la extiacciones ue uineio. En
las caja ue ahoiio es posible iealizai la extiaccion solamente si el saluo ue la cuenta es
supeiioi o igual a la cantiuau ue uineio que quieio extiaei y no supeia el limite poi
extiaccion, si esto suceue, entonces iealiza efectivamente la extiaccion (actualizanuo el
saluo) y luego iegistia que se hizo una extiaccion simplemente agieganuo un texto a
una coleccion. Poi otia paite, las cuentas coiiientes pueuen iealizai una extiaccion
solamente cuanuo la cantiuau ue uineio a extiaei no supeia el saluo ms el limite en
iojo que posee la cuenta. Si esto ocuiie entonces iealiza la extiaccion y luego iegistia
que se hizo una extiaccion simplemente agieganuo un texto a una coleccion.

0n compaeio uel cuiso, iealizo el ejeicicio ue la siguiente maneia.

import java.util.ArrayList;
import java.util.List;

public abstract class CuentaBancaria {

private String titular;
private int saldo;
private List<String> movimientos;

public CuentaBancaria(String titular){
this.titular=titular;
this.saldo=0;
this.movimientos=new ArrayList<String>();
}

public String getTitular(){
return this.titular;
}

public int getSaldo(){
return this.saldo;
}

protected void setSaldo(int monto){
Piogiamacion 0iientaua a 0bjetos II
this.saldo=monto;
}

public void agregarMovimientos(String movimiento){
this.movimientos.add(movimiento);
}

public abstract void extraer(int monto);

}

public class CuentaCorriente extends CuentaBancaria {

private int descubierto;

public CuentaCorriente(String titular, int descubierto){
super(titular);
this.descubierto=descubierto;
}

public int getDescubierto(){
return this.descubierto;
}

@Override
public void extraer(int monto) {
if(this.getSaldo()+this.getDescubierto()>=monto){
this.setSaldo(this.getSaldo()-monto);
this.agregarMovimientos("Extraccion");
}


}

}


public class CajaDeAhorro extends CuentaBancaria {

private int limite;

public CajaDeAhorro(String titular, int limite){
super(titular);
this.limite=limite;
}

public int getLimite(){
return this.limite;
}

@Override
public void extraer(int monto) {
if(this.getSaldo()>=monto && this.getLimite()>=monto){
this.setSaldo(this.getSaldo()-monto);
this.agregarMovimientos("Extraccion");
}

}
Piogiamacion 0iientaua a 0bjetos II

}

El cual compila y ietoina los iesultauos espeiauos. Su compaeio se ua cuenta que hay
couigo iepetiuo y auems no utilizai template methou, el cual es inuispensable paia que
apiuebe la entiega.

Su objetivo es el siguiente:

1. Bebe iealizai los cambios necesaiios en el couigo paia que el mtouo extiaei sea
un template methou. (Esciiba solamente los cambios, el iesto se asume que
queua intacto)
2. Analice en el couigo iesultante los elementos que inuica uamma et. al que
pueuen apaiecei en su solucion, poi ejemplo: Clase abstiacta, clase concieta,
cual es el template methou, cuales son las opeiaciones piimitivas, cuales son las
opeiaciones concietas, cuales los hook methous.

Impoitante: No necesaiiamente apaiecen touos los elementos que lista gamma, uu uebe
explicai solamente aquellos que estn en su solucion.


!"#$%&%&' ) * +',-#.-/$ 0 "1.-&2&%/$ 3/. $#.41#.-/.

1. Existe ms ue un tipo ue auaptauoies, mencione y explique caua uno ue ellos.
2. En qu se uifeiencia un tipo ue auaptauoi uel otio.
S. Se pueuen utilizai ambas alteinativas ue implementacion uel pation en java.
}ustifique la iespuesta.
4. vei la inteiface Enumeiation ue java y la clase vectoi, pieste atencion a que
uicha clase contiene un mtouo "elements()". Explique como funciona pation
auaptei y cuales son los ioles ue los paiticipantes entie la inteiface y clase
mencionaua. Auems, mencione qu tipo ue implementacion uel pation se
utiliza.
S. Realice el mismo anlisis uel punto S, peio con la inteiface Iteiatoi, la clase
AiiayList (pieste atencion al mtouo "iteiatoi()"). Nuestie un ejemplo ue
funcionamiento y especifique los ioles ue caua paiticipante.
6. Implemente un Auaptauoi, que auapte un Iteiatoi a un Enumeiation. Esciibii
couigo que utilice uicha implementacion auaptanuo un AiiayList.

!"#$%&%&' 5 * 6/3/7$/. 8$9#,/9/.

Se uesea visualizai una lista ue palabias oiuenauas alfabticamente, paia iealizai esta
taiea ya se uispone ue uos clases. La clase ventana es la encaigaua ue visualizai la lista
ue palabias, sin oiuen alfabtico, poi otio lauo se uispone ue la clase
ListaBePalabias0iuenauas, esta mantiene una lista ue palabias oiuenauas
alfabticamente y tiene el compoitamiento paia agiegai nuevas palabias.

public class Ventana extends JFrame{


public Ventana(){

this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.Y_AXIS));
this.setBounds(new Rectangle(180,180));
Piogiamacion 0iientaua a 0bjetos II
this.setVisible(true);


JLabel label=new JLabel("Lista de palabras");
label.setBounds(new Rectangle(40,40));
this.add(label);


DefaultListModel listModel=new DefaultListModel();
listModel.addElement("casa");
listModel.addElement("arbol");
listModel.addElement("perro");
listModel.addElement("telefono");
listModel.addElement("brazo");


JList lista=new JList(listModel);
lista.setBounds(new Rectangle(110,160));
this.add(lista);
}



public static void main(String[] args) {
new Ventana();
}

}


public class ListaDePalabrasOrdenadas {

private List<String> palabras;
private final Comparator comparador;


public ListaDePalabrasOrdenadas(){
this.palabras=new LinkedList<String>();
this.comparador=new Comparator(){

@Override
public int compare(Object palabraA, Object palabraB) {
String a=((String)palabraA);
String b=(((String)palabraB));
return a.compareToIgnoreCase(b);
}

};
}

public void agregarPalabra(String palabra){
this.palabras.add(palabra);
Collections.sort(this.palabras, this.comparador);
}

public Integer cantidadDePalabras(){
return this.palabras.size();
}

public String getPalabraDePosicion(int posicion){
return this.palabras.get(posicion);
}
}

Piogiamacion 0iientaua a 0bjetos II
Activiuau:

1. Analizai el couigo ue ambas clases.
2. Pioponei una solucion en java.


!"#$%&%&' :; * <#%=/.

Los alumnos ue la univeisiuau piogiamaion el sistema que peimite uetectai los
vencimientos ue las mateiias. El sistema basa sus fechas en una clase llamaua que
implementa la siguiente inteifaz:

package fechas;

public interface IFecha {

public IFecha restarDias(int dias);
public boolean antesDeAhora();
public boolean antesDe(IFecha fecha);
public boolean despuesDeAhora();
public boolean despuesDeFecha(IFecha
fecha);

}


Lamentablemente, luego ue mucho tiempo se uieion cuenta que la clase que existe la
clase BateTime uel pioyecto joua-time que implementa un compoitamiento similai y
muy bien iealizauo, a uifeiencia ue la implementacion que hicieion los alumnos
anteiioimente y tenia algn eiioi.

Realice un auaptauoi paia que el sistema ue vencimientos ue mateiia pueua utilizai la
clase BateTime uel pioyecto joua-time en cualquiei lugai uonue se utiliza un IFecha.

También podría gustarte