Está en la página 1de 11

UNIVERSIDAD DEL PEDREGAL.

Entendiendo la Herencia
Nayeli Enid Lozano Camarena
Programacin Orientada a Objetos 11/05/2012

Contenido
Entendiendo la Herencia. .............................................................................................................. 3 OOP y el Modelado conceptual................................................................................................. 3 Herencia, subtipo y especializacin. ......................................................................................... 6 Uso de la herencia en la prctica. ............................................................................................. 7 La herencia como mecanismo de modificacin incremental.................................................... 7 Late binding y self-reference..................................................................................................... 8 Accesando propiedades sobre escritas. .................................................................................... 8 Variaciones de la herencia. ....................................................................................................... 8 Herencia de clases vs herencia de prototipo. ....................................................................... 8 Delegacin vs concatenacin. ............................................................................................... 9 Herencia ordenada vs herencia sin orden............................................................................. 9 Herencia dinmica ............................................................................................................... 10 Herencia selectiva. .............................................................................................................. 10 Herencia mixta. ................................................................................................................... 10 Compartir en tiempo real vs compartir en tiempo de creacin. ............................................ 11 Envo simple vs envo mltiple. ............................................................................................... 11

Entendiendo la Herencia.
Heredar se refiere, en el contexto universal, a recibir propiedades o caractersticas de otro, como resultado de una relacin entre dador y receptor. Sin embargo, en el contexto de la computacin, el concepto se origin como caracterstica principal del lenguaje Simula, aunque fue llamado concatenacin. Tambin son conocidos los sinnimos subclase, derivacin y prefixing. La idea bsica de la herencia es el permitir crear una nueva definicin de objeto basado en un objeto ya existente. Slo aquellas caractersticas que difieren de las propiedades del objeto preliminar, son las que han de definirse explcitamente, mientras que las similares se extraen y se incluyen en la nueva de forma automtica. Las relaciones de herencia son transitivas. Es decir, que un objeto padre o superclase, puede ser hijo de un objeto diferente, heredando sus propiedades a travs de los diferentes niveles.

Algunos sistemas modernos permiten la herencia mltiple, que es heredar de mltiples padres.

OOP y el Modelado conceptual.


La simulacin requiere una gran cantidad de habilidades de modelado conceptual para lograr una clara correspondencia entre el programa y el dominio del problema. El modelado conceptual es el proceso por el que organizamos nuestro conocimiento del dominio en jerarquas para lograr un mejor entendimiento del fenmeno al que nos referimos. La forma en que esto sucede se refiere a principios, conceptos o mecanismos de abstraccin. Existen 4 principios de abstraccin principales: 1. Clasificacin / instanciacin 2. Agregacin / descomposicin

3. Generalizacin / especializacin 4. Agrupacin / individualizacin. La clasificacin es uno de los principios ms importantes. Se refiere a disponer elementos en categoras que representen uniformidad de condiciones, las cuales no han de cambiar en el transcurso del tiempo. La operacin inversa es la instanciacin o ejemplificacin. Este proceso genera instancias que cumplen la descripcin de su clase. La agregacin se refiere a tratar colecciones de conceptos como un nico concepto de alto nivel. Un objeto se compone de otros. La operacin inversa es la descomposicin que se refiere a los componentes individuales de un agregado. Los lenguajes O-O permiten el uso de variables para alojar otros objetos y lograr la construccin de jerarquas complejas. La generalizacin se refiere a la construccin de conceptos que abarcan una serie de caractersticas que comparte similitudes. Esto es, se obtiene la descripcin de una clase ms general que contiene los elementos comunes pero suprime las diferencias detalladas del concepto. La operacin inversa es la especializacin. Se refiere a un objeto Cs que se considera especializacin de C, si las manifestaciones pertenecientes a Cs, tambin pertenecen a C. Pero Cs tambin posee propiedades adicionales ms especficas. La agrupacin es tambin llamada asociacin o particionamiento. Surge por la necesidad de agrupar objetos no por tener las mismas propiedades, sino por describir sus caractersticas como un todo. La OOP permite la agrupacin generando definiciones arbitrarias como listas, sets, bolsas o diccionarios.

Herencia, subtipo y especializacin.


El enfoque clsico de la herencia es que es un mecanismo de jerarquizacin destinado a la especializacin conceptual. Esto es ms complicado de lo que parece. El principal problema nace del hecho de que los sistemas O-O no garantizan que la herencia se use realmente para mostrar la especializacin conceptual. Las operaciones redefinidas de una subclase no siempre soportan la relacin semntica de la operacin sobre-escrita de la superclase. Su nica similitud es llamarse de la misma manera. Convencionalmente, la implementacin de la herencia permite la ilimitada adicin, redefinicin y cancelacin de propiedades en descendencia, por lo que no se puede asegurar que en los niveles ms bajos prevalezcan estas propiedades. Los investigadores han intentado mantener esta correspondencia mediante reglas de compatibilidad. La ms dbil es la cancelacin, que permite que las operaciones sean libremente redefinidas y hasta canceladas en la subclase. El segundo nivel es la compatibilidad de nombres, que permite a las operaciones ser redefinidas pero requiere que la subclase preserve el mismo conjunto de nombres. El tercer nivel es la compatibilidad de firma, que requiere completa compatibilidad sintctica entre las clases y sus subclases. El cuarto nivel, es la compatibilidad de comportamiento, asumiendo que las subclases no deben cambiar el comportamiento de su superclase de forma radical. A pesar de estos conceptos, muchos estudiosos conceptualizan la herencia solo como el mecanismo de bajo nivel por el que las clases comparten comportamientos y datos. Y la especializacin slo a nivel del modelo conceptual. De igual manera encontramos diferencias entre herencia, sub-tipificacin y especializacin.

