tema: herencia en c#. parte i. - udb el salvador€¦ · tema: herencia en c#. parte i. •...

19
1 POO. Guía No. 8 Tema: Herencia en C#. Parte I. Computadora con Visual Studio /Visual C#. Guía Número 8. Dispositivo de almacenamiento o almacenamiento en la nube. La Herencia. Es la capacidad de compartir atributos y métodos entre clases. Es la propiedad que permite definir nuevas clases usando como base clases ya existentes. La nueva clase (clase derivada) hereda los atributos y comportamiento que son específicos de la clase existente. La herencia es una herramienta poderosa que proporciona un marco adecuado para producir software fiable, comprensible, de bajo costo, adaptable y reutilizable. La herencia o relación es-un es la relación que existe entre dos clases, en la que una clase denominada derivada o subclase se crea a partir de otra ya existente, denominada clase base o superclase. Evidentemente, la clase base y la clase derivada tienen código y datos comunes, de modo que si se crea la clase derivada de modo independiente, se duplicaría mucho de lo que ya se ha escrito para la clase base. C# soporta el mecanismo de derivación que permite crear clases derivadas, de modo que la nueva clase hereda todos los datos miembro que pertenecen a la clase ya existente. Facultad: Ingeniería Escuela: Computación Asignatura: Programación Orientada a Objetos Materiales y Equipo Introducción Teórica

Upload: others

Post on 03-Jul-2020

51 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

1 POO. Guía No. 8

Tema: Herencia en C#. Parte I.

• Computadora con Visual Studio /Visual C#.

• Guía Número 8.

• Dispositivo de almacenamiento o almacenamiento en la nube.

La Herencia.

Es la capacidad de compartir atributos y métodos entre clases.

Es la propiedad que permite definir nuevas clases usando como base clases ya existentes.

La nueva clase (clase derivada) hereda los atributos y comportamiento que son específicos de

la clase existente.

La herencia es una herramienta poderosa que proporciona un marco adecuado para producir

software fiable, comprensible, de bajo costo, adaptable y reutilizable.

La herencia o relación es-un es la relación que existe entre dos clases, en la que una clase

denominada derivada o subclase se crea a partir de otra ya existente, denominada clase

base o superclase.

Evidentemente, la clase base y la clase derivada tienen código y datos comunes, de modo que

si se crea la clase derivada de modo independiente, se duplicaría mucho de lo que ya se ha

escrito para la clase base.

C# soporta el mecanismo de derivación que permite crear clases derivadas, de modo que la

nueva clase hereda todos los datos miembro que pertenecen a la clase ya existente.

Facultad: Ingeniería

Escuela: Computación

Asignatura: Programación

Orientada a Objetos

Materiales y Equipo

Introducción Teórica

Page 2: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

2

La declaración de derivación de clases debe incluir el nombre de la clase base de la que se

deriva y el especificador de acceso que indica el tipo de herencia (pública, privada ó protegida).

La primera línea de cada declaración debe incluir la sintaxis siguiente:

class <nombre de clase derivada> : <nombre de clase base>

Tipos de Herencia.

Dependiendo del número de clases y de cómo se relacionen, la herencia puede ser:

a) Simple.

b) Múltiple.

c) De niveles múltiples.

Con independencia del tipo de herencia, una clase derivada no puede acceder a variables y

funciones privadas de su clase base. Para ocultar los detalles de la clase base y de clases y

funciones externas a la jerarquía de clases, una clase base utiliza normalmente elementos

protegidos en lugar de elementos privados.

Herencia Simple.

Cuando sólo se tiene una clase base de la cual hereda la clase derivada, se dice que hay

herencia simple (ver Figura 1.a).

Sin embargo, la herencia simple no excluye la posibilidad de que de una misma clase base se

pueda derivar más de una subclase o clase derivada (Figura 1.b).

(a) (b)

Figura 1. Herencia Simple.

Cuando se necesita representar un concepto general y a partir de éste, conceptos más

específicos, resulta conveniente organizar la información usando herencia.

Clase Base

Clase Derivada

Clase Base

Clase Derivada 1 Clase Derivada 2

Page 3: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

3

