Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
FINAL Paradigmas de Programación 14/12/2019
Autor Mensaje
menosdiez Sin conexión
Empleado del buffet
hola
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 15
Agradecimientos dados: 27
Agradecimientos: 16 en 3 posts
Registro en: Mar 2015
Mensaje: #1
FINAL Paradigmas de Programación 14/12/2019 Finales Paradigmas de Programación
   
   
Otros adjuntos en este tema
.png  Diagrama de clases UML.png ( 169,86 KB / 607) por Phiiliip077
16-12-2019 17:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Phiiliip077 Sin conexión
Secretario de la SAE
1 a la vez
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 499
Agradecimientos dados: 44
Agradecimientos: 313 en 195 posts
Registro en: Oct 2016
Facebook Twitter
Mensaje: #2
RE: FINAL Paradigmas de Programación 14/12/2019
Buenas,

Las respuestas que diste en el Verdadero o Falso de la parte de objetos, estan correctas?

Saludos
16-12-2019 17:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
TuGGix Sin conexión
Militante
que me falte todo menos don satur
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 77
Agradecimientos dados: 24
Agradecimientos: 119 en 28 posts
Registro en: Nov 2018
Mensaje: #3
RE: FINAL Paradigmas de Programación 14/12/2019
Puede ser que en las faldas haya repetición de lógica? sin embargo para abstraer esos 120 repetdos hay que sobre-diseñar entonces la lógica repetida medio que se acepta?

16-12-2019 21:07
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Phiiliip077 Sin conexión
Secretario de la SAE
1 a la vez
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 499
Agradecimientos dados: 44
Agradecimientos: 313 en 195 posts
Registro en: Oct 2016
Facebook Twitter
Mensaje: #4
RE: FINAL Paradigmas de Programación 14/12/2019
(16-12-2019 21:07)TuGGix escribió:  Puede ser que en las faldas haya repetición de lógica? sin embargo para abstraer esos 120 repetdos hay que sobre-diseñar entonces la lógica repetida medio que se acepta?

Yo lo que había pensado para ese punto eran dos cosas:

1) hacer una interfaz de "Prenda" y que luego, haya 3 clases abstractas (Falda, Blusa y Short) que defina el método tiempoBase() y luego, que cada prenda en especifico (FaldaLycra, BlusaLycra, etc) lo implementen de forma distinta.

Por ejemplo, las faldas tienen un tiempoBase de 120 mientras que las blusas tienen 200 y los short es variable.

Es una solución valida y aprovechas el polimorfismo tanto en las prendas, ya que pasas a tener una sola lista de prendas que todas entienden el mensaje tiempo() y también entre los tipos de prendas, ya que esos valores hardcodeados (120 y 200) pasan a ser métodos propios de cada tipo de prenda.

2) Hacerlo con composición, de la forma:

Interfaz Prenda que tenga el método tiempo() y 3 clases (Falda, Blusa, Short) que tengan un atributo "Material" que sea (Lycra, Denim, Modal) etc y la lógica propia de cada prenda sea delegada ahí, teniendo un tiempoBase() estipulado.

Se me hace que no es tan semántica la solución, ya que lo que varia no es en si el material sino un "estilo".



Con respecto a lo que decís, si, me parece sobrediseño para que lo único que cambie sea un valor, pero en PDEP varias veces termina siendo asi

Si tenes alguna otra solución posteala y comparamos de cara al final del sábado

Saludos!
16-12-2019 21:29
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Phiiliip077 Sin conexión
Secretario de la SAE
1 a la vez
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 499
Agradecimientos dados: 44
Agradecimientos: 313 en 195 posts
Registro en: Oct 2016
Facebook Twitter
Mensaje: #5
RE: FINAL Paradigmas de Programación 14/12/2019
Buenas, paso a dejar mi solución para este final para comparar respuestas .


Parte lógico:

1)

%Relaciona a una persona, el producto que busca y la cantidad que requiere
%busca(Persona,Producto,Cantidad)

busca(matias,mesa(circular,vidrio),1)
busca(matias,silla(metal),4)
busca(leo,sillon(cama,2),1)
busca(leo,sillon(reclinable,1),1)


No hace falta usar listas para modelar la información ya que se puede usar un hecho por cada producto que requiera en vez de hacer un hecho del estilo:


busca(matias, [mesa(circular,vidrio),etc])


2)

sucursalTrabajaMaterial(Sucursal,Material):-
stock(Sucursal,Producto,_),
esDeMaterial(Material,Producto).

esDeMaterial(madera,sillon(_,_)).
esDeMaterial(Material,silla(Material)).
esDeMaterial(Material,mesa(_,Material)).


El concepto que resalta es el principio de universo cerrado, donde todo lo que no este definido dentro de nuestro dominio será interpretado como FALSO por el motor de consultas. En el caso de que no se hubiese especificado que todos los sillones son de madera, este predicado nunca hubiese ofrecido una respuesta TRUE para una consulta de sillones.

3)


sucursalIdealParaCliente(Sucursal,Cliente):-
esCliente(Cliente),
esSucursal(Sucursal),
forall(busca(Cliente,Producto,Cantidad), (stock(Sucursal,Producto,CantidadStock) , Cantidad >= CantidadStock)).


En este punto aparecen los predicados de orden superior como el Forall, el cual recibe como argumento a otros predicados.

También ligo las variables Cliente y Sucursal mediante los predicados esCliente y esSucursal, para que la consulta resulte inversible para sus dos parámetros.


esCliente(Cliente):-
busca(Cliente,_,_).

esSucursal(Sucursal):-
stock(Sucursal,_,_).





Parte funcional:



1) Analizo por partes:

X: al estar siendo utilizado en una condición de "Mayor", deduzco que el tipo de X es un ORD.

Y: Es un valor que es pasado por parámetro.

Lista: es una lista de funciones, demostrado en el MAP, ya que cada elemento de la lista toma como parámetro a Y y devuelve un valor ORD, que luego es comparado con X.


funcion :: (Ord a) => a -> b -> [(b -> a)] -> a
funcion comparador transformador lista = (filter (> comparador) . map (\ f -> f transformador)) lista



2) Falso, es imposible ya que el MAP nunca va a finalizar de transformar todos los valores de la lista.

3) a) Valida, ya que 3 al ser numérico es ORD
3) b) Invalido, es necesario pasar una lista, sino no puede hacer map ni filter.
3) c) 'Chau' al ser un Char no es un valor ORD, por lo que no funciona.



Parte objetos:

1)a) Verdadero. En vez de utilizar un único método "tiempo()" común para toda las prendas, realiza una discriminación entre falda, blusa y short.

1)b) Falso. El tiempo base de la falda se podría abstraer en un método o en una variable.

1)c) Falso, el problema en este caso es el uso de la herencia, ya que en vez de utilizar el tipo de falda como un atributo, las hace heredar a todas de una clase padre "Falda" lo que impide cambiar su tipo de falda de forma dinámica.

1)d) Verdadero. En la clase pedido hay mucho detalle algorítmico sobre como obtener el tiempo total.

2)


class Pedido{
public Prenda[] prendas;
public float tiempoDeConfeccion(){
return prendas.sum({ prenda -> prenda.tiempo()}
}
}

public Abstract Class Prenda{

public Material material;
public float tiempo(){
return self.tiempoBase() + material.tiempo(self.tiempoBase());
}

public float tiempoBase();
}

public class Falda extends Prenda{


public float tiempoBase(){
return 120;
}
}

public class Blusa extends Prenda{

public float cantBotones;

public float tiempoBase(){
return 200 + 5 * cantBotones;
}
}

public class Short extends Prenda{

public float tiempoNecesario;

public float tiempoBase(){
return self.tiempoNecesario;
}
}

public interface Material{

public float tiempo(float tiempoBasePrenda);

}

public Class Modal implements Material{

public float tiempo(float tiempoBasePrenda){
return 0;
}
}

public Class Lycra implements Material{

public float tiempo(float tiempoBasePrenda){
return tiempoBasePrenda*0.2;
}
}

public Class Denim implements Material{

public float tiempo(float tiempoBasePrenda){
return 25;
}
}







Saludos!


Archivo(s) adjuntos Imagen(es)
   
(Este mensaje fue modificado por última vez en: 19-12-2019 03:06 por Phiiliip077.)
19-12-2019 02:55
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Phiiliip077 recibio 3 Gracias por este post
menosdiez (19-12-2019), Rowdiamond (19-12-2019), Makellos (29-02-2020)
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)