Professional Documents
Culture Documents
4. (0.25
PUNTOS)
Imaginad
que
el
bucle
implementado
para
iterar
los
objetos
dentro
del
contendor
evaluables
de
la
pregunta
anterior
es
el
siguiente:
Iterator<Evaluable> it = evaluables.iterator();
while (it.hasNext()) {
Evaluable e = it.next();
try{
e.evalua();
}
catch (FaltaInfoException e) {
//
}
}
A
partir
del
cdigo
proporcionado,
implementad
la
interface
Evaluable.
public interface Evaluable {
public void evalua() throws FaltaInfoException;
}
PROBLEMAS.
Una
bodega
quiere
informatizar
el
proceso
de
elaboracin
de
sus
vinos.
A
continuacin
se
detalla
una
parte
de
los
requisitos
que
la
aplicacin
informtica
debe
satisfacer:
R1.
La
aplicacin
debe
guardar
informacin
de
todos
los
viticultores
con
los
que
trabaja
la
bodega.
De
cada
viticultor
debe
guardarse:
un
string
identificador
nico,
el
nombre,
los
apellidos
del
viticultor
y
la
superficie
que
cultiva.
R2.
La
aplicacin
debe
guardar
informacin
de
todos
los
vinos
que
la
bodega
elabora.
De
cada
vino
debe
guardarse:
el
nombre,
la
graduacin
alcohlica
y
la
denominacin
de
origen.
R3.
Cada
viticultor
cultiva
diferentes
tipos
de
uva.
De
cada
clase
de
uva
hay
que
guardar:
su
variedad
(que
acta
como
un
identificador
nico),
el
mes
de
su
floracin
y
el
mes
de
inicio
de
su
cosecha.
R4.
Cada
vino
est
compuesto
por
varios
tipos
de
uva
combinados
en
proporciones
adecuada.
De
cada
componente
del
vino
se
guarda
informacin
del
tipo
de
uva
y
su
porcentaje
(suponed
que
ste
siempre
es
un
entero).
R5.
La
elaboracin
de
un
cierto
vino
para
la
bodega
en
cuestin
corre
a
cargo
de
los
enlogos.
Los
enlogos
elaboran
el
vino
combinando
convenientemente
sus
componentes
(tipos
de
uvas
y
sus
porcentajes
correspondientes).
R6.
Existen
dos
tipos
de
enlogos:
los
propios
viticultores,
que
elaboran
el
vino
a
mano,
y
unas
mquinas
(o
mquinas
de
baco)
que
lo
elaboran
automticamente.
R7.
La
bodega
dispone
de
varias
mquinas
de
baco.
De
cada
una
de
stas
debe
guardarse
su
nmero
de
serie,
marca,
modelo
y
ao
de
compra
(String
en
formato
AAAAMMDD).
R8:
La
aplicacin
debe
gestionar
las
distintas
uvas
que
se
utilizan
en
la
elaboracin
de
los
vinos
de
la
bodega.
A
continuacin
se
muestra
una
parte
del
diagrama
de
clases
de
la
aplicacin.
2.
(2
PUNTOS)
Completad
el
diagrama
UML
a
partir
del
texto
de
los
requisitos.
Para
ello:
a.
Aadid
aquellas
clases
que
identifiquis
en
los
requisitos
y
no
aparezcan
en
el
mismo.
b.
Aadid
tambin
las
relaciones
que
consideris
oportunas
a
partir
de
dichos
requisitos
(incluyendo
nombre,
cardinalidad
y
direccionalidad
en
las
asociaciones).
Sustituid
el
?
en
la
asociacin
de
Bodega
a
Uva
por
la
cardinalidad
que
consideris
oportuna.
c.
Aadid
a
cada
clase
los
atributos
que
deduzcis
de
los
requisitos.
Opcin
1:
En
este
caso,
se
introduce
una
nueva
clase
Componente
para
gestionar
la
composicin
de
un
vino:
Opcin
2:
En
este
caso,
la
composicin
de
un
vino
se
implementa
mediante
un
Map<Uva,Integer>:
3.
(1
PUNTO)
A
partir
del
diagrama
UML
resultante
en
el
apartado
anterior,
escribid,
para
todas
las
clases
la
parte
de
cdigo
de
la
definicin
que
comienza
con
el
public
class.
correspondiente
a
la
declaracin
de
todos
los
atributos
de
las
clases,
incluyendo
aquellos
que
aparecen
al
implementar
las
relaciones.
OPCION 1:
public class InterfazUsuario {
private Controlador controlador;
}
public class Bodega {
private InterfazUsuario iu;
private Map<String, Vino> vinos;
private double graduacion;
private String denominacion;
private List<Componente> componentes; // O Set
}
uva
}
4.
(1
PUNTO)
Uno
de
los
casos
de
uso
de
la
aplicacin
(el
segundo)
es
AltaVino.
Dicho
caso
de
uso
permite
al
usuario
dar
de
alta
en
el
sistema
a
un
nuevo
vino
a
partir
de
su
nombre,
denominacin
de
origen,
graduacin
y
composicin
(tipos
de
uva
y
sus
correspondientes
porcentajes).
Si
el
caso
de
uso
finaliza
con
xito,
el
sistema
incorporar
dicho
vino
en
el
repertorio
de
vinos
ofrecidos
por
la
bodega.
Desarrollad
este
caso
de
uso
completo,
incluyendo
cualquier
escenario
alternativo
que
consideris
oportuno.
Nombre: AltaVino
Numero: 2
Actores: usuario que da de alta el vino.
Precondiciones: el usuario ha seleccionado la opcin dar de alta un nuevo vino
Postcondiciones: el vino ha sido dado de alta con sus componentes.
ESCENARIO PRINCIPAL:
1. El usuario introduce el nombre del vino.
2. El sistema comprueba que no hay ningn vino dado de alta con ese nombre.
3. El usuario introduce la graduacin del vino.
4.El usuario introduce los detalles de sus components: las variedades de uvas y sus
correspondientes porcentajes.
5. El sistema comprueba que todas las variedades de uvas componentes del vino estn dadas
de alta.
7. El sistema procede a crear los componentes y a combinarlos para formar el vino.
8. El sistema da de alta el vino.
ESCENARIOS ALTERNATIVOS:
2.a. El sistema comprueba que ya hay un vino dado de alta con ese nombre.
1. El sistema notifica el problema al usuario y le pide entrar un nuevo nombre.
2. El sistema vuelve a paso 1 del escenario principal.
5.a. El sistema comprueba que hay algunas uvas que no estn dadas de alta.
1. El sistema notifica el problema al usuario, dndole detalles de las uvas que ya
estn dadas de alta.
2. El
componentes
sistema
solicita
al
usuario
que
entre
de
nuevo
los
detalles
de
los
5.
(1
PUNTO)
Durante
la
fase
de
diseo,
se
ha
aadido
a
Controlador
el
mtodo
siguiente:
Si
esta
uva
no
est
dada
de
alta
en
el
sistema,
este
mtodo
la
crea,
la
da
de
alta
y
devuelve
true.
En
caso
de
que
la
uva
cuya
variedad
se
pasa
como
primer
argumento
ya
est
dada
de
alta,
el
mtodo
devuelve
false.
Dibujad
el
diagrama
de
sequencia
que
muestre
las
interacciones
necesarias
para
implementar
el
mtodo
anterior.
6.
(1
PUNTO)
Implementa
en
Java
el
mtodo
toString()
de
la
clase
Vino.
Dicho
mtodo
tiene
que
devolver
un
String
que
contenga
el
nombre
del
vino,
la
denominacin
de
origen,
la
graduacin
y
cada
una
de
las
variedades
de
uva
que
lo
componen,
junto
con
su
tanto
por
ciento.
Podis
implementar
mtodos
toString()
de
otras
clases
si
lo
consideris
oportuno,
y
utilizarlos
en
el
diseo
del
toString()
de
la
clase
Vino.
A
continuacin
se
muestra
un
ejemplo
de
contenidos
del
string
devuelto
por
el
mtodo:
Nombre: Can Feixes Selecci
DO: Peneds
Graduacin: 13,5%
Variedades: 40% Parellada 30% Macabeu 20% Parellada 10% Malvasia de Sitges
Solucin:
En
clase
Vino:
public String toString() {
String result = "Nombre: " + this.nombre;
result += "\nDO: " + this.denominacion + "\nGraduacion: " + this.graduacion;
result += "\nVariedades: ";
Iterator<Componente> it = this.componentes.iterator();
while (it.hasNext()) {
Componente componente = it.next();
result += componente.toString();
}
return result;
}
Se
hace
uso
de
toString()
de
Componente:
public String toString(){
return this.uva.getVariedad()+ " " + this.porcentaje + "% "
7.
(1
PUNTO)
Implementad
el
siguiente
mtodo
de
Vino:
public
List<Uva>
uvasPrincipalesMes(int
porcentaje,
String
mesCosecha)
;
Este
mtodo
admite
como
primer
argumento
un
valor
entero,
y
como
segundo
un
String
indicativo
de
un
mes.
El
mtodo
devuelve
en
una
lista
aquellas
uvas
que
participen
en
su
composicin
en
un
porcentaje
igual
o
mayor
al
valor
del
mencionado
argumento,
Y
que
tengan
como
mes
de
cosecha
el
indicado
por
el
segundo
argumento.
Solucin:
public List<Uva> uvasPrincipales(int porcentaje, String mesCosecha) {
List<Uva> result = new LinkedList<Uva>();
Iterator<Componente> it = this.componentes.iterator();
while(it.hasNext()){
Componente comp = it.next() ;
Uva uva = comp.getUva() ;
if(comp.getPorcentaje()>=porcentaje &&
mesCosecha.equals(uva.getMesCosecha())){
result.add(uva);
}
}
return result;
}
8.
(2
PUNTOS)
Implementad
el
siguiente
mtodo
de
Bodega
public
List<Vino>
vinosConUva(String
variedad)
;
Este
mtodo
admite
como
argumento
una
variedad
de
uva.
Debe
devolver
una
lista
que
contenga
todos
los
vinos
en
cuya
composicin
interviene
esta
variedad.
Solucin:
public List<Vino> vinosConUva(String variedad){
List result = new LinkedList<Vino>() ;
Collection<Vino> soloVinos = this.vinos.values() ;
for(Vino unVino: soloVinos){
Iterator<Componente> itComps = unVino.iteratorComponentes() ;
boolean end = false ;
while(itComps.hasNext() && !end){
Componente comp = itComps.next() ;
if(comp.getUva().getVariedad().equals(variedad)){
result.add(unVino);
end = true ;
}
}
}
return result ;
}