INSTITUTO POLITÉCNICO NACIONAL
ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA
INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA
PROGRAMACIÓN ORIENTADA A
OBJETOS
PROYECTO. “Herencia Virtual”
Grupo: 2CM26
Integrantes:
- Sanchez Duran José Fernando
Profesor: María Ivonne Gutiérrez Villalba
Fecha: 24/ Marzo/ 2020
El programa a realizar es el siguiente:
Como podemos observar, tenemos 5 clases en una estructura de diamante en la
cual, las clases “Terrestre, Aéreo y Marítimo” son clases derivadas de la clase padre
“Vehículo” y a su vez, esta son clases padres de la clase derivada “Agencia de
Viajes” y, por lo tanto, estas heredaran atributos y métodos respectivamente a la
clase base a la que pertenezcan. Sabiendo lo anterior, crearemos la clase base
“Vehículo” en un proyecto de c++.
Una vez creado, creamos atributos y métodos a esta clase (Figura 1) teniendo en
cuenta que estos serán heredados posteriormente a sus clases derivadas.
(Terrestre, Aéreo y Marítimo).
Figura 1. Datos y Atributos de la Clase Vehículo.
Como se muestra, creamos 2 atributos de tipo string “origen, destino” y 2 métodos
“Lee vehículo y muestra vehículo”. Estos serán heredadas posteriormente.
En nuestro archivo cpp de la clase vehículo, inicializamos nuestros atributos (en el
constructor por omisión) Figura 2, y declaramos los métodos de esta clase. Figura
3.
Figura 2. Constructor por omisión.
Figura 3. Método de lectura y muestra de la clase Vehículo.
Posterior a la creación y declaración de nuestra clase base, creamos la primera
clase derivada de esta “Terrestre” indicando a nuestro archivo .h que además de
una clase de tipo publica, es una herencia virtual de vehículo (esto para que no
exista ambigüedad respecto a las 2 clases derivadas restantes de vehículo
“mostradas en el diagrama de la figura 1”). Figura 4.
Figura 4. Agregamos el “virtual”
Posterior a ello, declaramos los atributos y métodos correspondientes a esta clase.
Figura 5.
Figura 5. Atributos y métodos de la clase Terrestre.
Ahora, ingresamos a nuestro archivo cpp de la clase terrestre e inicializamos los
atributos de nuestra clase Terrestre (En el constructor) Figura 6, además de
declarara los métodos de esta. Figura 7.
Figura 6. Atributos de la clase Terrestre.
Figura 7. Métodos de la clase Terrestre.
De igual manera que hicimos con la clase Terrestre, creamos otra clase derivada
de Vehículo, agregando el “virtual” para evitar la ambigüedad de datos y funciones,
ahora con el nombre de “Aéreo” y de igual forma, creamos atributos y métodos
correspondientes a esta nueva clase.
Figura 8. Archivo .h de Aéreo donde se declaran los atributos y métodos
respectivos a esta clase.
Una vez que terminamos de declarar los atributos y métodos, inicializamos loa
atributos en el constructor de la clase Figura 9, y declaramos los métodos. Todo
esto en el archivo cpp de la clase Aéreo. Figura 10.
Figura 9. Inicialización de los atributos de la clase Aéreo en el constructor de este.
Figura 10. Declaración de los métodos de la clase Aéreo.
Ahora, creamos la ultima clase derivada de vehículo, la cual nombraremos como
“Marítimo” y de igual manera que las anteriores clases derivadas de la clase base,
colocamos el “virtual” para evitar la ambigüedad entre los atributos y métodos
heredados por la clase base y declaramos los atributos y métodos correspondientes
a esta clase. Figura 11.
Figura 11. .h de la clase Marítimo.
Inicializamos los atributos de esta clase en el constructor de esta Figura 12, además
de declarar las instrucciones a realizar de cada método de la clase. Figura 13.
Figura 12. Inicialización de los atributos de la clase Marítimo
Figura 13. Declaración de los métodos de lectura y muestra de la clase Marítimo.
Una vez creada las 3 clases derivadas de la clase Vehículo, estas a su vez serán
clases padre de la siguiente clase a crear “Agencia de viajes” la cual heredara los
atributos y métodos declarados en las clases: Terrestre, Aéreo y Marítimo. Como
CodeBlocks solo nos permite hacer la herencia de una sola clase padre, indicamos
el nombre de una de las tres clases al momento de crear la clase derivada “Agencia
de viajes” y posterior a ello, de forma manual agregamos las otras dos clases
restantes. Esto lo realizamos en el .h de la clase derivada “Agencia de viajes” como
se muestra en la Figura 14.
Figura 14. Declaración manual de la clase derivada Agencia de viajes, agregando
las clases padre “Aéreo” y “Marítimo”.
Posterior a ello, agregamos los atributos y métodos que esta clase deba contar.
Figura 15.
Figura 15. Atributos y métodos de la clase derivada agencia de viajes.
En el archivo cpp de esta clase, inicializamos los atributos en el constructor Figura
16. Y declaramos los métodos antes creados en el .h de la clase. Figura 17.
Figura 16. Inicialización de los atributos de la clase agencia de viajes.
Figura 17. Declaración de los métodos de la clase agencia de viajes.
Una vez que hemos creados las 5 clases del diagrama de la figura 1
correspondientes a nuestro programa, creamos un menú (como se solicita) para
realizar las tareas especificadas que el usuario desee hacer durante la ejecución
del programa. Para ello, en el main llamamos a 2 funciones creadas anteriormente
“menú y seleccionar menú”. Figura 18.
Figura 18.
Como podemos observar en la figura 18, usamos un ciclo do-while, el cual dejara
de repetirse hasta que la sentencia se cumpla. En otras palabras, hasta que el
usuario ingrese la opción “e”.
Ingresando a la función menú, tenemos:
Las opciones que el usuario vera en la pantalla, y por lo tanto elegir la que el desee.
Para la función de seleccionar opción tenemos:
En donde, con ayuda de las condicionales if-else, dependiendo de la opción
ingresada por el usuario, realizara las tareas indicadas a cada opción.
Como se observa, se ah creado un objeto “usuario1” el cual ejecuta los métodos ya
definidos anteriormente en las clases ya declaradas.
Una vez que compilamos y corremos en programa tenemos:
La ejecución de la función “menú” que despliega las opciones que el usuario puede
realizar, solicitando que este ingrese la letra respetiva a lo que desea hacer y esta
a su vez realizara la misma.
Para el caso a)
Como la opción lo dice, nos solicita algunos de nuestros datos personales y
posteriormente, muestra en la pantalla los datos ingresados:
Como podemos ver, nos pide, presionar una tecla para continuar con el programa
(gracias a la declaración de system(“pause”)) el cual, al presionar, nos devuelve al
menú principal:
Y de esta manera podemos continuar con otra opción que deseemos ejecutar. Aquí
es donde se cumple nuestro ciclo do-while, el cual seguirá repitiéndose hasta que
el usuario de la opción de salir.
Para el caso b)
Ingresamos los datos solicitados, y por ultimo nos muestras los datos que hemos
dado anteriormente.
Y como ya se dijo, el programa hace una pausa para visualizar los datos ingresados
y posterior a ello, volvemos a regresar al menú de inicio para continuar con otra
opción.
Para el caso c)
Nos muestra las opciones que tenemos para realizar un viaje, además de
solicitarnos el origen y destino de viaje.
Para el caso d)
Ingresamos los datos solicitados a esta opción y después, el programa nos muestra
los datos que hemos ingresado.
Para el caso e)
Como ya se comento anteriormente, el programa no se deja de ejecutar hasta que
el usuario dese salir de este ingresando la opción de salir “e” y como observamos,
al indicar esta opción, el programa termina.
Diagrama UML