19
1 UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION CICLO: 02/ 2013 GUIA DE LABORATORIO #07 Nombre de la Practica: Programación Orientada a Objetos, Implementación de Herencia Lugar de Ejecución: Centro de Computo Tiempo Estimado: 2 horas y 30 minutos Materia: Lenguajes de Programación 1 I. OBJETIVOS Que el estudiante sea capaz de: Evaluar cuando utilizar la Herencia de Objetos dentro de los requerimientos de un Programa Implementar la Herencia gracias a la creación de Clases Principales y Clases Derivadas Implementar correctamente el principio del Polimorfismo Ejemplificar la elaboración de las clases y su implementación en objetos II. INTRODUCCION TEORICA HERENCIA Y POLIMORFISMO El manejo de propiedades, métodos y eventos es sólo el principio de la programación orientada a objetos; las características principales de la POO descansan en la capacidad de los objetos para trabajar en colaboración con otros objetos, y de aprovechar total o parcialmente su funcionalidad mediante la reutilización de código según lo requieran las aplicaciones. A continuación se estudiará los principios que permiten el máximo aprovechamiento del código a través de POO y con sus dos capacidades características: herencia y polimorfismo. Herencia La herencia (inheritance) es un concepto fundamental de la programación orientada a objetos, y consiste en la capacidad de definir clases que sirven como base de otras clases, evitando la redundancia en la definición de elementos como métodos, eventos y propiedades. Hay una clase base y una o varias clases derivadas; las clases derivadas aprovechan todo lo declarado en la clase base, asumiéndolo como suyo y utilizando capacidades que no están codificadas en ellas. Las clases derivadas pueden heredar, e incluso extender, las propiedades, los métodos y los eventos de la clase base. Es posible también que las clases derivadas sustituyan o modifiquen (override) la funcionalidad de los métodos de la clase base.

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

  • Upload
    vutruc

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

1

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS

ESCUELA DE COMPUTACION

CICLO: 02/ 2013

GUIA DE LABORATORIO #07

Nombre de la Practica: Programación Orientada a Objetos, Implementación de Herencia

Lugar de Ejecución: Centro de Computo

Tiempo Estimado: 2 horas y 30 minutos

Materia: Lenguajes de Programación 1

I. OBJETIVOS

Que el estudiante sea capaz de:

• Evaluar cuando utilizar la Herencia de Objetos dentro de los requerimientos de un Programa • Implementar la Herencia gracias a la creación de Clases Principales y Clases Derivadas • Implementar correctamente el principio del Polimorfismo • Ejemplificar la elaboración de las clases y su implementación en objetos

II. INTRODUCCION TEORICA

HERENCIA Y POLIMORFISMO

El manejo de propiedades, métodos y eventos es sólo el principio de la programación orientada a objetos; las características principales de la POO descansan en la capacidad de los objetos para trabajar en colaboración con otros objetos, y de aprovechar total o parcialmente su funcionalidad mediante la reutilización de código según lo requieran las aplicaciones.

A continuación se estudiará los principios que permiten el máximo aprovechamiento del código a través de POO y con sus dos capacidades características: herencia y polimorfismo.

Herencia

La herencia (inheritance) es un concepto fundamental de la programación orientada a objetos, y consiste en la capacidad de definir clases que sirven como base de otras clases, evitando la redundancia en la definición de elementos como métodos, eventos y propiedades. Hay una clase base y una o varias clases derivadas; las clases derivadas aprovechan todo lo declarado en la clase base, asumiéndolo como suyo y utilizando capacidades que no están codificadas en ellas.

Las clases derivadas pueden heredar, e incluso extender, las propiedades, los métodos y los eventos de la clase base. Es posible también que las clases derivadas sustituyan o modifiquen (override) la funcionalidad de los métodos de la clase base.

Page 2: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 2

En Visual Basic, por omisión, todas las clases pueden heredarse.

Las ventajas de la herencia son muchas, pero la principal es que el desarrollador tendrá que escribir y depurar el código sólo una vez, para una clase, y disponer en muchas clases de la misma funcionalidad, estableciendo las referencias adecuadas.

