Autor Tema: Cómo armar solución a un problema de identificar clases UML dado texto describe  (Leído 839 veces)

momo753

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola a todos, soy nuevo en esto de la programacion. Estoy haciendo unos cursos y nos pidieron que hagamos lo siguiente, ¿me podrian orientar ?

Una empresa dedicada a la industrialización de productos de granja trabaja con tres tipos de productos:

• Productos refrigerados (pollos frescos, milanesas de pollo, de cerdo y de ternera, pollo arrollado, etc)

• Productos congelados (hamburguesas, arvejas, granos de maíz, formas de pollo rebozadas, etc.).

• Productos Frescos (hortalizas verdes, frutos rojos etc)

Todos los productos llevan esta información común: fecha de vencimiento, número de lote y costo de tratamiento.

A su vez, cada tipo de producto lleva alguna información específica.

Los productos refrigerados deben llevar el código del organismo de supervisión alimentaria, la fecha de envasado, la temperatura de mantenimiento recomendada, la granja de origen. Estos tienen un margen de ganancia del 15% respecto del costo.

Los productos congelados deben llevar la fecha de envasado, el código del organismo de supervisión alimentaria, la granja de origen y la temperatura de mantenimiento recomendada.

Hay tres tipos de productos congelados: congelados por aire, congelados por agua y congelados por nitrógeno. Los productos congelados por aire deben llevar la información de la composición del aire con que fue congelado (% de nitrógeno, % de oxígeno, % de dióxido de carbono y % de vapor de agua). Los productos congelados por agua deben llevar la información de la salinidad del agua con que se realizó la congelación en gramos de sal por litro de agua. Los productos congelados por nitrógeno deben llevar la información del método de congelación empleado y del tiempo de exposición al nitrógeno expresada en segundos. Todos los productos congelados tienen un margen de ganancia del 25%

Los productos frescos deben llevar el código del organismo de supervisión alimentaria, la granja de origen. Hay dos tipos de productos Orgánicos y estándar. Los productos orgánicos llevan el número de certificado BIO y tienen un margen de ganancia del 38%.
Los productos frescos estándar tienen un margen de ganancia del 23%

Los productos en el Stock están organizados por lotes los datos correspondientes a cada lote son: Nro de lote , Nombre del Responsable, código de ubicación del lote y fecha de creación del lote.

Se desea conocer:

a) Costo Total en Stock
b) Costo Total de un lote determinado.
c) Margen de Ganancia total por cada lote.
d) Cantidad de productos en cada lote
e) Cantidad de productos de un determinado tipo en cada lote.
f) Verificar si hay productos vencidos en un lote.
« Última modificación: 17 de Enero 2021, 20:01 por Ogramar »

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Re:ayuda como tendria que armarlo ??
« Respuesta #1 en: 15 de Octubre 2020, 07:33 »
Hola,

¿en qué lenguaje tienes que crearlo? y, ¿qué llevas intentado?

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 724
    • Ver Perfil
Re:ayuda como tendria que armarlo ??
« Respuesta #2 en: 15 de Octubre 2020, 19:32 »
Al margen del lenguaje, lo primero es identificar cuáles son las clases que van a intervenir.

Está claro que habrá una superclase Producto.

De esta heredarán tres clases: Refrigerado, Congelado, Fresco.

De Congelado heredarán otras tres: PorAire, PorAgua y PorNitrogeno.

De Fresco heredan dos más: Organico y Standard


Luego podría haber una clase llamada Stock que incluya a la clase Lote (no es un relación de herencia, si no de inclusión).

Es decir, tendríamos un único objeto Stock, que incluiría N objetos Lote, que a su vez cada uno incluiría N objetos de la familia de clases Producto.

Todo esto es lo que hay que organizar antes de empezar nada. Ya sea con un diagrama UML, o bien de cualquier otra forma que a ti te sirva para aclararte las ideas.

Identificar las clases, que atributos y métodos tiene cada una y como se relacionan entre ellas (herencia, inclusión...)

Con todo esto clarificado, se puede empezar a escribir código, sea el lenguaje que sea.

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 724
    • Ver Perfil
Re:ayuda como tendria que armarlo ??
« Respuesta #3 en: 16 de Octubre 2020, 00:58 »
Mira, un posible UML podría ser este.
Solo pongo los atributos, los métodos serían prácticamente getters y setters.
El margen de ganancia de cada clase lo pongo como comentario al UML, luego al implementar el código habría que decidir si es otro atributo más, o simplemente lo tenemos en cuenta para la función que calcula el margen de ganancia para cada lote...esto ya es a gusto del programador...

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

momo753

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:ayuda como tendria que armarlo ??
« Respuesta #4 en: 23 de Octubre 2020, 00:27 »
Hola,

