Laboratorio 6
Tema 8. Programación Orientada a Objetos
EJERCICIOS A PROGRAMAR
En este laboratorio debes desarrollar programas capaces usar acciones, funciones, pase de parámetros, estructuras de datos y Programación Orientada a Objetos utilizando lenguaje C++, creando programas que compilen y corran en el entorno Linux.
Ejercicios: todos deben agregarse en el mismo archivo .cpp, el cual debe compilar
NOTA: en todos los ejercicios debe solicitarse los valores de entrada al usuario, leerlos y realizar las validaciones necesarias en los datos de entrada.
Para los siguientes ejercicios se quiere:
a. Identificar clases existentes, atributos y métodos de la clase(s) b. Identificar las relaciones (si hay más de una clase)
c. En función de los elementos identificados, desarrollar las clases necesarias en cada ejercicio utilizando el enfoque de Programación Orientada a Objetos en C++.
d. Programe en C++ una acción principal en donde se creen instancias de las clases y se invoquen sus métodos.
IMPORTANTE: en los ejercicio 1 y 3 puede utilizar estructuras de datos auxiliares (arreglos, archivos) si así lo considera conveniente.
1. Especifique una clase que represente productos con las siguientes propiedades:
Tienen un código que los identifica de manera única y que se asigna automáticamente en el momento de la creación (por ejemplo utilizando una fórmula aleatoria).
Guardan la descripción y el precio neto en Bs sin IVA.
Todos los productos comparten el mismo IVA (supongamos el 12%), pero este impuesto puede variar según decisiones del ente regulador de asuntos tributarios.
Fecha de elaboración, lo cual permite conocer los productos más recientes. La clase Producto debe proporcionar los métodos adecuados:
1.1. Constructor(es)
1.2. Métodos para consulta y modificación de cada uno de los atributos (gets y sets)
1.3. Método para calcular el precio de venta del producto, el cual incluye el IVA correspondiente. En la Acción Principal se debe:
Crear tres (3) instancias de la clase Producto Calcular sus precios de venta
2. Defina una clase Monedero que permita gestionar la cantidad de dinero que una persona dispone en un momento dado. La clase deberá tener un constructor que permitirá crear un monedero con una cantidad de dinero inicial y deberá definir un método para meter dinero en el monedero, otro para sacarlo y finalmente, otro para consultar el disponible; solo podrá conocerse la cantidad de dinero del monedero a través de este último método. Por supuesto, no se podrá sacar más dinero del que haya en un momento dado en el monedero.
En la Acción Principal se debe:
Crear una instancia de la clase Monedero con un monto inicial de Bs. 1.200 Agregar al monedero Bs. 500
Sacar del monedero Bs. 2.000 Mostrar el monto disponible
Sacar del monedero un equivalente al monto disponible Mostrar la cantidad final que queda en el monedero.
3. La Biblioteca Alonso Gamero (BAG) de la Facultad de Ciencias de la UCV desea desarrollar un sistema para el control de recursos utilizando Programación Orientada a Objetos.
Los recursos que se manejan en la biblioteca son de cuatro tipos: libros, revistas, publicaciones internas y trabajos académicos (con los tipos: trabajo especial de grado, trabajo de grado de especialización, tesis de maestría y tesis doctoral). Para cada recurso se debe almacenar su título, autor(es), ubicación dentro de la biblioteca (número de estante y fila), cota y número de ejemplares.
Los libros y revistas tienen un año de publicación (sólo año), las publicaciones internas y los trabajos académicos tienen fecha de presentación (día, mes y año).
Los libros tienen también una editorial. Las revistas adicionalmente tienen volumen y número. Las publicaciones internas indican adicionalmente la Escuela o Instituto. Para los trabajos académicos se indica también la Escuela donde se presentó, el nombre y apellido del tutor (se acepta hasta 2 tutores) y el nombre y apellido del jurado (se puede tener un mínimo de 2 y un máximo de 3 jurados).
En la Acción Principal se debe:
Leer desde un archivo de entrada la información de por lo menos 12 recursos, incluyendo al menos uno (1) de cada tipo
Crear las instancias en el programa para estos recursos
Listar todos los recursos de tipo “trabajo académico”, ordenados por Escuela y fecha de presentación
Mostrar los libros que pertenecen a un autor indicado por el usuario y la cantidad de ejemplares disponibles
Indicar la cantidad de revistas almacenadas
Indicar los autores de las publicaciones internas y las escuelas o institutos en donde se elaboraron
Mostrar un listado de todos los recursos almacenados en la BAG, descendentemente por fecha de publicación o de presentación, este listado también debe indicar de que tipo es el recurso
Cuestionario Laboratorio 6
Tema 8. Programación Orientada a Objetos
1. ¿Una clase puede tener varios constructores, cada uno de ellos con una cantidad diferente de parámetros? Justifique su respuesta
1.1. Verdadero 1.2. Falso
2. En C++ los atributos de las clases por defecto son: 2.1. Privados
2.2. Públicos 2.3. Protegidos
2.4. Ninguna de las anteriores 2.5. Todas las anteriores Justifique su respuesta
3. ¿Es posible realizar lectura y escritura de datos dentro de los métodos de las clases? 3.1. Verdadero
3.2. Falso
Indique ventajas y desventajas
4. Cuándo una clase B hereda de una clase A:
4.1. Se heredan y pueden utilizarse todos los métodos y atributos de la superclase A
4.2. Se heredan y pueden utilizarse sólo los métodos y atributos privados de la superclase A 4.3. No se heredan métodos ni atributos, ya que la clase B tiene su propia especificación 4.4. Se heredan todos los métodos y atributos, pero sólo puede usarse los que tengan modo de
acceso público o modo de acceso protegido
5. En C++ se permite la herencia múltiple de clases, esto se refiere a:
5.1. Se permiten crear clases derivadas o hijos a partir de varias clases padre 5.2. Se heredan los atributos de todas las clases de las cuales se está heredando 5.3. Se realiza una copia de todos los atributos en la clase que hereda
5.4. Todas las anteriores
6. ¿Qué diferencia hay entre los lenguajes C y C++ respecto al uso de Programación Orientada a Objetos?
7. ¿Por qué se dice que la Programación Orientada a Objetos favorece el encapsulamiento? 8. ¿Cómo se representa en C++ la relación de asociación entre dos clases?
9. ¿Cómo se representa en C++ la relación de uso entre dos clases? 10. ¿Cómo se representa en C++ la relación de herencia entre dos clases?
RESTRICCIONES
El laboratorio debe ser desarrollado en C++, bajo el sistema operativo Ubuntu. Sugerimos la utilización de geany como ambiente de desarrollo en Linux y en Windows sugerimos el uso de Dev C++.
Se debe usar lectura y escritura estándar. Se permite usar tipos de datos básicos, operaciones aritméticas, estructuras de control condicional, iterativas, procedimientos (acciones, funciones y pase de parámetros), tipos de datos estructurados y Programación Orientada a Objetos. Se permite el uso de elementos de la Librería Estándar de C++ (stdio, iostream, string, cmath, math, entre otras).
Cualquier copia será penalizada para todos los involucrados con la nota de CERO (0) puntos, además del reporte respectivo al Profesor de la Sección y a la Coordinadora de la Materia.
Se debe seguir estrictamente el formato de entrada de datos y mensajes de salida cuando se indique en los enunciados, de lo contrario esto repercutirá en su nota.
Detalles de entrada: Escritura y lectura estándar, además de la creación de archivos de entrada en los ejercicios donde se requieren.
Detalles de la salida
Se escribirá por salida estándar una cadena o string que representa la respuesta a cada ejercicio, además se crearán los archivos de salida en los ejercicios donde se requieren.
ENTREGA DEL LABORATORIO Y DEL CUESTIONARIO
El laboratorio es de realización individual y la entrega del mismo será hasta viernes 04 de marzo de 2016 a las 11:00 p.m, pero puedes enviarlo antes.
Se debe enviar el código del laboratorio al correo-e del preparador de tu sección de laboratorio (indicados en la página web de la materia) y copiar también al correo [email protected]
El asunto del correo-e debe cumplir con el siguiente formato :
AyP_Sección_
Lab6
_Cédula
por ejemplo:
AyP_C2_
Lab6
_12345678
Los archivos con la solución a enviar por correo-e (.cpp del programa y .pdf con el cuestionario con sus respuestas) deben guardarse respetando el siguiente formato para su nombre, sin usar acentos o ñ:
Lab6_
Seccion_NombreyApellido_Cedula.cpp
por ejemplo, para María Angélica Peñaloza:
Lab6
_C2_MariaPenaloza_12345678.cpp
Lab6
_C2_MariaPenaloza_12345678_cuestionario.pdf
Archivos de laboratorios o proyectos que no cumplan con este formato de nombre NO SERÁN CORREGIDOS. No se aceptarán envíos posteriores con el nombre corregido.
Enviar ambos archivos (.cpp con la solución y .pdf con el cuestionario y sus respuestas) como dos archivos anexos al correo. NO enviarlo en formato comprimido.
NO SE ACEPTARÁN ENVÍOS posteriores a la fecha y hora indicada, correos que no respeten el formato del asunto y del nombre de archivo, o archivos enviados a un correo-e que no sea el del preparador correspondiente.
CONSULTAS:
Aprovechar la sección semanal de consultas para aclarar con tu preparador dudas sobre el laboratorio o aspectos de programación en C++.
En el sitio web de la materia están publicados los horarios en que los Preparadores darán consultas de laboratorio en Sala de Micros.
MATERIAL DE APOYO
En el sitio web de la materia hay enlaces a sitios con información sobre programación con C++ (http://www.compuefectiva.com/algoritmosyprogramacion/materiales.html)
Breve repaso de Programación Orientada a Objetos (POO):
http://www.genbetadev.com/paradigmas-de-programacion/breve-repaso-de-la-programacion-orientada-a-objetos-con-c
Prof. Luis Zelaya. Programación Orientada a Objetos – Manual de Ejercicios en Clase. 2da Ed., versión 3. 2009:
http://www.ciens.ucv.ve/algoritmosyprogramacion/documentos/POO_Manual%20de%20Ejer cicios%20v3_LuisZelaya.pdf
Prof. Domingo Hernández. Programación Orientada a Objetos utilizando C++. Universidad de Los Andes. Venezuela:
http://www.ciens.ucv.ve/algoritmosyprogramacion/documentos/POO_Manual%20de%20Ejer cicios%20v3_LuisZelaya.pdf
Prof. Carlos Alberto Fernández Fernández. Programación Orientada a Objetos con C++, Notas de Clase. Universidad Tecnológica de la Mixteca:
http://www.ciens.ucv.ve/algoritmosyprogramacion/documentos/POO_Manual%20de%20Ejer cicios%20v3_LuisZelaya.pdf