Esto permite compartir atributos y métodos ya definidos, evita la duplicidad y, por otra parte,

proporciona mayor claridad en la representación que se haga de la información. Es decir, se

logra un mejor diseño de la solución del problema.

Existen numerosos casos en los cuales se da este tipo de relación.

En la Figura 2 se presentan algunos ejemplos de herencia simple.

(a) (b)

Figura 2. Ejemplos de Herencia Simple.

En la figura 2a, la clase Persona es la clase base y Empleado es la clase derivada. Un objeto

de esta clase también es un objeto de la clase “Persona”, por lo tanto, tendrá los atributos y

métodos de ambas clases.

En la figura 2b, la clase Mamífero es la clase base y Vacuno y Equino son las clases

derivadas. En este caso, se dice que todo “Vacuno” y todo “Equino” también son objetos de la

clase “Mamífero” y en consecuencia tendrán todos los atributos y métodos que heredan de la

clase base.

Los miembros protegidos de la clase base podrán ser usados por los métodos de las clases

derivadas, pero no por sus clientes.

Los miembros públicos estarán disponibles para los métodos de las clases derivadas y para

todos sus clientes.

class Base

{ private:

// Miembros declarados en la sección privada: accesibles sólo para miembros de esta clase

protected:

/* Miembros declarados en la sección protegida: accesibles sólo para miembros de esta

clase y de sus derivadas */

public:

// Miembros declarados en la sección pública: accesibles para todos

};

Persona

Empleado

Mamífero

Vacuno Equino

Page 4: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

4

Para declarar una clase derivada de una clase previamente definida se utiliza la siguiente

sintaxis:

class Base

{ // Declaración de atributos y métodos de la clase Base

};

// Relación de herencia pública entre las clases Base y Derivada

class Derivada :Base

{ // Declaración de atributos y métodos de la clase Derivada

};

Si se utilizara un constructor con parámetros se debe declarar en la clase “base” y en la

“derivada” sus respectivos constructores. En el constructor de la clase derivada, se especifican

qué parámetros recibe de la base. Esto es gracias a la palabra reservada Base.

Para ello se utiliza la siguiente sintaxis:

public Derivada (parámetros) : base (parámetros propios de la clase Base)

{ // Cuerpo del constructor de la clase Derivada

}

Cuando se declara un objeto del tipo de la clase derivada se invoca al constructor de ésta. De

este constructor lo primero que se ejecuta es la llamada al constructor de la clase base, y

posteriormente se ejecutan sus propias instrucciones.

En cuanto a los parámetros, al invocar al constructor de la clase base se le deben proporcionar

los parámetros que necesita para asignar valores a los atributos propios de la clase base y que

la clase derivada hereda.

En el cuerpo de la clase derivada se harán las asignaciones correspondientes a los atributos

propios de esta clase.

