Control 3 - Ana Bahamondes

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

CONTROL 3

ANA BAHAMONDES DINAMARCA

PROGRAMACION ORIENTADA A OBJETOS II

Instituto IACC

08-03-2021
DESARROLLO

Supongamos que usted ha sido seleccionado para crear un manual de usuario sobre los

patrones de diseño de un sistema implementado en la empresa Software Collection, dicho

sistema está desarrollado en Java y trata de la automatización del proceso de compra y

venta de productos agrícolas.

De acuerdo al caso anterior y los contenidos revisados en la semana, elabore un informe

donde:

1. Señale la aplicabilidad del patrón creacional factory method (2 puntos).

 Se realiza una super clase de tipo abstracta de objetos producidos por el patron

factory method.

public abstract class Mercancia{


private String nomProducto;
private String tipoProducto;
private float valorProducto;

public String getNomProducto(){


return nomProducto;
}

public void setNomProducto(String nomProducto){


this.nomProducto = nomProducto;
}

public String getTipoProducto(){


return TipoProducto;
}

public void setTipoProducto(String tipoProducto){


this.tipoProducto = tipoProducto;
}

public float getValorProducto(){


return ValorProducto;
}

public void setValorProducto(float valorProducto){


this.valorProducto = valorProducto;
}

abstract public float calculoImpuesto();


}
 Por medio de los objetos que participan en el patron Factory Method, se puede

obtener una clase instanciada por este de manera concreta.

public class ProductoVacuno extends Mercancia{


private long codigoProducto;

public ProductoVacuno() {
super();
}

public ProductoVacuno(String nomProducto, String tipoProducto, float valor, long


codigoProducto) {
this.setNomProducto(nomProducto);
this.setTipoProducto(tipoProducto);
this.setValorProducto(valor);
this.codigoProducto = codigoProducto;
}

public long getCodigoProducto() {


return codigoProducto;
}

public void setCodigoProducto(long codigoProducto) {


this.codigoProducto = codigoProducto;
}

public void verProducto() {


System.out.println ("Producto Vacuno ==> Nombre: " + getNomProducto()+ ",
Tipo: " + getTipoProducto() + ", Codigo: " + getCodigoProducto() + ", " +
"Valor: " + getValorProducto());
}

@Override
public float calculoImpuesto() {
return getValorProducto() * 0.18f;
}
}
 Para crear una clase de tipo especifica debemos tener una clase independiente, en

este caso se hará indirectamente por medio de la instancia llamada

FactoryMercancia.

public class PedirMercancia{

public static void main(String[] args) {


FactoryMercancia producto = new FactoryMercancia();
producto.crearProductoVacuno();
}
}

 Para la implementación de una interface, los objetos crean objetos de tipo

ProductoVacuno por solicitud de otro objeto de la clase llamado PedirMercancia.

public interface IFFactoryMercancia {

public ProductoVacuno crearProductoVacuno();


public ProductoVacuno actualizarProductoVacuno(ProductoVacuno
productoVacuno);
public ProductoVacuno consultarProductoVacuno(long codigoProducto);
}

 La interface IFFFactoryMercancia es adecuadamente implementada gracias a la

clase y su método para crear objetos ProductoVacuno.

public class FactoryMercancia implements IFFactoryMercaderia {


@Override
public ProductoVacuno crearProductoVacuno() {
return new ProductoVacuno();
}
@Override
public ProductoVacuno actualizarProductoVacuno(ProductoVacuno
productoVacuno) {
return productoVacuno;
}

@Override
public ProductoVacuno consultarProductoVacuno(long codigoProducto) {
return productoVacuno;
}
}
2. Mencione las características que tiene el sistema de aplicabilidad de patrón de diseño

abstract factory (2 puntos).

 Cliente: Esta clase PedirMercancia llamará a la factoría FactoryMercaderia

debido a que esta necesitará crear un objeto o más que proveerá la factoría, por lo

cual cliente obtendrá una instancia de algunos de los productos vacuno y equino.

public static void main(String[] args) {

FactoryMercancia producto1 = new FactoryMercancia();


producto1.crearProductoVacuno();

FactoryMercancia producto2 = new FactoryMercancia();


producto2.crearProductoEquino();
}
}

 Abstract Factory (IFFactoryMercancia): esta sería lo que se llama “interface de la

factoría”. Este nos entrega un método para obtener lo que se necesita de cada

objeto que pueda crear (ProductoVacuno, ProductoEquino).

public interface IFFactoryMercancia {

public ProductoVacuno crearProductoVacuno();


public ProductoVacuno actualizarProductoVacuno(ProductoVacuno
productoVacuno);
public ProductoVacuno consultarProductoVacuno(long codigoProducto);

public ProductoEquino crearProductoEquino();


public ProductoEquino actualizarProductoEquino(ProductoEquino
productoEquino);
public ProductoEquino consultarProductoEquino(long codigoProducto);

}
 Factorías Concretas: aquí se encuentran las diversas familias de los productos y

clase (ProductoVacuno y ProductoEquino)

