Está en la página 1de 2

Introducción a la Programación Orientada a Objetos

DCIC - UNS
REPASO PRIMER PARCIAL
PROBLEMA 1
Agente Credencial
<<Atributos de clase>> <<Atributos de instancia>>
max_vidas = 10 nro: entero
<<Atributos de instancia>> categoria: char
c: Credencial
vidas: entero
puntos: entero
<<Constructor>> <<Constructor>>
Agente(cre: Credencial) Credencial(n: entero, cat: char)
<<Comandos>> <<Comandos>
establecerVidas(v: entero) establecerNro(n: entero)
disminuirVidas() establecerCat(cat: char)
establecerPuntos(p: entero) copy(c: Credencial)
sumarPuntos(p: entero) <<Consultas>>
copy(a: Agente) obtenerNro(): entero
<<Consultas>> obtenerCat(): char
obtenerCredencial(): Credencial clone(): Credencial
obtenerVidas(): entero equals(c: Credencial): boolean
obtenerPuntos(): entero
clone(): Agente
equals(a: Agente) :boolean
agenteConMasPuntos(a: Agente): Agente

En un videojuego existen agentes, cada uno tiene una credencial, una cantidad de vidas y puntos que se obtienen
cumpliendo determinados objetivos en el transcurso del juego. Todos los agentes pueden alcanzar como máximo 10
vidas. Los agentes se crean con la cantidad máxima de vidas y los puntos se inicializan en 0. Las credenciales tienen un
número y una categoría que puede ser: ‘a’, ‘b’ o ‘c’.
Implemente en Java la clase credencial completa teniendo en cuenta que:
• El encabezado de la clase, con sus atributos y el constructor. El constructor requiere que la categoría sea
válida.
• El comando copy(c: Credencial). Requiere c ligado.
• Las consultas equals(c: Credencial): boolean y clone(): Credencial. El equals requiere c ligado.
Implemente en Java la clase Agente completa teniendo en cuenta que:
• El constructor requiere cre ligado. Las vidas se inicializan con el máximo y los puntos con 0.
• Los comandos:
o disminuirVidas(). Decrementa en 1 la cantidad de vidas del agente.
o sumarPuntos(p: entero). Suma p puntos al agente. Requiere p natural.
o copy(a: Agente). Implementado en profundidad. Requiere a ligado.
• Las consultas:
o clone(): Agente. Implementado en profundidad.
o equals(a: Agente). Implementado superficial. Requiere a ligado.
o agenteConMasPuntos(a: Agente): Agente. Retorna el agente con más puntos. Si ambos tienen la
misma cantidad de puntos retorna nulo. Requiere a ligado.

1
PROBLEMA 2
Considerando las clases del ejercicio 1, con el clone y el copy implementados en profundidad y el equals superficial:
a) Dibuje el diagrama de objetos al completarse la ejecución de:
1. Credencial c1, c2, c3;
2. Agente a1, a2, a3;
3. c1 = new Credencial(1000, 'a');
4. c2 = c1;
5. c3 = new Credencial(1200, 'b');
6. a1 = new Agente(c1);
7. a2 = new Agente(c2);
8. a3 = new Agente(c3);
9. a1.disminuirVidas();
10. a2.disminuirVidas();
11. Agente a4 = new Agente(c1.clone());
12. Agente a5 = new Agente(new Credencial(2300, 'c'));
13. c3.copy(a5.obtenerCredencial());
14. a5.copy(a2);
15. Agente a6 = a5.clone();

b) Muestre los valores que computan las siguientes expresiones


1. c1 == c2; 5. c2.equals(a5.obtenerCredencial());
2. c1.equals(c2); 6. a4.equals(a6);
3. c3 == a3.obtenerCredencial(); 7. a1.equals(a2);
4. c2 == a6.obtenerCredencial();
PROBLEMA 3

RegistroAgentes
<<atributos de instancia>>
reg: Agente []
<<constructor>>
RegistroAgentes (cantAgentes: entero)
<<comandos>>
establecerAgente(pos: entero, a: Agente)
<<consultas>>
vidasCrecientes(): Agente
nConMvidas(n,m: entero): boolean

La clase registroAgentes se utiliza para guardar todos los agentes que están cumpliendo una determinada misión.
Cada agente se guarda en una posición, no todas las posiciones tienen agentes asignadas.
Implemente la clase registroAgentes completa teniendo en cuenta que:
• El constructor requiere cantAgentes>0;
• El comando establecerAgente(pos: entero, a: Agente) requiere pos válida (reg.length>pos>=0) y a ligada.
• La consulta vidasCrecientes(): Agente verifica si todos los agentes de la secuencia tienen vidas crecientes
(reg[i].obtenerVidas()<reg[i+1].obtenerVidas() para todo i válido). Si existe alguna posición sin agente
asignado el registro no tiene vidas crecientes. En caso de que se cumpla la propiedad el método debe retornar
el agente con mayor cantidad de vidas, de lo contrario debe retornar null.
• La consulta nConMvidas(n,m: entero): boolean retorna verdadero si y sólo si en el registro se encuentran al
menos n agentes en posiciones consecutivas que tengan exactamente m vidas. Requiere m>=0.

También podría gustarte