ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

PRACTICA “Polimorfismo”


Enviado por   •  30 de Abril de 2020  •  Prácticas o problemas  •  2.013 Palabras (9 Páginas)  •  94 Visitas

Página 1 de 9

[pic 1]         INSTITUTO POLITÉCNICO NACIONAL            [pic 2]    

ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA

INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA

 

PROGRAMACIÓN ORIENTADA A OBJETOS

PRACTICA “Polimorfismo”

Grupo: 2CM26         

Integrantes:

- Cruz Martínez Xiadani

- Víctor Alejandro Hernández Santos

-  Sanchez Duran José Fernando

Profesor: María Ivonne Gutiérrez Villalba

Fecha: 31/ Marzo/ 2020

Objetivo

El alumno identifique como realizar herencia de métodos con diferente comportamiento entre clases derivadas, evitando la superposición de estas.

Introducción

Antes de comenzar con el desarrollo de la practica, es importante definir ciertos conceptos que serán de suma importancia para entender la ejecución del código y el por qué la declaración de ciertos métodos.

Herencia: En orientación a objetos, el mecanismo que implementa la propiedad de generalización se denomina herencia. La herencia permite definir nuevas clases a partir de otras clases ya existentes, de modo que presentan las mismas características y comportamiento de éstas, así como otras adicionales. En otras palabras, podemos decir que la herencia o relación es-un es la relación que existe entre dos clases, en la que una clase denominada derivada se crea a partir de otra ya existente, denominada clase base.

En C++ la clase original se denomina clase base y las clases que se derivan de ella se denominan clases derivadas y siempre son una especialización o concreción de su clase base. A la inversa, la clase base es la generalización de la clase derivada. Esto significa que todas las propiedades (atributos y operaciones) de la clase base se heredan por la clase derivada, normalmente suplementada con propiedades adicionales.

Polimorfismo: Además de las ventajas de consistencia y reducción de código, la herencia, aporta también otra gran ventaja: facilitar el polimorfismo. Polimorfismo es la propiedad de que un operador o una función actúen de modo diferente en función del objeto sobre el que se aplican. En la práctica, el polimorfismo significa la capacidad de una operación de ser interpretada sólo por el propio objeto que lo invoca. Desde un punto de vista práctico de ejecución del programa, el polimorfismo se realiza en tiempo de ejecución ya que durante la compilación no se conoce qué tipo de objeto y por consiguiente que operación ha sido llamada.

La propiedad de polimorfismo es aquella en que una operación tiene el mismo nombre en diferentes clases, pero se ejecuta de diferentes formas en cada clase. Así, por ejemplo, la operación de abrir se puede dar en diferentes clases: abrir una puerta, abrir una ventana, abrir un periódico, abrir un archivo, abrir una cuenta corriente en un banco, abrir un libro, etc. En cada caso se ejecuta una operación diferente, aunque tiene el mismo nombre en todos ellos “abrir”. El polimorfismo es la propiedad de una operación de ser interpretada sólo por el objeto al que pertenece. Existen diferentes formas de implementar el polimorfismo y variará dependiendo del lenguaje de programación.

Funciones Virtuales: Por omisión, las funciones C++ tienen ligadura estática; si la palabra reservada virtual precede a la declaración de una función, esta función se llama virtual, y le indica al compilador que puede ser definida (implementado su cuerpo) en una clase derivada y que en este caso la función se invocará directamente a través de un puntero. Se debe calificar una función miembro de una clase con la palabra reservada virtual sólo cuando exista una posibilidad de que otras clases puedan ser derivadas de aquélla.

Un uso común de las funciones virtuales es la declaración de clases abstractas y la implementación del polimorfismo.

En C++, las funciones virtuales siguen una regla concreta: la función se debe declarar como virtual en la primera clase en que está presente. Esta regla significa que, normalmente, las funciones virtuales se declaran en la clase de nivel más alto de una jerarquía. Para nuestro caso, en la clase base.

Clase Abstracta: En C++ es posible definir clases abstractas. Una clase abstracta, o clase base abstracta (ABC), es una que esta diseñada solo como clase padre de las cuales se deben derivar clases hijas. Una clase abstracta se usa para representar aquellas entidades o métodos que después se implementaran en las clases derivadas, pro la clase abstracta en si no contiene ninguna implementación – solamente representa los métodos que se deben implementar. Por ello, no es posible instanciar una clase abstracta, pero si una clase concreta que implemente los métodos definidos en ella.

Desarrollo

Para comenzar, creamos una clase, la cual será nuestra clase base “MATRIZ” y declaramos sus atributos y métodos. Figura 1. Como los métodos de esta clase serán heredados a dos clases derivadas, incluimos el método virtual a las funciones, pues a pesar de ser heredados, estos tendrán un comportamiento diferente en cada clase derivada.

[pic 3]
Figura 1. Atributos y Método de la clase base MATRIZ

Ahora, el archivo cpp de nuestra clase base, inicializamos los atributos en el constructor de este (Figura 2) y definimos los métodos pertenecientes a esta clase.

[pic 4]
Figura 2. Constructor de la clase base.

[pic 5]
Figura 3. Método Genera Matriz

Como podemos ver, se crea una matriz dinámica de n filas por m columnas, las cuales serán definidas por el usuario. Para ello, con el puntero doble creado en los atributos, creamos un vector de apuntadores que servirá como nuestras filas, y en cada espacio de este vector, se crean los arreglos de m espacios (columnas). Líneas 21-24 de la Figura 3.

Posterior a ello, con ayuda de un ciclo anidado for, llenamos los espacios creados anteriormente con valores de cero, inicializando nuestra matriz a un valor especifico.

[pic 6]
Figura 4. Método Ver Matriz

Para este método, usamos un ciclo anidado for, el cual pasara por las filas y posterior por las columnas de nuestra matriz el cual imprime el valor que cada espacio guarda en la matriz.

[pic 7]
Figura 5. Destructor de la clase MATRIZ

Recordemos, que el destructor se activa una vez que se hayan realizado todas las actividades que declaremos en el main, para ello, en nuestro destructor liberamos el espacio de memoria de nuestra matriz dinámica creada anteriormente.

Una vez que ya contamos con nuestra clase padre, creamos una clase derivada de esta, la cual heredara los atributos y métodos de su clase padre. La diferencia radica en que los métodos tendrán un diferente comportamiento, de ahí el por que el uso del virtual. Declaramos las funciones de nuestra nueva clase (derivada de Matriz). Figura 6.

...

Descargar como (para miembros actualizados)  txt (12.8 Kb)   pdf (464 Kb)   docx (142.5 Kb)  
Leer 8 páginas más »
Disponible sólo en Clubensayos.com