UTNianos

Versión completa: [Aporte] Final PdeP 04/12/2018
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Acá va el final que tomaron en el 1er llamado de Diciembre de 2018. Éxitos a los que lo estén preparando!
Che pienso presentarme el sábado, cuanto tiempo dan para resolver el final?.
dejo mi resolucion de la parte C, por si alguien lo hizo y quiere comparar resolucion.


PARTE C

1.
a. Falso. No hay problemas de responsabilidad. La Farmacia delega correctamente al Medicamento, pero con Cliente no se aplica tan bien, ya que no aprovecha el concepto de polimorfismo, dado que la clase Farmacia realiza toda la lógica.
b. Verdadero. Se podría usar polimorfismo si replanteo la solución creando las subclases Jubilado y Discapacitado con la superclase Cliente.
c. Falso. Debería pasarle al método precioFinal directamente el descuento y que el Medicamento devuelva el precio del producto con el descuento aplicado.
d. Verdadero, porque no todos los clientes son jubilados y este campo no aplicaría para todos. Debería ir en una subclase Jubilado que herede de Cliente.
2.


#Farmacia
>> descuentoCliente: unCliente
^ unCliente descuento

>> precioDeVentaDe: unMedicamento para: unCliente
^ unMedicamento precio – (unCliente descuento * unMedicamento precio)

#Medicamento
>> precio
^precio

#Discapacitado
>> descuento
^ 1

#Jubilado
>> descuento
self cobraJubilacionMinima ifTrue: [^0.5] ifFalse: [^0.4]

>> cobraJubilacionMinima
^ jubilacionQueCobra = jubilacionMinima
Hola, saben si mumuki sigue siendo accesible para practicar logico/funcional/objetos?

Las URL de siempre ya no abren.
Funcional:

1)

f :: Num b => (a -> Bool) -> (a -> b) -> [a] -> b


2)a)

totalDeSueldosJunior listaEmpleados = (sum . map sueldo. filter esJunior) listaEmpleados


2) b)

f (>5) (+20) [1..10]

Le suma 20 a todos los numeros mayores que 5.

3) a) Falso. F es de orden superior porque recibe funciones como parámetro.

3) b) Verdadero. Se le pasa a Map y a Filter funciones (j y h respectivamente) para poder aplicarlas parcialmente.

3) c) Falso. totalSueldosDeJuniors es mas expresiva, ya que es mas fácil de leer y comprender que hace.

3) d) Verdadero. Ya que esconde todo el detalle algorítmico. Importa mas el QUE hacer y no el COMO.


Lógico:


1)
El principio de universo cerrado determina que todo lo que la base de conocimientos no conozca es falso, por lo que al no especificar que hubo un acuerdo entre EEUU y China, el motor lo determina como falso.

2)


recibe(Pais1,Pais2):-
acuerdo(Pais2,Pais1,_).

recibe(Pais1,Pais2):-
acuerdo(Pais3,Pais1),
recibe(Pais3,Pais2).



3) Recursividad. Se debe analizar tanto el caso base (un acuerdo directo) como el caso recursivo (Recibir un producto a través de un acuerdo de otras dos naciones).

4)

noHuboAcuerdo(Pais1,Pais2)-:
not(acuerdo(Pais1,Pais2,_)).

noHuboAcuerdo(Pais1,Pais2):-
not(acuerdo(Pais2,Pais1,_)).


Al utilizar el "NOT" busca que ninguno de los paises involucrado tenga algun acuerdo con el otro.

Se deben realizar dos predicados ya que se necesita verificar la relacion inversa.


Objetos:


1)a) Falso. Se debería delegar la responsabilidad de devolver su descuento a cada jubilado o discapacitado, sin tener que preguntar si son o no de un tipo en particular.

1)b) Verdadero. Creando una interfaz CLIENTE que obligue a implementar descuento().

1)c) Falso. El medicamento no tiene la responsabilidad de realizar el descuento. La farmacia debería descontar el precio del medicamento en base al cliente que lo compra.

1) d) Verdadero. Se debería crear una clase "JubiladoMinimo" que conozca cuanto cobra de jubilación.


2)


Class Farmacia{

method precioDeVenta(medicamento,cliente){
return (1 - cliente.descuento()) * medicamento.precio()
}
}


Class Medicamento{

var precio;

method precio(){
return self.precio;
}
}


interface Cliente{

method descuento();
}


Class Jubilado implements Cliente{

method descuento(){
return 0.4;
}
}


Class JubiladoMinima implements Cliente{

method descuento(){
return 0.5;
}
}


Class Discapacitado implements Cliente{

method descuento(){
return 1;
}
}



3) Si un cliente puede cambiar de obra social se puede hacer



Class ConObraSocial implements Cliente{

var obraSocial;

method descuento(){
return obraSocial.descuento();
}
}





Saludos
URLs de referencia