La Sub-clasificacin permite la reusabilidad de la librera de clases del implementador. Nuevas clases pueden crearse aprovechando las existentes. La Sub-tipificacin permite la reusabilidad de la librera de clases del usuario, por lo que es necesario conocer qu clases pueden ser substituidas por cules otras. Las relaciones de especializacin son importantes para entender la relacin lgica entre los conceptos, por lo que obtiene importancia para la librera del diseador

Uso de la herencia en la prctica.


Herencia para la implementacin se refiere a situaciones en que se tienen propiedades que son adecuadas para la nueva abstraccin en construccin. Esto puede ser ahorro de esfuerzo en la codificacin, de espacio de almacenamiento, rapidez de ejecucin, etc. Herencia por combinacin se refiere a situaciones en las que la herencia se usa para combinar abstracciones ya existentes con herencia mltiple.

Herencia por inclusin se refiere al uso de clases para simular mdulos o libreras de funciones. Aun no se logra concluir cual es el correcto uso de la herencia, a pesar de que su origen ha sido la especializacin conceptual.

La herencia como mecanismo de modificacin incremental


EN el desarrollo de software, una de las condiciones ms importantes del software es su maleabilidad o capacidad para ser modificado, de manera que sea ms fcil que cumpla con las especificaciones solicitadas. Las metodologas tradicionales de programacin no logran adaptarse a este tipo de cambios, por lo que sufren su destruccin o cambios de muy fuerte impacto. Esto crece y se dispersa mientras ms grande y complejo sea el sistema. Para lograr alguna modificacin se recurre a 2 soluciones. La 1ra, modificar el cdigo fuente de una clase para que soporte la nueva funcionalidad. Pero esto puede llevarnos a que ciertos comportamientos no se ajusten a las nuevas requerimientos, causando fallas graves. La 2da, copiar la clase original y renombrarla de acuerdo al nuevo caso. Esto resulta en mayor carga de cdigo, pues muchas veces el cambio es mucho menor en proporcin a la entidad. Tambin puede causar confusin entre el ente original y la copia causando problemas en el mantenimiento. La herencia evita estos problemas la definicin incremental. Es decir, al aadir nuevas propiedades, una clase puede ser extendida, modificada y sometida a las propiedades heredadas de la superclase, pero sta se mantendr igual.

Sin embargo, encontramos un obstculo, la subclase es capaz de redefinir ciertos mtodos para adaptarlos al nuevo requerimiento, pero debido a las referencias al mtodo original en la superclase, ese mtodo se vuelve invlido.

Por esto, habr que redefinir los mtodos de la superclase, aumentando el tiempo y la complejidad del cambio. Por ello se gener un mecanismo llamado late binding, que permite posponer las referencias a las propiedades del objeto hasta el momento de ejecucin, lo que permite manejar estas diferencias en diferentes momentos en el tiempo, segn el contexto que lo invoque.

Late binding y self-reference.


Como resultado de un correcto late-binding, se invoca la identificacin del objeto, durante la ejecucin de la operacin, el auto referencia apuntar a la raz del actual nodo del rbol de herencia, de manera que el mensaje siguiente enviado por auto referencia pueda accesar a otras propiedades del objeto. Algunas operaciones heredadas de los padres podran invocar aquellas propiedades que no necesariamente han sido implementadas en el momento en que el padre fue definido. Para el programador, la auto referencia aparece como una seudovariable (self, this, current) que puede usarse explcitamente para informar al sistema que se solicita accesar de esta manera.

Accesando propiedades sobre escritas.


Los lenguajes OOP proveen otras variables como sper, para accesar a propiedades heredadas que han sido reescritas en la subclase. Cuando se solicita una operacin, la bsqueda se inicia desde el padre inmediato del nodo que posea esa operacin. Y la operacin auto referencia se mantiene con la referencia a la ltima variable definida

Variaciones de la herencia.
Herencia de clases vs herencia de prototipo. Los sistemas OO se construyen a travs de clases, siendo stas moldes que representan un concepto, y su instancia que representa un individuo de ese concepto. La clase contiene las propiedades similares de un grupo de objetos, dictando la estructura y comportamiento de sus instancias; mientras que las instancias contienen los datos locales que representan el estado de ese objeto.

