0% encontró este documento útil (0 votos)
42 vistas3 páginas

Practica 5 - 2018

El documento detalla una práctica de programación orientada a objetos que incluye la creación de una clase base 'Mascota' y sus derivadas 'Perro', 'Gato' y 'Pez', además de una clase 'NumeroComplejo' con métodos sobrescritos y la implementación de interfaces. También se propone un sistema para administrar productos en un supermercado, con clases abstractas y concretas que manejan precios, inventarios y promociones. Se enfatiza el uso de polimorfismo y encapsulamiento en la implementación de las funcionalidades requeridas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
42 vistas3 páginas

Practica 5 - 2018

El documento detalla una práctica de programación orientada a objetos que incluye la creación de una clase base 'Mascota' y sus derivadas 'Perro', 'Gato' y 'Pez', además de una clase 'NumeroComplejo' con métodos sobrescritos y la implementación de interfaces. También se propone un sistema para administrar productos en un supermercado, con clases abstractas y concretas que manejan precios, inventarios y promociones. Se enfatiza el uso de polimorfismo y encapsulamiento en la implementación de las funcionalidades requeridas.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

FUNDAMENTOS DE PROGRAMACION ORIENTADA A OBJETOS

PRACTICA N 5

1. a) Cree una clase llamada Mascota con al menos una propiedad Nombre y un método
Alimentar() (el método puede escribir en consola “Alimentando Mascota” y el nombre ).
b) Cree clases derivadas de Mascota: Perro, Gato y Pez y extiéndalas agregando los
métodos Pasear(), Acariciar() y Mirar() respectivamente.
c) Declare como virtual Alimentar() en la clase base y sobrescriba el método en cada clase
derivada.
d) Cree un método estático para alimentar una instancia de Mascota e invóquelo desde el
Main(). Pruebe que con el mismo método puede alimentar al perro, al gato y al pez
e) En el método estático agregue código para llamar a los métodos particulares de Perro,
Gato o Pez usando los operadores is y as.

2. Cree la clase NumeroComplejo:

NumeroComplejo
-real: double
-imag: double
+ParteReal: double
+ParteImag: double
+Modulo: double
+Fase: double
+NumeroComplejo()
+NumeroComplejo(double,double)

Agregue funcionalidad a la clase:

a) Haciendo override del método ToString() para imprimir el número, p. ej. “3+j5”
b) Haciendo override del método bool Equals(Object obj) para determinar si dos
instancias son iguales, lo que en este caso se cumplirá si parte real e imaginaria son
iguales
c) Implementando la interfaz IComparable que requiere el método:
public int CompareTo(Object obj)
el cual sirve para “ordenar” elementos. Debe devolver 1 si el elemento es mayor al
que se le pasa (recordar hacer downcast a NumeroComplejo), cero si es igual, y -1 si
es menor. Estableceremos como criterio de comparación el módulo del número
imaginario. Puede probar si implementó exitosamente la interfaz creando un
ArrayList de varios números complejos e invocando ArrayList.Sort()
d) Implementando la interfaz IFormattable que requiere el método:
public string ToString(string format,IFormatProvider provider)
el cual sirve para implementar una versión propia de los modificadores de formato.
Por ejemplo recordando que si se quiere imprimir un número real n con 2 decimales
escribiríamos: Console.Writeline(“{0:0.00}”,n);
Donde “0.00” es el modificador de formato que se pasa en la cadena format al
método ToString.
En este caso se quiere poder pasar el string de formato “MF” para que el número
complejo se imprima en módulo y fase, y “RI” para imprimir parte real e
imaginaria. Puede ignorar el argumento “provider”
* Para este ejercicio le serán útiles los miembros estáticos de Math: Pow(), Sqrt(), Atan2(), PI

3) Se propone crear un programa para administrar los productos de un supermercado.


a) Crear una clase abstracta Producto, que declare el método abstracto CalcularPrecio(), y
una clase Supermercado que contenga un ArrayList para agregar los productos y un método
ImprimirEtiquetas() para imprimir las etiquetas de todos los productos. Puede usar
referencias a la clase abstracta Producto recorriendo todos los elementos del ArrayList con
un foreach. Incluya un método para agregar productos al ArrayList (ya que el mismo está
encapsulado)
Producto

Supermercado #nombre: string


-productos: ArrayList #costo: double
+AgregarProducto(p: Producto) #ganancia: double
+ImprimirEtiquetas() #impuesto: double
+Precio: double
#CalcularPrecio() : double
+ImprimirEtiqueta()

Implemente una clase ProductoGenerico que implemente CalcularPrecio con una fórmula
basica (p. ej. costo*(1+ganancia/100)*(1+impuestos/100)) para testear la clase
Supermercado.

b) Implemente las siguientes clases concretas derivadas de Producto extendiendo o


modificando su funcionalidad:

ProductoAlimentoFresco
Tiene fecha de vencimiento (sugerencia, usar DateTime), una propiedad Vencido, y
si está vencido se imprime en su etiqueta “Retirar de la góndola”
ProductoModa
Tiene una fecha de moda a partir de la cual su precio se calcula con una ganancia
50% menor
ProductoElectronico
Tiene una propiedad “Nacional” que indica si es de fabricación nacional, y en ese
caso el impuesto baja del 21 al 10%
Compruebe que sus nuevas clases funcionan bien con la clase Supermercado creada en el
punto anterior, gracias al polimorfismo.

c) Agregue la capacidad de inventariar (conocer el stock) los productos del supermercado.


Agregue esta funcionalidad a todos los productos, conservando a su vez el código ya creado
para testear la clase Supermercado, componiendo en la clase abstracta Producto una clase
DatosInventario como miembro
DatosInventario
+Cantidad: double
+Unidades: string
+Agregar(cantidad: double)
+Retirar(cantidad: double)
+ConfigurarUnidades(unidades: string)
Agregue la propiedad Nombre a Producto para poder obtener el nombre del mismo al
imprimir un inventario.
Implemente los métodos AsignarInventario() e ImprimirInventario() en la clase
Supermercado. AsignarInventario() recorre el ArrayList de productos pidiendo las
cantidades, e ImprimirInventario() imprime en pantalla una tabla con nombre y cantidad.

d) Cree una interfaz IBonificable con las propiedades


bool EnPromocion
double PrecioBonificado
que permite asignar promociones a los productos que se quiera. Agregue a la clase
Supermercado un método Promociones() que imprima una tabla con la lista de productos
que tiene, y si encuentra productos bonificables, imprima el cartel “Producto en
promoción” y el PrecioBonificado en lugar del Precio. Puede recorrer la lista considerando
a todos los elementos como Producto, chequear si se trata de un IBonificable con el
operador is, y acceder a sus campos con el operador as.
Implemente la interfaz IBonificable en al menos 1 producto, por ejemplo puede poner en
promoción los ProductoFresco vencidos.

También podría gustarte