¿Cuándo se debe utilizar la herencia?

La herencia entre clases no debe utilizarse por el simple hecho de que el lenguaje lo permite. La herencia debe planearse; el desarrollador debe pensar cómo han de ser las clases, organizándolas en lo que se conoce como Jerarquía de clases.

Se recomienda una jerarquía de clases cuando entre las clases se presenta una relación de tipo Es-un (is - a); debe evitarse el uso de herencia cuando se trata de relaciones Tiene-un (has - a).

Por ejemplo, una clase que contiene las características de los automóviles en general (Automóviles) tiene mucho que compartirle a una clase que almacena las particularidades de los automóviles deportivos (AutomóvilesDeportivos), pues un automóvil deportivo, antes que ser de tipo deportivo, es un automóvil (is-a). Ahora pregúntese, ¿qué comparte un dueño de un automóvil y un automóvil? Automóviles y DueñosAutomóviles, no comparten rasgos. Las personas que poseen automóviles no se derivan de los automóviles, ni viceversa. Que una persona tenga un (has-a) automóvil, no quiere decir que comparta con éste sus métodos, propiedades y eventos. Imagínese tener que determinar el tipo de transmisión, número de puertas y número de serie que una persona posee. Simplemente, de una cosa no puede derivar la otra.

Se recomienda una jerarquía de clases, obviamente, sólo si el código de una clase brinda alguna funcionalidad que se pueda reutilizar; tratar de heredar aspectos muy particulares que sólo son pertinentes para una clase no tiene sentido.

Inherits (Heredar)

El estatuto Inherits se utiliza para especificar que una clase de nueva creación tiene como base una clase ya existente. La clase nueva es la clase derivada (derived class); la clase ya existente es la clase base (base class).

La sintaxis es la siguiente:

Class NombreClaseDerivada

Inherits NombreClaseBase

End Class

En este caso, la clase derivada dispone de todos los elementos declarados en la clase base.

Page 3: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 3

Notlnheritable (No heredable)

Como ya se menciono, que por omisión todas las clases en Visual Basic pueden heredarse. Habrán ocasiones en que no queramos que una clase pueda heredarse; en tal caso, hay que especificar, al declarar una clase, que ésta no es heredable. La sintaxis para ello es la siguiente:

Notlnheritable Class NombreClase

End Class

En este caso, intentar heredar NombreClase generaría un error (Inherits NombreClase).

Mustlnherit (Debe heredar)

Como sabemos, los objetos son instancias de una clase. Ya se explicaba que no se puede tener acceso a la funcionalidad de una clase sino a través de una instancia de la misma, es decir, de un objeto basado en la clase. Eso es verdadero sólo relativamente.

¿Habrá alguna forma de que podamos disponer de la funcionalidad de una clase sin generar una instancia de la misma?

La respuesta es que sí. Podemos declarar una clase que no pueda instanciarse pero que pueda ser utilizada sólo si se hereda por otra clase. Para hacer eso es necesario especificar el estatuto Mustlnherit.

La sintaxis es la siguiente:

Mustlnherit Class NombreClase

End Class

En este caso, instanciar NombreClase generaría error (Dim Objeto As New NombreClase())

Modificadores de acceso, necesarios para la herencia.

Usted debe determinar el alcance que tendrá su jerarquía de clases, a efecto de restringir el acceso a las clases, de tal manera que sólo puedan heredarlas aquellas porciones de código que deban hacerlo.

Calificar una clase como clase pública (public class), se logra utilizando el modificador de acceso Public al momento de la declaración de la clase. Esto garantiza que todas las clases podrán utilizar la clase todo el tiempo; en este caso, el acceso es abierto.

Page 4: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 4

Si no quiere una clase de acceso abierto, puede restringir el acceso a la clase utilizando los modificadores de acceso Friend y Private.

