Anda di halaman 1dari 14

Programacin II. Gua No.

8 1

Facultad: Ingeniera
Escuela: Computacin
Asignatura: Programacin II

Tema: Herencia en C#.

Objetivos

Crear clases a travs de la herencia de clases existentes.


Describir la manera en que la herencia promueve la reutilizacin de software.
Diferenciar entre los tipos de herencia
Implementar programas en C# que utilicen la caracterstica de la herencia.

Materiales y Equipo

Computadora con Visual Studio 2013. Visual C#.


Gua Nmero 8.
Dispositivo de almacenamiento o almacenamiento en la nube.

Introduccin Terica

La Herencia.
Es la capacidad de compartir atributos y mtodos 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 especficos 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 relacin es-un es la relacin 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.
2 Programacin II. Gua No. 9

Evidentemente, la clase base y la clase derivada tienen cdigo y datos comunes, de modo que
si se crea la clase derivada de modo independiente, se duplicara mucho de lo que ya se ha
escrito para la clase base.
C# soporta el mecanismo de derivacin que permite crear clases derivadas, de modo que la
nueva clase hereda todos los datos miembro que pertenecen a la clase ya existente.

La declaracin de derivacin 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 (pblica, privada protegida).
La primera lnea de cada declaracin debe incluir la sintaxis siguiente:
class <nombre de clase derivada> : <nombre de clase base>

Tipos de Herencia.
Dependiendo del nmero de clases y de cmo se relacionen, la herencia puede ser:
a) Simple.
b) Mltiple.
c) De niveles mltiples.
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 jerarqua de clases, una clase base utiliza normalmente elementos
protegidos en lugar de elementos privados.

Herencia Simple.
Cuando slo 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 ms de una subclase o clase derivada (Figura 1.b).

Clase Base Clase Base

Clase Derivada Clase Derivada 1 Clase Derivada 2

(a) (b)
Figura 1. Herencia Simple.
Programacin II. Gua No. 9 3

Cuando se necesita representar un concepto general y a partir de ste, conceptos ms


especficos, resulta conveniente organizar la informacin usando herencia.
Esto permite compartir atributos y mtodos ya definidos, evita la duplicidad y, por otra parte,
proporciona mayor claridad en la representacin que se haga de la informacin. Es decir, se
logra un mejor diseo de la solucin del problema.
Existen numerosos casos en los cuales se da este tipo de relacin.
En la Figura 2 se presentan algunos ejemplos de herencia simple.

Persona Mamfero

Empleado Vacuno Equino