De esta misma manera, la herencia solo ocurre entre clases, mientras que las instancias no son capaces de servir como padres. Una alternativa es la herencia de prototipo o herencia de objeto, en el cual no hay clases, sino objetos formales referidos como ejemplos o instancias de ejemplo estndar que representa el comportamiento general o por omisin. De esta forma no se crean objetos nuevos del mismo tipo, sino que se clona o copia un objeto previo. Estos objetos logran modificaciones incrementales a nivel individual. Un punto a favor, es que muchos prefieren lidiar con ejemplos especficos en vez de generalizarlos. Delegacin vs concatenacin. Herencia es adquisicin de propiedades de sus generaciones pasadas. Es una relacin entre objetos que garantiza que el descendiente al menos contenga las propiedades de sus padres. Por medio de adiciones incrementales, redefiniciones o cancelacin de propiedades, el hijo se ir diferenciando. De manera que un identificador ser distinto si no existe ninguno anterior con el mismo nombre o traslapado si redefine uno existente. Aqu encontramos 2 mtodos. Delegar, en el cual compartimos la interfaz del padre, lo referenciamos. Y la concatenacin, en la que copiamos la interfaz del padre en la del hijo. De esta forma, si solicitamos un mensaje que no se encuentra en el hijo, lo delegamos al padre pues l sabe cmo resolverlo. En la concatenacin, el mtodo es repetido en el hijo, de manera que lo resuelve sin necesidad de consultar al padre.

Herencia ordenada vs herencia sin orden. El principal problema de la herencia mltiple, es la colisin de nombres, la cual ocurre cuando el rbol de herencia contiene propiedades traslapadas y el algoritmo de bsqueda no logra decidir cual ejecutar. Sin embargo, en la herencia simple, esta coincidencia es resultado natural de las modificaciones incrementales. Esto se convierte en una coincidencia vertical. El problema entonces se presenta a nivel horizontal en la herencia mltiple.

Herencia dinmica Habilidad para cambiar los objetos padre de manera dinmica en tiempo de ejecucin. Esto es, si el objeto contiene la propiedad padre como una variable ordinaria, es posible cambiar esta referencia dinmicamente.

Como vemos en la imagen, el comportamiento de aTurtle ya no es el mismo al modificar su referencia al objeto a3DPen, pues ste contiene una variable extra y el mtodo draw cambia. Si las propiedades del nuevo padre no cumplen con las necesidades del hijo, resultaran errores de vinculacin en tiempo de ejecucin. La herencia dinmica puede tener repercusiones en el performance debido a que el cambio de padre prevenga alguna optimizacin en la bsqueda de mtodos. Un beneficio es en el caso de objetos de tipo estructural que se pasan por diferentes estados, cambiando sus propiedades dependiendo de ellos. Por ejemplo, una cuenta bancaria que se comporta de diferente manera si est congelada, activa o vaca. Herencia selectiva. Las interfaces independientes hacen posible una herencia en la que no todas las propiedades deben pasar a los descendientes, sino que ellos pueden decidir que propiedades particulares del padre heredar y cules no. Herencia mixta. Al contrario de la herencia ordinaria en el que las partes modificadas estn integradas directamente en la nueva definicin, la herencia mixta crea clases mescladas por separado para contener las modificaciones. Esto es, una clase es creada con las modificaciones necesarias para ser aadidas a las otras clases, de manera que sta nunca es instanciada, sino agregada a la clase concreta, dndole mltiple herencia.

Compartir en tiempo real vs compartir en tiempo de creacin.


En el mundo real, la herencia es un concepto en el que intervienen 2 entes, el donador y el receptor. Y el resultado de esa herencia es compartir. Sin embargo, fsicamente puede ser imposible, pues los padres aunque heredan ojos azules, no usan los mismo ojos. De esta forma, diferenciamos en los sistemas la herencia, pues su caracterstica principal es compartir propiedades, por lo que los mtodos de la superclase estn disponibles para la subclase. Compartir en tiempo real, se refiere a que una vez establecida la relacin entre padre e hijo, cada cambio del padre se refleja implcitamente en el hijo. El compartir en tiempo de creacin se caracteriza por la evolucin independiente del padre y del hijo, muy similar al mundo real. Las formas en que se comparten pueden ser: de comportamiento, de estado y de estructura. Herencia de comportamiento.- se refiere al paso de de las operaciones de padre a hijo. Herencia de estado.- se refiere al paso de contenido o valores. Herencia de estructura.- se refiere a que solo la informacin necesaria para la construccin o asignacin de variables de instancia, se pasa a los hijos; lo que implica que habr mecanismos adicionales para el paso de informacin sobre las instancias.

Envo simple vs envo mltiple.


Los mensajes son enviados a objetos distinguidos como receptores, los cuales determinan el mtodo invocado por el mensaje. Envo simple. Por ejemplo, la expresin de sumatoria se interpreta de manera que 5 es el receptor del mensaje adicin, mientras que 4 es el parmetro de ese mtodo.

Aritmticamente, esto es incorrecto, pues el lado izquierdo de la operacin tiene el mismo valor que el lado derecho. Envo Mltiple. Es llamado multimtodo, ya que un mtodo puede pertenecer a varias clases simultneamente. La bsqueda del mensaje involucra a todos los argumentos y no solo el receptor.