Tome en cuenta que en una jerarquía de clases el acceso puede heredarse sólo hacia un acceso igual o mayor, nunca menor: una clase con acceso Public no puede heredar una clase Friend o Private, y una clase Friend no puede heredar una Private.

Estatutos auxiliares para el manejo de herencia y polimorfismo

En ocasiones heredamos una clase, pero nos damos cuenta que algunas entidades (métodos, propiedades, eventos) no se ajustan del todo a lo que verdaderamente necesitamos; en resumen, no nos sirven tal y como fueron heredadas. Es posible que pensemos que los elementos heredados son útiles, pero que lo serían más con algunas pequeñas modificaciones.

Dichas modificaciones se realizan en la clase derivada, respecto de las definiciones originales existentes en la clase base.

La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método (override), o de plano remplazarlo por completo (overload). La funcionalidad heredada puede modificarse por otra que sea más indicada para el problema de programación que deseamos resolver; con ello se promueve que la reutilización del código sea flexible y adaptable.

Por omisión, una clase derivada hereda los métodos y propiedades de su clase base. Si necesitamos que una propiedad o método heredado se comporte de manera distinta a como se definió en la clase base, puede ser implementada de forma distinta (overridden) o remplazada (overloaded); esto quiere decir que la herencia sirve hasta donde nosotros deseamos comenzar a hacer modificaciones.

Los estatutos auxiliares de herencia sirven para especificar el grado de modificación que ha de darse entre la clase derivada y la clase base; estos son: Overridable, NotOverridable, Overrides. MustOverride y Overloads.

En cuanto a la clase base hay tres escenarios:

Page 5: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 5

NotOverridable (No reemplazable)

El primer escenario es que la clase base no acepte que su funcionalidad sea modifica sustituida. En ese caso, el estatuto NotOverridable evita que una propiedad o método de una clase base pueda ser sustituido en una clase derivada. Por omisión, los métodos públicos en una clase base son NotOverridable.

Overridable (Reemplazable)

El segundo escenario es que la clase base admita modificaciones o sustituciones a su funcionalidad. El estatuto Overridable establece que una propiedad o método (elemento) de clase base puede ser modificado en su implementación o sustituido en una clase derivada.

MustOverride (Debe reemplazarse)

El tercer escenario es que la modificación a la funcionalidad de la clase base no sólo posible, sino que sea obligatoria. El estatuto MustOverride hace que sea obligatorio hacer variaciones, en la clase derivada, de las propiedades o método de la clase base que han sido heredados.

Del lado de la clase derivada hay dos escenarios, que sólo son posibles si los elementos de la clase base permiten modificaciones en la funcionalidad.

Overrides (Reemplaza)

El primer escenario es cuando la clase base permite que su funcionalidad sea modifica respetando la estructura original del elemento modificado. El estatuto Overrides permite la variación en la clase derivada, de sus propiedades o sus métodos. Esto será siempre y cuando se mantengan los mismos argumentos en el método de la clase base y la clase derivada Overrides sólo permite desarrollar en la clase derivada una implementación distinta de un elemento de la clase base, y no su sustitución por otro que no guarde semejanza.

Overloads (Sobrecarga/Sustituye)

El segundo escenario es que se desee sustituir la funcionalidad, sin necesidad de respetar estructuras o condiciones precedentes.

En ocasiones, además de modificar el comportamiento de los métodos que participan en una relación de herencia, es necesario hacer uso de diferentes argumentos, ya sea porque los que se tienen deben considerar otros tipos de datos, o bien, porque el método que modifica al heredado de la clase base requiere una cantidad distinta de argumentos. En este caso, ya no hablamos de una implementación distinta de lo mismo, sino de dos métodos bastante distintos entre sí que comparten un nombre.

Page 6: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 6

En este último caso, Overrides no sirve pues exige igualdad de argumentos. Para poder lograr nuestro cometido, debemos utilizar Overloads, que indica la sustitución del método de la clase base por otro de la clase derivada, tengan o no relación entre sí. Overloads es la única forma de implementar, bajo un mismo nombre, dos métodos que no coinciden más que en el nombre.