¿en qué lenguaje tienes que crearlo? y, ¿qué llevas intentado?

en java , hasta el momento estoy con las clases, lo que no me queda claro es como hacer el calculo que me pide ..
desde ya gracias por su aportes

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 724
    • Ver Perfil
Re:ayuda como tendria que armarlo ??
« Respuesta #5 en: 23 de Octubre 2020, 12:20 »
Tú escribe lo que sepas/puedas.
Cuando lo tengas, compártelo por aquí. Así lo revisamos y te ayudamos con lo que falte.

Por si sirve de ayuda, muestro como haría yo un par de clases (que no tiene por qué ser la mejor ni la única forma de hacerlo)

La clase Producto la haría abstracta, ya que está destinada a que las otras clases hereden de ellas.
No vamos a crear simplemente "productos". Crearemos "productos refrigerados", "productos congelados", etc...

Así que Producto interesa que sea abstracta. Tendrá los tres atributos básicos que comparten todos los tipos de productos, con sus getters y setters.
Ademas tiene un método abstracto, llamado getMargenGanancia().

Al hacerlo abstracto obligamos a que las clases que vayan a heredar de Producto, tengan que sobrescribir este método, pues cada tipo de producto tiene un margen de ganancia distinto. Así, todos tendrán este método, pero cada uno tendrá un código distinto adaptado a su propio margen de ganancia.

Código: [Seleccionar]
public abstract class Producto {

private String fechaVencimiento;
private String numLote;
private float costoTratamiento;

public Producto(String fechaV, String numL, float costo) {
fechaVencimiento = fechaV;
numLote = numL;
costoTratamiento = costo;
}

public abstract float getMargenGanancia();

public String getFechaVencimiento() {
return fechaVencimiento;
}

public void setFechaVencimiento(String fechaV) {
fechaVencimiento = fechaV;
}

public String getNumLote() {
return numLote;
}

public void setNumLote(String numL) {
numLote = numL;
}

public float getCostoTratamiento() {
return costoTratamiento;
}

public void setCostoTratamiento(float costo) {
costoTratamiento = costo;
}

}

En el siguiente ejemplo, pongo la clase Refrigerado
Hereda de Producto, así que automáticamente ya tendrá los atributos y métodos de la clase madre y tendrá que sobrescribir el método getMargenGanancia() para hacer su propio cálculo de este dato. Para los Refrigerados, el margen de ganancia es el 15% respecto al costo de tratamiento (atributo que hereda de Producto)

Además, se añaden los atributos propios de esta clase, junto con sus correspondientes getters y setters.

Tiene dos constructores. Uno que recibe los datos mínimos para crear un Producto, quedando el resto de atributos (los propios de Refrigerado) con valores indefinidos.

El otro constructor, recibe todos los datos necesarios para crear un Producto Refrigerado al completo, con todos los atributos con valores definidos.

Código: [Seleccionar]
public class Refrigerado extends Producto{

private String codigoSupervision;
private String fechaEnvasado;
private int tempMantemimiento;
private String granjaOrigen;

//Constructor con atributos mínimos para crear un Producto
public Refrigerado(String fechaV, String numL, float costo) {
super(fechaV, numL, costo);
codigoSupervision = "";
fechaEnvasado = "";
tempMantemimiento = 0;
granjaOrigen = "";
}

//Constructor con todos los atributos para crear un Producto Refrigerado
public Refrigerado(String fechaV, String numL, float costo, String codigoS,
String fechaE, int tempM, String granjaO) {
super(fechaV, numL, costo);
codigoSupervision = codigoS;
fechaEnvasado = fechaE;
tempMantemimiento = tempM;
granjaOrigen = granjaO;
}

@Override
public float getMargenGanancia() {
//Margen de ganancia del 15% respecto del costo
return 15f * getCostoTratamiento() / 100;
}

public String getCodigoSupervision() {
return codigoSupervision;
}

public void setCodigoSupervision(String codigoS) {
codigoSupervision = codigoS;
}

public String getFechaEnvasado() {
return fechaEnvasado;
}

public void setFechaEnvasado(String fechaE) {
fechaEnvasado = fechaE;
}

public int getTempMantemimiento() {
return tempMantemimiento;
}

public void setTempMantemimiento(int tempM) {
tempMantemimiento = tempM;
}

public String getGranjaOrigen() {
return granjaOrigen;
}

public void setGranjaOrigen(String granjaO) {
granjaOrigen = granjaO;
}

}

El resto de clases "producto" seguirían esta dinámica de herencia.
« Última modificación: 23 de Octubre 2020, 13:32 por Kabuto »
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".