Está en la página 1de 10

Instituto Tecnológico Superior de Tamazunchale

ACTIVIDAD
RESUMEN UNIDAD 3

Nombre del alumno :


Alan Eduardo Martinez Marcos 22ISC031
Docente: ING. IVÁN HERNÁNDEZ HERNÁNDEZ
Materia: PROGRAMACIÓN ORIENTADA A OBJETOS
Carrera: Ingeniería en Sistemas Computacionales
Aula: E1 Segundos semestre turno: matutino
Unidad 3 Herencia
3.1 Definición: Clase base y Clase derivada

La herencia es una propiedad esencial de la Programación Orientada a Objetos que


consiste en la creación de nuevas clases a partir de otras ya existentes. Este término ha
sido prestado de la Biología donde afirmamos que un niño tiene la cara de su padre, que
ha heredado ciertas facetas físicas o del comportamiento de sus progenitores.

La herencia es la característica fundamental que distingue un lenguaje orientado a


objetos, como el C++ o Java, de otro convencional como C, BASIC, etc. Java permite
heredar a las clases características y conductas de una o varias clases denominadas
base. Las clases que heredan de clases base se denominan derivadas, estas a su vez
pueden ser clases bases para otras clases derivadas. Se establece así una clasificación
jerárquica, similar a la existente en Biología con los animales y las plantas.

La herencia ofrece una ventaja importante, permite la reutilización del código. Una vez
que una clase ha sido depurada y probada, el código fuente de dicha clase no necesita
modificarse. Su funcionalidad se puede cambiar derivando una nueva clase que herede
la funcionalidad de la clase base y le añada otros comportamientos. Reutilizando el
código existente, el programador ahorra tiempo y dinero, ya que solamente tiene que
verificar la nueva conducta que proporciona la clase derivada.

La programación en los entornos gráficos, en particular Windows, con el lenguaje C++,


es un ejemplo ilustrativo. Los compiladores como los de Borland y Microsoft proporcionan
librerías cuyas clases describen el aspecto y la conducta de las ventanas, controles,
menús, etc. Una de estas clases denominada TWindow describe el aspecto y la conducta
de una ventana, tiene una función miembro denominada Paint, que no dibuja nada en el
área de trabajo de la misma. Definiendo una clase derivada de TWindow, podemos
redefinir en ella la función Paint para que dibuje una figura. Aprovechamos de este modo
la ingente cantidad y complejidad del código necesario para crear una ventana en un
entorno gráfico. Solamente, tendremos que añadir en la clase derivada el código
necesario para dibujar un rectángulo, una elipse, etc.
En el lenguaje Java, todas las clases derivan implícitamente de la clase base Object, por
lo que heredan las funciones miembro definidas en dicha clase. Las clases derivadas
pueden redefinir algunas de estas funciones miembro como toString y definir otras
nuevas.

Los programadores crean clases base:

Cuando se dan cuenta que diversos tipos tienen algo en común, por ejemplo en el juego
del ajedrez peones, alfiles, rey, reina, caballos y torres, son piezas del juego. Creamos,
por tanto, una clase base y derivamos cada pieza individual a partir de dicha clase base.

Cuando se precisa ampliar la funcionalidad de un programa sin tener que modificar el


código existente.
3.2 Clasificación: Herencia simple y Herencia múltiple

La herencia es un mecanismo que permite la definición de una clase a partir de la


definición de otra ya existente. La herencia permite compartir automáticamente métodos
y datos entre clases, subclases y objetos.

La herencia está fuertemente ligada a la reutilización del código en la POO. Esto es, el
código de cualquiera de las clases puede ser utilizado sin más que crear una clase
derivada de ella, o bien una subclase.
Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que
se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la
segunda indica que se pueden definir nuevas clases a partir de dos o más clases
iniciales. Java sólo permite herencia simple.

Herencia Múltiple

Todos sabemos que la herencia es un mecanismo propio de la programación orientada


a objetos POO. Nos permite crear clases a partir de otra, las cuales las unen vínculos
sumamente estrechos, casi de familia. Es por ello que se llama herencia.

Si buscamos modelar nuestras clases u objetos como propios de la realidad, todos los
conceptos de la orientación a objetos nos serán muy fácil de implementar
mientras programamos.
3.3 Reutilización de miembros heredados

La reutilización de código se refiere al comportamiento y a las técnicas que garantizan


que una parte o la totalidad de un programa informático existente se pueda emplear en
la construcción de otro programa. De esta forma se aprovecha el trabajo anterior, se
economiza tiempo, y se reduce la redundancia.

La manera más fácil de reutilizar código es copiarlo total o parcialmente desde el


programa antiguo al programa en desarrollo. Pero es trabajoso mantener múltiples
copias del mismo código, por lo que en general se elimina la redundancia dejando el
código reusable en un único lugar, y llamándolo desde los diferentes programas. Este
proceso se conoce como abstracción. La abstracción puede verse claramente en las
bibliotecas de software, en las que se agrupan varias operaciones comunes a cierto
dominio para facilitar el desarrollo de programas nuevos. Hay bibliotecas para convertir
información entre diferentes formatos conocidos, acceder a dispositivos de
almacenamiento externos, proporcionar una interfaz con otros programas, manipular
información de manera conocida (como números, fechas, o cadenas de texto).

Para que el código existente se pueda reutilizar, debe definir alguna forma de
comunicación o interfaz. Esto se puede dar por llamadas a una subrutina, a un objeto, o
a una clase.