public class ProductoVacuno extends Mercancia{


private long codigoProducto;
public ProductoVacuno() {
super();
}

public ProductoVacuno(String nomProducto, String tipoProducto, float valor, long


codigoProducto) {
this.setNomProducto(nomProducto);
this.setTipoProducto(tipoProducto);
this.setValorProducto(valor);
this.codigoProducto = codigoProducto;
}

public long getCodigoProducto() {


return codigoProducto;
}

public void setCodigoProducto(long codigoProducto) {


this.codigoProducto = codigoProducto;
}

public void verProducto() {


System.out.println ("Producto Vacuno ==> Nombre: " + getNomProducto()+ ", Tipo: "
+ getTipoProducto() + ", Codigo: " + getCodigoProducto() + ", " + "valor: " +
getValorProducto());
}

@Override
public float calculoImpuesto() {
return getValorProducto() * 0.18f;
}

public class ProductoEquino extends Mercancia{


private long codigoProducto;
private String dieta;

public ProductoEquino() {
super();
}

public ProductoEquino(String nomProducto, String tipoProducto, float valor, long


codigoProducto, String dieta) {
this.setNomProducto(nomProducto);
this.setTipoProducto(tipoProducto);
this.setValorProducto(valor);
this.codigoProducto = codigoProducto;
this.dieta = dieta;
}
public long getCodigoProducto() {
return codigoProducto;
}

public void setCodigoProducto(long codigoProducto) {


this.codigoProducto = codigoProducto;
}

public String getDieta() {


return dieta;
}

public void setDieta(String dieta) {


this.dieta = dieta;
}

public void verProducto() {


System.out.println ("Producto Equino ==> Nombre: " + getNomProducto()+ ", Tipo: "
+ getTipoProducto() + ", Codigo: " + getCodigoProducto() + ", " + "Valor: " +
getValorProducto() + ", Dieta: " + getDieta());
}

@Override
public float calculoImpuesto() {
return getValorProducto() * 0.18f;
}
}
 Producto Abstracto: en el caso planteado, el producto abstracto no aplica debido

a que no se crearan productos de tipo genéricos, solo productos específicos como

ProductoVacuno y ProductoEquino y productos concretos.

 Producto Concreto: Ejecución de los diferentes productos como, por ejemplo,

ProductoVacuno y ProductoEquino.

public class FactoryMercancia implements IFFactoryMercancia {


@Override
public ProductoVacuno crearProductoVacuno() {
return new ProductoVacuno();
}
@Override
Public ProductoVacuno actualizarProductoVacuno(ProductoVacuno productoVacuno) {
return productoVacuno;
}
@Override
public ProductoVacuno consultarProductoVacuno(long codigoProducto) {
return productoVacuno;
}
@Override
public ProductoEquino crearProductoEquino() {
return new ProductoEquino();
}
@Override
public ProductoEquino actualizarProductoEquino(ProductoEquino productoEquino) {
return productoEquino;
}

@Override
public ProductoEquino consultarProductoEquino(long codigoProducto) {
return productoEquino;
}
}

3. Explique la utilidad del patrón de diseño creacional singleton (1 punto).

Al momento de implementar el patrón de diseño creacional singleton, permitimos crear

una instancia de la clase principal de la aplicación, como también, ofrecer un acceso

completo al sistema a todos los usuarios que pretendan utilizarla. En este caso en

particular, el servidor estaría ejecutando la aplicación, por lo que se entiende que su

arquitectura esta bajo la modalidad cliente-servidor.

4. Describa los diferentes usos de un patrón de diseño builder (1 punto).

Los diferentes usos que se le puede dar a un patrón de diseño builder (dado el caso

presentado) son la utilización para conocer la existencia de algún producto y si es

agrícola con un los atributos determinantes y comportamientos, como lo son los métodos

y/o operaciones que permitan describir este. Como también, con el algoritmo de creación

del objeto independizándose de sus partes compuestas. Lo anterior se entiende por lógica

de programación y conjunto de instrucciones.


5. Determine las aplicaciones relacionadas con el patrón creacional propotype (1

punto).

Para utilizar este patrón dentro de un caso donde se solicite crear objetos con parámetros

como de fábrica ya listos para utilizarse, como lo es duplicar objetos de manera más

rápida que crearlos y luego establecer la configuración correcta para cada valor en

particular. Este patrón debe ser utilizado si el sistema de compra-venta de productos

agrícolas necesita, en algún momento, tener instancias de clases (objetoProductoVacuno,

objetoProductoEquino) que contengan los mismos datos repetitivos, que sus atributos.

6. Explique las características del patrón de diseño object pool (0,8 puntos).

En la presente problemática presentada en este control, para poder automatizar el sistema

de compra-venta de los productos agrícolas, nos permite ver que esta bajo una

arquitectura cliente-servidor, ya que son muchos los usuarios que pretenderán tener

acceso de manera continua en la aplicación y esta podría necesitar una implementación

de gestión de conexiones de una base de datos. Lo anterior, por motivos a la apertura de

muchísimas conexiones este podría verse afectado en su rendimiento como, por ejemplo:

Crear una operación, esta requiere muchos recursos; limitación en el número de accesos,

lentitud en diversas operaciones, entre otros.

7. En su respuesta incluya las aplicaciones de este patrón de diseño (0,2 puntos).

Una de las aplicaciones que nos permite crear conexiones es bases de datos MySQL.

8. Mencione donde se pueden utilizar los patrones de diseño creacional (1 punto).

Los patrones de diseño creacional pueden ser utilizados en cualquier sistema que este

automatizado bajo una programación orientada a objetos, lo cual permite crear y aplicar

este tipo de patrones, debido a que nos deja crear clases que fabrican objetos o instancias.
En la problemática propuesta en este control, se ha utilizado el patrón de diseño

creacional, estos se podrán encontrar en Factory Method y AbstractFactory.

BIBLIOGRAFÍA

 IACC, 2021. Contenido semana 3: Patrones de diseño creacionales.

También podría gustarte