Herencia Múltiple (No aceptada en C#)

La herencia múltiple no es admitida en C#, sin embargo algunos lenguajes de POO sí la

permiten, en el tipo de herencia múltiple se usan dos o más clases base para derivar una

Page 5: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

5

clase. Es decir, la clase derivada comparte los atributos y los métodos de más de una clase

(ver Figura 3).

Figura 3. Herencia Múltiple.

Herencia de Niveles Múltiples.

Se presenta cuando una clase derivada se usa como base para definir otra clase derivada. Es

decir, existen diferentes niveles de herencia: en el primero, la clase derivada hereda los

miembros de una clase base, mientras que en el segundo, la clase derivada funciona a su vez

como una clase base y de esta forma comparte con una tercera clase sus propios miembros y

los que heredó (ver Figura 4). Esta relación puede extenderse a tantos niveles como lo

requiera el problema que se esté resolviendo.

Figura 4. Herencia de niveles múltiples.

Este tipo de herencia es muy útil cuando es necesario representar, a partir de conceptos

generales, conceptos más específicos. Cuantos más niveles se deriven, mas especificidad se

definirá.

La figura 5 presenta un ejemplo de herencia de múltiples niveles. El nivel superior representa la

clase más general, la clase “Árbol”. Luego, la clase “Frutal” es una clase derivada de la

primera, lo cual indica que los frutales son una clase más específica de árboles. Por último, se

Clase Base 1 Clase Base 2

Clase Derivada

Clase Base

Clase Derivada 1

Clase Derivada 1.1

Clase derivada de Clase Base. A su vez es la clase base de Clase Derivada 1.1

Page 6: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

6

define la clase Cítrico como una subclase de la clase “Frutal”. Esta relación también indica que

los cítricos son una variante, una clase más específica, de los árboles frutales.

Figura 5. Ejemplo de herencia de niveles múltiples.

Herencia en formularios

Los formularios por ser clases dentro de C# pueden utilizarse en herencia, esto permitirá

realizar herencia entre ellos y diseñar aspectos comunes en un formulario padre y luego

heredarlo a sus formularios hijos. La única restricción que debemos recordar es el orden de

ejecución de los constructores.

Un formulario que será padre de otro formulario debe haber ejecutado su constructor

previamente, por lo cual habrá que ejecutar el programa para que su constructor se

ejecute junto con él; de esa manera estará habilitado para ser padre.

Ejemplo 1:

Se muestra un ejemplo más a nivel didáctico de Herencia simple. El objetivo es verificar

que se pueden compartir elementos entre clases y para ello se realiza la implementación

de la jerarquía de clases mostrada en la siguiente figura:

Procedimiento

Bibliografía

Guía 1

Árbol

Frutal

Cítrico

Operación

Sumar Restar Multiplicar

Page 7: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

7

Los valores son propiedad de la clase principal y cada clase derivada implementa un método

llamado operar.

Clase OPERACION

Clase Sumar

Clase Restar

Page 8: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

8

Clase Multiplicar

Cree un formulario similar al de la imagen

En cada botón de operación crearemos una instancia de la clase correspondiente

Page 9: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

9

Ejemplo 2:

El ejemplo anterior nos mostraba de una manera muy sencilla el manejo de herencia; sin

embargo, en el entorno gráfico podría tener mayor utilidad al evitarnos trabajar con diseños de

diferentes formularios de forma separada, podríamos dar la forma deseada a un formulario y

llevar esa programación a otros.

Realizaremos una herencia entre formularios para que compartan formatos, esta herencia

tendrá la siguiente jerarquía.

Realice el Formulario base bajo la apariencia que usted desee, configure color de fondo, tipo

de letra, sin bordes u otros elementos visuales que le gustaría que se reproduzcan en el resto

de formularios.

Agregue un botón de salir. La imagen es únicamente una referencia

Base

Menú

Registro

Docente

Registro

Registro

Estudiante

Page 10: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

10

La propiedad Modifiers del botón (y de todos los objetos que desea compartir entre

formularios) debe estar en protected, caso contrario, aunque los demás formularios lo

reciban no podrán manipularlo o personalizarlo.

Programamos el evento click para el botón salir que será utilizado por el resto de formularios.

NOTA IMPORTANTE:

Recuerde que es necesario ejecutar el programa para que el constructor esté habilitado para ser padre

de otro formulario.

Ahora crearemos un formulario plantilla para los registros, puede heredarse de dos formas:

Utilizando formularios heredados directamente, para ello al crear un nuevo formulario seleccionamos

Windows Form y la opción Formulario Heredado o en su versión en inglés Inherited Form

Page 11: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

11

Nos mostrará un listado de todos los posibles padres para nuestro formulario (para que los

formularios estén disponibles como padres, sus constructores debieron ser ejecutados

previamente, sino no aparecen en la lista)

Otra forma de realizarlo es escribiendo directamente en el formulario el operador : y el nombre

del formulario del cual deseo heredar

Page 12: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

12

Veremos que en el formulario registro recibimos el mismo fondo, tipo de letra y el botón

heredado de la base, ahora trataremos de darle una forma similar a la imagen

Ahora este formato que hemos creado fácilmente se puede heredar a otros formularios,

en nuestro caso el formulario de registro de docentes y estudiantes, así que realizaremos

herencia hacia esos formularios y verá que recibe exactamente el mismo formato que a su

vez puede personalizarse más como en la imagen.

Page 13: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

13

Si nota todos aquellos elementos que no le pertenecen directamente al formulario, son

indicados por un cuadro pequeño en la esquina superior izquierda, estos formularios

reciben objetos del formulario registro, el cual a su vez recibió el botón salir del formulario

base.

Page 14: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

14

Ahora trabajaremos el formulario menú que heredará directamente de la base y haremos

que pueda llamar a los registros de estudiante y docente.

El menú puede lucir similar a la imagen.

En el menú, programamos los botones para llamar a los formularios de registro de

estudiantes y docentes.

Ahora el único inconveniente es que esos formularios dejan al menú en segundo plano y

el botón de salir solamente cierra el formulario donde se encuentre, pero no detiene la

aplicación por completo, así que en los formularios Registro Docente y Registro

Estudiante programaremos el evento FormClosed

Page 15: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

15

Aquí decimos qué queremos que ocurra una vez haya sido cerrado el formulario. En

ambos casos se programará Application.Exit();

Finalmente modificamos Program.cs para que el primer formulario que se ejecute sea el

Menú

En este caso, aunque en nuestra herencia hay 5 formularios involucrados, sólo veremos 3

en pantalla: el menú, el registro docente y el registro de estudiantes.

Ejemplo 3:

Se muestra un ejemplo de Herencia simple en entorno consola. Se realiza la

implementación de la jerarquía de clases mostrada en la siguiente figura:

La cual corresponde a una Papelería que maneja esos dos tipos de Productos, papeles y

utensilios, se reutilizan elementos comunes de la clase principal y se combinan con los

propios de cada clase derivada.

Papeles Utensilios

Producto

Page 16: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

16

CLASE PRODUCTO

CLASE PAPELES

Page 17: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

17

CLASE UTENSILIOS

CLASE PROGRAM

Page 18: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

18

Ejercicio 1:

Basados en el ejercicio 3 en consola, se le pide que lo modifique de forma que funcione en

entorno gráfico, respete los atributos asociados a cada clase y su estructura de herencia.

Ejercicio 2:

Programe la funcionalidad del resto de botones para el formulario de registro de estudiante y

de docente y que puedan llenarse los datagridview que se encuentran en la parte inferior de

los formularios.

Ejercicio 3:

Construya una solución para la jerarquía de clases mostrada en la siguiente figura:

EN ENTORNO GRÁFICO desarrolle:

Para la clase Estudiante, considere los atributos: número de carnet, nivel de estudios.

Para la clase Universitario considerar los atributos: nombre de la universidad, carrera, materias

inscritas, notas, CUM.

Desarrollo de habilidades

Bibliografía

Guía 1

Persona

Empleado

Universitario

Ingeniería

Estudiante

Page 19: Tema: Herencia en C#. Parte I. - UDB El Salvador€¦ · Tema: Herencia en C#. Parte I. • Computadora con Visual Studio /Visual C#. • Guía Número 8. • Dispositivo de almacenamiento

POO104. Guía No. 8

19

Para la clase Ingeniería considerar los atributos: nombre del proyecto, total de horas (duración

de la pasantía), número de horas completadas.

La solución se debe manejar a través de un menú (botones, opciones, combobox u otros) que

permita realizar las siguientes acciones:

a) Crear los objetos de tipo Ingeniería, solicitando los datos al usuario.

b) Verificar que universidad proporciona la mayoría de estudiantes de ingeniería

c) Visualizar el promedio de notas de los estudiantes

d) Salir de la aplicación.

Ejercicio 1:

Considere la siguiente jerarquía de herencias del transporte disponible que tiene una

Compañía turística:

Definir las clases. Decidir que atributos y métodos incluir en cada clase de tal manera que su

programa pueda realizar como mínimo las siguientes acciones:

a) Crear objetos de cualquier tipo de las clases finales (carro, helicóptero, crucero),

solicitando los datos al usuario.

b) Verificar qué opciones de transporte terrestre se tienen para la realización de un viaje

de fin de semana.

c) Reservar un vehículo y si estuviera ocupado, enviarme un mensaje de que no está

disponible.

d) Salir de la aplicación.

Investigación Complementaria

Guía 3

Guía 4

fía Vehiculo

Terrestre Aéreo

Carro

Marítimo

Helicóptero Lancha