(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 tambin es un objeto de la clase Persona, por lo tanto tendr los atributos y
mtodos de ambas clases.
En la figura 2b, la clase Mamfero es la clase base y Vacuno y Equino son las clases
derivadas. En este caso, se dice que todo Vacuno y todo Equino tambin son objetos de la
clase Mamfero y en consecuencia tendrn todos los atributos y mtodos que heredan de la
clase base.

Los miembros protegidos de la clase base podrn ser usados por los mtodos de las clases
derivadas, pero no por sus clientes.
Los miembros pblicos estarn disponibles para los mtodos de las clases derivadas y para
todos sus clientes.
class Base
{ private:
// Miembros declarados en la seccin privada: accesibles slo para miembros de esta clase
protected:
/* Miembros declarados en la seccin protegida: accesibles slo para miembros de esta
clase y de sus derivadas */
4 Programacin II. Gua No. 9
public:
// Miembros declarados en la seccin pblica: accesibles para todos
};

Para declarar una clase derivada de una clase previamente definida se utiliza la siguiente
sintaxis:
class Base
{ // Declaracin de atributos y mtodos de la clase Base
};
// Relacin de herencia pblica entre las clases Base y Derivada
class Derivada :Base
{ // Declaracin de atributos y mtodos de la clase Derivada
};

Si se utilizara un constructor con parmetros se debe declarar en la clase base y en la


derivada sus respectivos constructores. En el constructor de la clase derivada, se especifican
qu parmetros recibe de la base. Esto es gracias a la palabra reservada Base.
Para ello se utiliza la siguiente sintaxis:
public Derivada (parmetros) : base (parmetros 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 parmetros, al invocar al constructor de la clase base se le deben proporcionar
los parmetros 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 harn las asignaciones correspondientes a los atributos
propios de esta clase.

Herencia Mltiple (No aceptada en C#)


La herencia mltiple no es admitida en C#, sin embargo algunos lenguajes de POO s la
permiten, en el tipo de herencia mltiple se usan dos o ms clases base para derivar una
Programacin II. Gua No. 9 5
clase. Es decir, la clase derivada comparte los atributos y los mtodos de ms de una clase
(ver Figura 3).

Clase Base 1 Clase Base 2

Clase Derivada

Figura 3. Herencia Mltiple.

Herencia de Niveles Mltiples.


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 relacin puede extenderse a tantos niveles como lo
requiera el problema que se est resolviendo.

Clase Base

Clase Derivada 1 Clase derivada de Clase Base.


A su vez es la clase base de
Clase Derivada 1.1

Clase Derivada
1.1

Figura 4. Herencia de niveles mltiples.

Este tipo de herencia es muy til cuando es necesario representar, a partir de conceptos
generales, conceptos ms especficos. Cuantos ms niveles se deriven, mas especificidad se
definir.

La figura 5 presenta un ejemplo de herencia de mltiples niveles. El nivel superior representa la


clase ms general, la clase rbol. Luego, la clase Frutal es una clase derivada de la
primera, lo cual indica que los frutales son una clase ms especfica de rboles. Por ltimo, se
6 Programacin II. Gua No. 9
define la clase Ctrico como una subclase de la clase Frutal. Esta relacin tambin indica que
los ctricos son una variante, una clase ms especfica, de los rboles frutales.

rbol

Frutal

Ctrico

Figura 5. Ejemplo de herencia de niveles mltiples.

Procedimiento
Ejemplo 1:
Bibliografa
Se muestra un ejemplo de Herencia simple. Se realiza la implementacin de la jerarqua
de clases mostrada en la siguiente figura:
Gua 1 Operacion

Suma Resta

Los valores son propiedad de la clase principal y cada clase derivada implementa un mtodo
llamado operar.

Clase OPERACION
Programacin II. Gua No. 9 7
Clase SUMA

Clase RESTA

Clase PROGRAM
8 Programacin II. Gua No. 9
Ejemplo 2:
Se muestra un ejemplo de Herencia simple. Se realiza la implementacin de la jerarqua
de clases mostrada en la siguiente figura:
Producto

Papeles Utensilios

La cual corresponde a una Papelera 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.
CLASE PRODUCTO
Programacin II. Gua No. 9 9
CLASE PAPELES

CLASE UTENSILIOS
10 Programacin II. Gua No. 9
CLASE PROGRAM

Ejemplo 3:

Se realiza la implementacin de la jerarqua de clases mostrada en la siguiente figura


(Herencia mltiples niveles):
Persona

Trabajador

Secretaria

Para ello se define una clase Persona y se usa como clase base para definir la clase
Trabajador, esta a su vez es clase base para Secretaria. Los objetos que sean del tipo
Programacin II. Gua No. 9 11
Secretaria tendrn los atributos de esta clase (por ejemplo Salario), adems de los atributos
heredados de la clase Persona.

Clase PERSONA

Clase TRABAJADOR

Clase SECRETARIA
12 Programacin II. Gua No. 9

Clase PROGRAM

Anlisis de Resultados

Bibliografa
Ejercicio 1:
Por qu se puede tener el mtodo calcular en las dos clases derivadas? Qu ocurre si
Gua
declaro 1
el mtodo en la clase principal? Explicar el por qu

Ejercicio 2:
Modifique el ejemplo 3 de forma que se puedan ingresar los datos de la secretaria y que se le
pueda aumentar dependiendo del salario actual o de los aos laborados. Aumento si salario es
menor o igual a 400, tambin hay aumento si tiene ms de 4 aos laborados.
Programacin II. Gua No. 9 13
Ejercicio 3:
Construya una solucin para la jerarqua de clases mostrada en la siguiente figura:

Persona

Empleado Estudiante

Universitario

Ingeniera

Para la clase Estudiante considerar los atributos: nmero de carnet, nivel de estudios.
Para la clase Universitario considerar los atributos: nombre de la universidad, carrera, materias
inscritas, notas, CUM.
Para la clase Ingeniera considerar los atributos: nombre del proyecto, total de horas (duracin
de la pasanta), nmero de horas completadas.
La solucin se debe manejar a travs de un men que permita realizar las siguientes acciones:
a) Crear los objetos de tipo Ingeniera, solicitando los datos al usuario.
b) Verificar que universidad proporciona la mayora de estudiantes de ingeniera
c) Visualizar el promedio de notas de los estudiantes
d) Salir de la aplicacin.

El men deber estar siempre activo, en la misma posicin en pantalla, hasta que el usuario
seleccione la opcin salir.
El programa debe estar debidamente comentado.
14 Programacin II. Gua No. 9

Investigacin Complementaria

Ejercicio 1:
Gua 3
Considere la siguiente jerarqua de herencias del transporte disponible que tiene una
Compaa turstica:
Gua 4

fa Vehiculo

Terrestre Areo Martimo

Carro Helicptero Lancha

Definir las clases. Decidir que atributos y mtodos incluir en cada clase de tal manera que su
programa pueda a travs de un men realizar como mnimo las siguientes acciones:
a) Crear objetos de cualquier tipo de las clases finales (carro, helicptero, crucero),
solicitando los datos al usuario.
b) Verificar que opciones de transporte terrestre se tienen para la realizacin de un viaje
de fin de semana.
c) Reservar un vehculo y si estuviera ocupado, enviarme un mensaje de que no est
disponible.
d) Salir de la aplicacin.

La compaa solo cuenta con 1 helicptero, 2 lanchas y 10 carros. El men deber estar
siempre activo, en la misma posicin en pantalla, hasta que el usuario seleccione la opcin
salir. El programa debe estar debidamente comentado.

Ejercicio 2:
Investigue cmo pueden ser mejorados los ejercicios de esta gua por medio de virtual,
abstract, override e implemente cambios en al menos uno de ellos, utilizando cualquiera de
esos elementos.

Anda mungkin juga menyukai