MyBase y MyClass

Se puede utilizar la palabra reservada MyBase para llamar a ejecución a un método de la clase base desde una clase derivada. Esto quiere decir que a) si existe herencia entre dos clases, y b) en la clase derivada se modifica un método, entonces c) es posible mandar llamar a ejecución al método, ya sea en la forma en que se encuentra en la clase base, o en la forma en que se encuentra en la clase derivada misma.

Con MyBase podemos obligar a la aplicación a que utilice un método de la clase base y no de la clase derivada; en caso contrario, es posible que queramos mandar llamar el método tal y como está en la clase derivada. Para ello utilizamos la palabra reservada MyClass, que se encarga de llamar a ejecución un método que se encuentra en la misma clase cuando esta es derivada.

Es importante saber que tanto MyBase como MyClass, aunque en su manejo parecen objetos, realmente no lo son. No se instancian; existen porque el lenguaje los proporciona para un manejo más flexible de la herencia y el polimorfismo.

Polimorfismo

El polimorfismo es la habilidad que tiene el lenguaje para definir múltiples clases que contengan métodos y propiedades del mismo nombre, pero que brindan diferente funcionalidad.

Cuando se presenta el polimorfismo es posible elegir, en tiempo de ejecución, aquellos métodos o propiedades que necesitamos. No importa que varias clases posean los mismos métodos y las mismas propiedades: la aplicación debe ser capaz de utilizar precisamente aquellas cuya funcionalidad estemos invocando.

La herencia y la sustitución de métodos y propiedades tienen mucho que ver con el polimorfismo. Cuando se declara una clase y a partir de ésta se derivan otras clases, estamos ante la presencia de la herencia; si además de esto, los métodos y propiedades de la clase base que fueron heredados son modificados (Overriden) o sustituidos (Overloaded) en la clase derivada, de tal manera que comparten el mismo nombre pero no la misma funcionalidad, estamos ante el polimorfismo. Una manifestación aún más pura del polimorfismos se presenta cuando se utiliza Overloads, que implica una sustitución completa de meto que se encuentran en clases que guardan una relación de herencia.

Cuando en una clase derivada se modifican métodos o propiedades de la clase base, se dice que hay polimorfismo basado en herencia.

Page 7: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 7

III. MATERIALES Y EQUIPO

Para la realización de la guía de práctica se requerirá lo siguiente:

No. Requerimiento Cantidad

1 Guía de Laboratorio 7 de LP1 1

2 PC con Microsoft Visual Studio 2010 .NET instalado 1

3 Memoria USB 1

4 Computadora con acceso a Internet 1

IV. PROCEDIMIENTO

Para esta práctica deberá crear una carpeta con el nombre de “Guia7LP1_SuCarnet”, en la cual va a guardar todos los archivos de esta práctica.

Ejercicio 1. Uso de Herencia

1. Abrir un nuevo proyecto en Visual Basic 2010

2. Colocar como nombre del proyecto: Guia7Ejercicio1

En este ejercicio la aplicación debe calcular los descuentos y el sueldo neto de un empleado. Los datos que necesita son los siguientes: Nombre, sueldo base y horas extras, se conoce que el empleado puede laborar en cualquier turno ya sea mañana o noche y las horas extras se pagan de acuerdo a ese turno (si es en la mañana cada hora extra vale $10 y si el turno es en la noche cada hora extra vale $15), para calcular los descuentos debe tomar en cuenta que: Si el empleado trabaja en la mañana este no tiene seguro de vida, solamente tiene seguro de vida aquel empleado que trabaja en la noche.

Page 8: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 8

Descuentos:

Seguro=Sueldo base *10%

Seguro de vida=Sueldo base *12%

Sueldo Neto:

Sueldo neto= (Sueldo base + horas extras * pago por hora) – descuentos

3. Crear el siguiente diseño del formulario del proyecto

4. Cambiar las propiedades de los controles del formulario, así como se muestra en la siguiente

tabla:

Control Propiedades Name Text Font Enabled ReadOnly

