Lectura - Departamento de Computación

Anuncio
Lectura
HERENCIA
Fuente: JOYANES A. y ZAHONERO, M. (2002)
La mayoría de las personas ven el mundo como un conjunto de objetos que están
relacionados entre sí de modo jerárquico (Figura 1, Animal, Mamifero, Perro). Si se
desea describir animales de un modo abstracto, se deben indicar algunos atributos tales
como tamaño, peso, raza y nombre. Los animales tienen ciertos aspectos de
comportamiento; ellos comen, duermen y saltan. Esta descripción de los atributos y los
comportamientos es la definición de la clase Animal. Si se desea describir una clase más
específica de animales, tales como Mamiferos, tendrán más atributos específicos, tales
como tipos de dientes y glándulas mamarias. Esta clase se conoce como una s u b c l a s e
de Animal, y los animales se conocen como s u p e r c l a s e de Mamiferos. Esta subclase
hereda todos los atributos de cada uno de sus ascendientes en la j e r a r q u í a d e
clases.
Animal
Mamifero
Perro
Figura 1. Jerarquía de clases. Herencia
Fuente: Deitel & Deitel. (1999)
Al crear una clase nueva, en lugar de escribir datos miembro y funciones miembro
totalmente nuevos, el programador puede indicar que la nueva clase deberá heredar los
datos miembro y las funciones miembro de una c l a s e b a s e (s u p e r c l a s e , c l a s e
m a d r e ) ya definida con anterioridad. La nueva clase se conoce como c l a s e d e r i v a d a
(s u b c l a s e , c l a s e h i j a ). Cada clase derivada en sí misma se vuelve candidata a ser
clase base de otra clase base posterior. En la h e r e n c i a s i m p l e , una clase se deriva a
partir de una clase base. En la h e r e n c i a m ú l t i p l e , una clase derivada hereda de varias
clases base (posiblemente no relacionadas entre ellas). La herencia simple es directa. La
herencia múltiple es complicada y tiene tendencia a los errores, el programador debe ser
cuidadoso al utilizarla.
Una clase derivada puede agregar datos miembro y funciones miembro propias, por lo
que puede ser mayor que su clase base. Una clase derivada es más específica que su clase
base y representa un grupo de objetos más pequeño. La fuerza real de la herencia
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003.
2
Herencia
proviene de la capacidad de definir en la clase derivada, adiciones, sustituciones y
refinaciones a las características heredadas de la clase base.
La Figura 2 muestra un ejemplo de herencia simple, la clase Empleado hereda propiedades
y comportamientos de la clase base Persona.
Clase base Persona
Persona
String nombre
String direccion
int codPostal
long int telefono
Persona()
entradaPersona()
impPersona()
Clase derivada Empleado
Empleado
String nombre
String direccion
int codPostal
long int telefono
entradaPersona()
impPersona()
dependientes
periodoTrabajado
revPeriodo()
Figura 2. Herencia simple
C++ ofrece tres tipos de herencia: public, protected y private. Con la herencia
public, todos los objetos de una clase derivada también pueden considerarse como
objetos de la clase base de dicha clase derivada. Sin embargo lo opuesto no es cierto: los
objetos de la clase base no son objetos de la clase derivada de dicha clase base. Esta
relación “objeto de clase derivada es objeto de la clase base” se aprovecha frecuentemente
para realizar algunas interesantes manipulaciones.
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003.
3
Herencia
ESTRUCTURA DE LA HERENCIA
Cuando se hereda se pueden reutilizar las clases existentes o añadirle funcionalidad a las
clases existentes, creando, por lo tanto, clases más poderosas. El proceso de heredar una
clase de otra se llama derivación o también extensión. Esto es, cuando se hereda una
clase de otra, se deriva la nueva clase a partir de la clase original, o también se dice que la
nueva clase es una extensión de la clase original.
El conjunto completo de clases derivadas, desde la clase base, hasta todas sus clases
derivada, es llamado J era rqu í a de l a he renc ia . Como sucede con los rasgos familiares,
las jerarquías de herencia pueden contener varias capas. Por ejemplo una clase madre
llamada Persona puede producir tres clases hijas llamadas Empleado, Cliente y
Vendedor. La clase Empleado puede ser usada por sí misma para derivar dos clases más,
Planta y Eventual. La clase Eventual también puede ser usada para derivar dos clases
más llamadas TiempoParcial y TiempoCompleto, como se muestra en la Figura 3:
Persona
Empleado
Cliente
DePlanta
Vendedor
Eventual
TiempoParcial
TiempoCompleto
Figura 3. Jerarquía de Clases
Corregir esta figura faltan las flechas usar UML
La jerarquía de herencia anterior, consiste en herencia simple. En las jerarquías de
herencia simple una clase derivada tiene una y solo una madre.
Fuente: BISHOP Judy. (1999)
Con la herencia nos concentramos en definir una clase que conocemos bien y dejamos
abierta la opción de definir más tarde versiones nuevas de ella. Estas versiones heredarán
las propiedades y las características de la clase original, y por tanto pueden ser más
pequeñas y más limpias. De esta manera construimos jerarquías de clases y podemos
enfocar al nivel adecuado los cambios y los añadidos. Como todas las clases de la
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003.
4
Herencia
jerarquía pertenecen a la misma familia, todas ellas tienen el mismo tipo en el mecanismo
de tipos de Java, y se puede usar una de ellas donde podría requerirse la otra.
Fuente: GREG, Perry. (1993)
En los departamentos de procesamiento de datos por todo el mundo, todo el tiempo se
están diseñando y escribiendo programas nuevos. Cuando escriben programas nuevos, los
programadores usan con frecuencia el código de programas existentes. Aunque el
proceso de copiar y pegar da lugar a errores, usar partes del código fuente de programas
existentes es más rápido que la reescritura de todo ese código a partir de cero.
Por ejemplo un programa de personal puede llevar cuenta de los empleados de planta y
eventuales. Estos dos tipos de empleados tienen información similar (nombre, dirección,
número de teléfono, edad, etcétera), pero con algunas diferencias, como la determinación
de sus pagos, por ejemplo. Estos empleados también comparten características con las
variables de personas que ya están codificadas para los clientes en otros programas.
Mediante la herencia, la OOP ayuda a que los individuos y compañías produzcan código
más rápido al quitarle al programador
muchos de los detalles de la reutilización del
código, permitiéndole al mismo tiempo, que sean usadas parte de un programa en otro.
Las estructuras de datos no son el único tipo de elemento de programación del que se
puede heredar. Se pueden heredar ventanas, botones, pantallas, gráficos y muchas cosas
más. Se puede heredar cualquier cosa que pueda ser representada como un objeto.
La herencia evita el problema de cortar y pegar código de una parte de un programa a otro
cuando se quieren compartir partes de programas. También la herencia hace que el
código este libre de definiciones de datos y código duplicados.
HERENCIA EN JAVA
En Java, la clase de la que se hereda se denomina s u p e r c l a s e . La clase derivada de la
superclase se denomina s u b c l a s e . A veces una superclase se conoce también como
c l a s e p a d r e o c l a s e b a s e . Y una subclase se conoce como c l a s e h i j a , c l a s e
e x t e n d i d a o c l a s e d e r i v a d a . Se pueden reutilizar o cambiar los métodos de la
superclase y se pueden añadir nuevos datos y nuevos métodos en las subclases.
Java soporta el mecanismo de extensión (extend), que permite crear clases derivadas o
clases que son extensión de otra clase, de modo que la nueva clase hereda todos los
miembros datos y métodos que pertenecen a la clase base ya existente.
Java no soporta la herencia múltiple. En Java existe la restricción de que una clase puede
extender a una sola clase. Sin embargo, una misma clase puede implementar varias
i n t e r f a c e s , con lo que se obtiene un efecto semejante.
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003.
Herencia
5
Referencias:
BISHOP Judy. (1999). Java Fundamentos de Programación
DEITEL & Deitel. (1999). C++ como programar. Segunda Edición. Prentice may. Pág. 520.
JOYANES A. y ZAHONERO, M. (2002). Programación en Java 2. Algoritmos, Estructuras de
Datos y Programación Orientada a Objetos. Mc Graw Hill. Pág. 72
GREG, Perry. (1993). Aprendiendo Programación Orientada a Objetos con Turbo C++ en
21 Días. Prentice Hall Hispanoamericana, S.A. Pág. 446
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 2003.
Descargar