Como se ha comentado anteriormente la clase descendiente puede añadir sus propios


atributos y métodos, pero también puede sustituir u ocultar los heredados. En concreto:

1. Se puede declarar un nuevo atributo con el mismo identificador que uno heredado,
quedando este atributo oculto. Esta técnica no es recomendable.

2. Se puede declarar un nuevo método de instancia con la misma cabecera que el de la


clase ascendiente, lo que supone su sobreescritura. Por lo tanto, la sobreescritura o
redefinición consiste en que métodos adicionales declarados en la clase descendiente
con el mismo nombre, tipo de dato devuelto y número y tipo de parámetros sustituyen a
los heredados.
3. Se puede declarar un nuevo método de clase con la misma cabecera que el de la clase
ascendiente, lo que hace que éste quede oculto. Por lo tanto, los métodos de clase o
estáticos (declarados como static) no pueden ser redefinidos.

4. Un método declarado con el modificador final tampoco puede ser redefinido por una
clase derivada.

5. Se puede declarar un constructor de la subclase que llame al de la superclase de


forma implícita o de mediante la palabra reservada super.

6. En general puede accederse a los métodos de la clase ascendiente que han sido
redefinidos empleando la palabra reservada super delante del identificador del método.
Este mecanismo sólo permite acceder al método perteneciente a la clase en el nivel
inmediatamente superior de la jerarquía de clases.
3.4 referencia al objeto de la clase base

La jerarquía de clases que describen las figuras planas

Consideremos las figuras planas cerradas como el rectángulo, y el círculo. Tales figuras comparten
características comunes como es la posición de la figura, de su centro, y el área de la figura,
aunque el procedimiento para calcular dicha área sea completamente distinto. Podemos por tanto,
diseñar una jerarquía de clases, tal que la clase base denominada Figura, tenga las características
comunes y cada clase derivada las específicas. La relación jerárquica se muestra en la figura

La clase Figura es la que contiene las características comunes a dichas figuras concretas por
tanto, no tiene forma ni tiene área. Esto lo expresamos declarando Figura como una clase
abstracta, declarando la función miembro area abstract.

Las clases abstractas solamente se pueden usar como clases base para otras clases. No se
pueden crear objetos pertenecientes a una clase abstracta. Sin embargo, se pueden declarar
variables de dichas clases.

En el juego del ajedrez podemos definir una clase base denominada Pieza, con las características
comunes a todas las piezas, como es su posición en el tablero, y derivar de ella las características
específicas de cada pieza particular. Así pues, la clase Pieza será una clase abstracta con una
función abstract denominada mover, y cada tipo de pieza definirá dicha función de acuerdo a las
reglas de su movimiento sobre el tablero.
3.5 Constructores y destructores en clases derivadas

Al instanciar objetos de clases derivadas se inicia una cadena de invocaciones a


constructores en las cuales el constructor de la clase derivada, antes de realizar sus
propias tareas, invoca (ya sea implícita o explícitamente) al constructor de su clase base.
Similarmente, si la clase base fue derivada de otra clase, el constructor de la clase base
debe invocar al constructor de la clase ubicada en el siguiente nivel superior de la
jerarquía, y así sucesivamente. El último constructor invocado en la cadena es el
constructor de la clase Object, cuyo cuerpo se ejecuta primero. El cuerpo del constructor
de la clase derivada se ejecuta al final. El constructor de cada clase base inicializa las
variables de instancia que el objeto de la clase derivada hereda.

Destructores en clases derivadas

Cuando remueve de la memoria un objeto de una clase derivada, el recolector de basura


invoca al destructor del objeto. Esto inicia una cadena de invocaciones a destructores,
en donde el destructor de la clase derivada y los destructores de las clases bases directas
e indirectas se ejecutan en orden inverso al que se ejecutaron los constructores, esto es,
primero se ejecuta el destructor de la clase derivada y al final se ejecuta el destructor de
la clase base ubicada en el nivel superior de la jerarquía. La ejecución de los destructores
debe liberar todos los recursos que el objeto adquirió, antes de que el recolector de
basura reclame la memoria de ese objeto. Cuando el recolector de basura invoca al
destructor de un objeto de una clase derivada, ese destructor realiza su tarea y después
invoca al destructor de la clase base. El proceso se repite hasta que se invoca al
destructor de la clase Object.
3.6 Redefinición de Métodos en clases derivadas

El lenguaje javo permite redefinir miembros de la clase base en las clases derivadas,
pero el compilador emite una advertencia cuando detecta una redefinición. Una
advertencia (warning) es un mensaje del compilador acerca de un posible problema. Sin
embargo, en este caso sí se genera código ejecutable (a diferencia del mensaje de error).
Redefinición de campos. El siguiente ejemplo muestra cómo reutilizar los identificadores
de los campos de la clase base en una clase derivada.
• 3.4 referencia al objeto de la clase base - Programcion. (s. f.).
https://sites.google.com/site/wwwprogramacionorientadacom/34-referencia-al-
objeto-de-la-clase-base
• 3.5 constructores y destructores en clases derivadas - Programcion. (s. f.).
https://sites.google.com/site/wwwprogramacionorientadacom/35-constructores-y-
destructores-en-clases-derivadas
• Unidad 3 Herencia. (s. f.-b). http://fjglez90.blogspot.com/2012/06/unidad-3-
herencia.html

También podría gustarte