GroupBox1 Datos del Empleado

Microsoft Sans Serif; Negrita; 9

GroupBox2 Descuentos Microsoft Sans Serif; Negrita; 9

GroupBox3 Turno Microsoft Sans Serif; Negrita; 9

Label1 lblnombre Nombre: Label2 lblsueldobase Sueldo Base: $ Label3 lblhorasextras Horas Extras: Label4 lblpagoporhora Pago por hora

extra: $ False

Label5 lblseguro Seguro: $

Page 9: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 9

Label6 lblsegurovida Seguro de Vida: $ Label7 lblsueldoneto Sueldo Neto: $ Microsoft Sans Serif;

Negrita; 9

TextBox1 txtnombre TextBox2 txtsueldobase TextBox3 txthorasextras TextBox4 txtpagoporhora TextBox5 txtseguro True TextBox6 txtsegurovida True TextBox7 txtsueldoneto Microsoft Sans Serif;

Negrita; 9 False

RadioButton1 turnomañana Mañana RadioButton2 turnonoche Noche Button1 btncalcular Calcular Microsoft Sans Serif;

Negrita; 9

Button2 btnsalir Salir Microsoft Sans Serif; Negrita; 9

5. Agregar al proyecto un modulo y colocarle como nombre: Empleado

6. En el modulo Empleado, agregar la siguiente clase:

Page 10: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 10

7. Siempre en el modulo Empleado, agregar la siguiente clase:

8. En el formulario, coloque el siguiente código, a nivel de formulario:

9. En el evento Load del formulario, coloque el siguiente código:

Page 11: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 11

10. En el evento Click del botón btncalcular, coloque el siguiente código:

11. Haga doble clic en el primer control de RadioButton (turnomañana) y coloque el siguiente

código:

12. Haga doble clic en el segundo control de RadioButton (turnonoche) y coloque el siguiente código:

13. En el evento Click del botón btnsalir, coloque el siguiente código:

14. Ejecute la aplicación y realice las pruebas necesarias.

Page 12: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 12

Ejercicio complementario:

1. Coloque las validaciones necesarias en cada una de las entradas de datos

2. Modifique la aplicación, de tal manera solo se tenga un método descuentos, no importa si la clase 2 se queda sin métodos, por el momento.

3. Guardar los datos en un archivo de texto

Ejercicio 2. Uso de Herencia y Polimorfismo

1. Abrir un nuevo proyecto en Visual Basic 2010

2. Colocar como nombre del proyecto: Guia7Ejercicio2

Comprobación del polimorfismo basado en herencia y el uso de MyBase

En este ejercicio se comprobará el polimorfismo basado en herencia; para ello se definen varias clases, se heredarán unas con otras y se verá el uso de la palabra reservada MyBase.

El programa calculará lo que se le pagará a los empleados, partiendo del supuesto que puede haber un pago normal, agregarse más un bono por puntualidad del 25%, e incluso un bono adicional del 20%.

3. Crear el siguiente diseño del formulario:

4. Agregar un modulo al proyecto y tendrá como nombre Module1.vb

Page 13: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 13

5. Edite el Module1.vb de tal forma que aparezca de la siguiente manera:

6. Agregue una clase llamada pago, que será pública.

7. Agregue un método de nombre CalculaPago(), que será público y que devolverá un valor Decimal

8. En el nombre del método es debe agregar el Modificador de herencia Overridable.

9. En este punto, el código del modulo debe lucir de la siguiente manera:

Option Explicit On

Option Strict On

Module Module1

Const BonoPuntualidad As Decimal = 1.25D

'Utilice el carácter de tipo D para forzar

'que los valores sean Decimal

End Module

Public Class Pago

' Cálculo del pago neto

Page 14: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 14

Public Overridable Function CalculaPago() As Decimal

End Function

End Class

10. Coloque como argumentos de CalculaPago() las horas trabajadas y el pago por hora. Complemente el método, a fin de que proporcione un resultado. El procedimiento debe quedar de la siguiente manera:

11. Agregue una clase llamada PagoBonificado, que será pública y que se agregara al modulo que estamos trabajando

12. A esta clase agregue un método de nombre CalculaPago(), que será público y devolverá un valor Decimal

13. Edite el programa y agregue una línea que especifique que la nueva clase hereda la funcionalidad de la clase Pago (Inherits Pago). Aquí se generaría una contaminación de espacios de nombres, dado que Pago ya posee un método llamado CalculaPago(), y al estar heredando su funcionalidad, equivaldría a estar definiendo dos miembros con el mismo nombre, lo cual no es posible. Para evitar el problema, seleccione el método CalculaPago () de PagoBonificado deberá modificarse la propiedad Modificador de herencia asignando un valor Overrides. Dado que se está realizando una operación de reemplazo (overrides), los argumentos del método deben ser exactamente los mismos. La única variante entre los dos procedimientos es que el método CalculaPago() de la clase PagoBonificado retorna el monto a pagar multiplicado por la constante de bono de puntualidad. Seguramente se dio cuenta de que el monto a pagar es un

Page 15: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 15

dato que ya ofrece CalculaPago() de la clase Pago, por lo que se consume el método de la clase base.

14. Cuando haya agregado la opción overrides, codifique lo que hace falte, al final la clase tiene que quedar de la siguiente manera:

15. Agregue una clase llamada PagoBonificadoExtra, que será pública y que se agregara al modulo que estamos trabajando.

16. A la nueva clase agregue un método de nombre CalculoPago(), que será publico y devolverá un valor decimal.

17. Edite el programa y agregue una línea que especifique que la nueva clase hereda la funcionalidad de la clase PagoBonificado. Aquí se generaría una contaminación de espacios de nombres, dado que Pago ya posee un método llamado CalculaPago(), y al estar heredando su funcionalidad, equivaldría a estar definiendo dos miembros con el mismo nombre, lo cual no es posible.

18. Hay otro problema: el nuevo método, además de los beneficios de puntualidad, integrará un beneficio adicional que el usuario podrá especificar, por lo cual el método CalculaPago() no tiene el mismo número de argumentos que CalculaPago() de la clase PagoBonificado, por lo que una operación de remplazo no es posible. Deberá realizarse una operación de sustitución (overload) para que los argumentos del método no necesariamente sean los mismos. Se tiene

que agregar el valor Overload para Modificador de herencia (lo cual tiene mucho sentido si consideramos que la sustitución tiene que ver más con el polimorfismo que con la herencia). La única variante entre los dos procedimientos es que el método CalculaPago() de la clase PagoBonificadoExtra devuelve el monto a pagar multiplicado por la constante de bono de puntualidad (información que ofrece el método CalculaPago () de la clase base), y además le agrega un porcentaje adicional de beneficio.

Page 16: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 16

19. Desarrolle el punto anterior modificando la siguiente clase a su programa, busque la clase PagoBonificadoExtra y verifique que al final le queda el siguiente código:

20. Regrese al formulario, haga clic derecho sobre este y seleccione la opción Ver código y escribir el siguiente código:

21. Ejecute el proyecto y compruebe los valores.

Page 17: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 17

Conclusión del ejercicio:

� Al ejecutarse el programa, se define el valor del bono de puntualidad

� Dentro del formulario se genera una instancia de la clase Pago, una instancia de la clase PagoBonificado y una instancia de PagoBonificadoExtra. La funcionalidad de nuestras clases está disponible a través de las variables objeto que acabamos de definir. Otro dato que se provee es el número de horas por semana sobre las que se calculan los pagos (TextBox1) y el número de Pago por hora (Textbox2).

� En el TextBox3 se consume el método CalculaPago() de la clase Pago, que es la que dio origen al objeto PagoNormal. Se proporcionan como argumentos el número de horas trabajadas (TextBox1) y el pago por hora (TextBox2). El método se encarga de recibir los dos valores, multiplicarlos y devolver el resultado. Es importante observar que este método fue codificado de tal forma que permite su remplazo y sustitución (modificador Overridable).

� En el TextBox4 se consume el método: CalculaPago () de la clase PagoBonificado (la que dio origen al objeto PagoBonificacion. Se proporcionan como argumentos el número de horas trabajadas y el pago por hora. El método se encarga de recibir los dos valores y declara una variable de trabajo a la cual le asigna el valor retornado el método MyBase. CalculaPago(); en virtud de que la clase base es Pago, sería equivalente a ejecutar Pago.CalculaPago(). Se pasan los datos recibidos a MyBase.CalculaPago() y al resultado se le aplica el bono de puntualidad. Es importante notar que la clase hereda la funcionalidad de la clase Pago y

Page 18: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 18

remplaza la implementación del método Pago. CalculaPago (), por lo cual respeta la cantidad y el tipo de los argumentos establecidos en la clase base.

� En el TextBox5 se consume el método CalculaPago () de la clase PagoBonificadoExtra, que es la que dio origen al objeto PagoBonificacionPlus. Se proporcionan como argumentos el número de horas trabajadas el pago por hora y el porcentaje aplicable al pago por buen desempeño. El método se encarga de recibir los tres valores y declara una variable de trabajo la cual le asigna el valor retornado el método MyBase.CalculaPago(), es decir, PagoBonificado.ClaseBase(), a la cual le pasa los datos que necesita. Al resultado le aplica el bono extra. Es importante observar que la clase hereda la funcionalidad de la clase PagoBonificado y sustituye la implementación del método PagoBonificado.CalculaPago(), dado que recibe un numero distinto de argumentos que el mismo método en su clase base.

Conteste las siguientes interrogantes

Parte I. Preguntas

1. ¿Qué es la herencia?

2. ¿En qué casos se recomienda la implementación de la herencia?

3. ¿Cuáles son los estatutos para establecer relaciones de herencia entre clases?

4. Mencione y explique los estatutos auxiliares de herencia y polimorfismo.

5. Mencione un ejemplo de automatización real, en donde pueda usted implementar herencia y

polimorfismo.

Parte II. Subraye la respuesta que considere que responde a la pregunta.

1. Es la habilidad de una clase para servir de base a otra clase, trasladándole su funcionalidad:

a. Herencia

b. Polimorfismo

c. Encapsulamiento

2. Tipo do relación para la que se recomienda la herencia:

a. Has-a

b. Is-a

c. Go-to

Page 19: UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS … · La programación orientada a objetos hace posible que eso suceda, pues permite implementar diferentes comportamientos para un método

Guía # 7: POO: Implementación de Herencia

Lenguajes de Programación 1 19

3. Permite la variación en la clase derivada, de las propiedades y métodos (requiere mantener los

mismos argumentos)

a. Inherits

b. Overrides

c. Overloads

4. Habilidad de un lenguaje para definir clases que se comporten distinto, a pesar de llamarse igual:

a. Herencia

b. Polimorfismo

c. Encapsulamiento

5. Permiten generar un tipo de dato compuesto:

a. Delegados

b. Clases

c. Estructuras

Parte III: Coloque en la línea la letra «F» si el enunciado es falso y «V» si es verdadero.

1. Por omisión, las clases en Visual Basic son Notlnheritable. _____________

2. Si no desea un acceso abierto a su clase puede restringir el acceso al utilizar el modificador Friend.

_________________

3. MyClass se utiliza para llamar a ejecución un método de la clase base. _____________

4. La manifestación más pura del polimorfismo es la utilización de Overloads. _____________

5. Si un automóvil y su dueño fueran objetos, la relación entre ellos seria is - a. _____________

VI. BIBLIOGRAFÍA

• Bill Evjen, Jason Beres y otros (2002), El libro de Visual Basic.NET (1era Ed), España. Editorial Anaya

• Ceballos, Francisco Javier (2006), ENCICLOPEDIA DE MICROSOFT VISUAL BASIC (1er Ed), Mexico, Editorial ALFAOMEGA, ISBN: 9701512189