Está en la página 1de 5

HERENCIA

El concepto de herencia constituye, a nuestro juicio, la principal innovacin del desarrollo orientado a objetos. Se trata de un concepto bastante simple e intuitivo que, de una manera informal, puede definirse como: "el mecanismo que permite definir una clase de objetos tomando como base la definicin de otra clase" Una clase se define en trminos de atributos y de mtodos (u operaciones). Por tanto, otra forma de expresar la definicin anterior seria la siguiente: "herencia es el mecanismo que permite a una clase de objetos incorporar atributos y mtodos de otra clase, aadiendolos a los que ya posee". En la terminologa habitual, la clase que hereda las caractersticas de otra y la clase de partida reciben los calificativos de "subclase" y "superclase", respectivamente. De ah que, en numerosas ocasiones, la relacin de herencia aparezca tambin referenciada como "superclase/subclase". Por otro lado, tambin suele ser muy habitual hablar en trminos de "clase padre" y "clase hija", dado lo intuitivo de ambos trminos. La contribucin ms interesante del mecanismo de herencia al desarrollo de software, y ms concretamente al objetivo de reutilizacin de componentes al que anteriormente hacamos alusin, es la flexibilidad que proporciona para capturar y aprovechar al mximo las caractersticas comunes de diferentes clases de objetos. Dicha flexibilidad se manifiesta, fundamentalmente, en dos sentidos: Por un lado, permite recoger los aspectos comunes de dos o ms clases de objetos con el mximo nivel de detalle (a nivel de atributo y de mtodo). y Por otro, ofrece la posibilidad de establecer tantos niveles de abstraccin (o de especializacin, segn se mire) como sean necesarios para reflejar fielmente nuestro modelo de la realidad. Surge, de este modo, el concepto de jerarqua de clases Algunos lenguajes de programacin basados en el paradigma de objeto, Eiffel y C++ (Versin 2) entre otros, introducen un grado de flexibilidad adicional en el mecanismo de herencia al permitir que una clase de objetos herede atributos y mtodos de mas de una clase. Esta modalidad de herencia se conoce con el nombre de herencia mltiple y, en lugar de una jerarqua, da lugar a una organizacin de clases con forma de grafo dirigido acclico.

La importancia del concepto de herencia es tal que, para algunos autores, la presencia o no de mecanismos que implementen de forma natural este concepto es lo que diferencia a un lenguaje de programacin orientado a objetos de otro que no lo es. Segn esta tesis, lenguajes como Ada quedaran excluidos de tal apelativo, en contra de lo que podra deducirse a partir de las numerosas publicaciones en las que se defienden sus especiales aptitudes para esta nueva modalidad de desarrollo de software. La ausencia del mecanismo de herencia en ciertos lenguajes de programacin modernos, como Ada, puede paliarse hasta cierto punto haciendo uso de los mecanismos alternativos que este tipo de lenguajes incorporan (por ejemplo, los genricos). No obstante, la flexibilidad que proporciona el mecanismo de herencia para reutilizar unas clases de objetos en la definicin de otras, difcilmente pueden alcanzarse mediante tales mecanismos alternativos.

POLIMORFISMO
Otro concepto interesante, con Importantes aportaciones en reas tales como la flexibilidad o la legibilidad del software, es el de polimorfismo. Tras este termino, un tanto oscuro, subyace una idea bastante simple. En su ms amplia expresin, el polimorfismo puede definirse como: "el mecanismo que permite definir e Invocar funciones idnticas en denominacin e interfaz, pero con implementaron diferente". Esta definicin introduce un aspecto muy importante del polimorfismo: la asociacin, o vinculo, entre cada llamada a una de estas funciones polimorfismo y la implementacin concreta finalmente invocada. Cuando este vinculo puede establecerse en tiempo de

compilacin, se suele hablar de vinculacin estatica (static binding). Por contra, cuando la implementacin a emplear, puede determinarse en tiempo de ejecucin, el termino empleado es el de vinculacin dinmica (dynamic binding).

Aunque el concepto de polimorfismo es una de las principales innovaciones del desarrollo orientado a objetos, posee antecedentes histricos en otros mecanismos ms sencillos, como son la conversin forzada (casting) y la sobrecarga de identificadores, ideados con el fin de introducir un cierto grado de flexibilidad en el manejo de tipos de datos heterogneos.

Encapsulamiento
Como se puede observar de los diagramas, las variables del objeto se localizan en el centro o ncleo del objeto. Los mtodos rodean y esconden el ncleo del objeto de otros objetos en el programa. Al empaquetamiento de las variables de un objeto con la proteccin de sus mtodos se le llama encapsulamiento. Tpicamente, el encapsulamiento es utilizado para esconder detalles de la puesta en prctica no importantes de otros objetos. Entonces, los detalles de la puesta en prctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa. El encapsulamiento de variables y mtodos en un componente de software ordenado es, todava, una simple idea poderosa que provee dos principales beneficios a los desarrolladores de software: Modularidad, esto es, el cdigo fuente de un objeto puede ser escrito, as como darle mantenimiento, independientemente del cdigo fuente de otros objetos. As mismo, un objeto puede ser transferido alrededor del sistema sin alterar su estado y conducta.

Ocultamiento de la informacin, es decir, un objeto tiene una "interfaz publica" que otros objetos pueden utilizar para comunicarse con l. Pero el objeto puede mantener informacin y mtodos privados que pueden ser cambiados en cualquier tiempo sin afectar a los otros objetos que dependan de ello. Los objetos proveen el beneficio de la modularidad y el ocultamiento de la informacin.

Las clases proveen el beneficio de la reutilizacin. Los programadores de software utilizan la misma clase, y por lo tanto el mismo cdigo, una y otra vez para crear muchos objetos. En las implantaciones orientadas a objetos se percibe un objeto como un paquete de datos y procedimientos que se pueden llevar a cabo con estos datos. Esto encapsula los datos y los procedimientos. La realidad es diferente: los atributos se relacionan al objeto o instancia y los mtodos a la clase. Por qu se hace as? Los atributos son variables comunes en cada objeto de una clase y cada uno de ellos puede tener un valor asociado, para cada variable, diferente al que tienen para esa misma variable los dems objetos. Los mtodos, por su parte, pertenecen a la clase y no se almacenan en cada objeto, puesto que sera un desperdicio almacenar el mismo procedimiento varias veces y ello va contra el principio de reutilizacin de cdigo.

Clases y objetos
y Objeto Un objeto es una encapsulacin genrica de datos y de los procedimientos para manipularlos.

Al igual que los objetos del mundo real, los objetos de software tienen un estado y un comportamiento. El estado de los objetos se determina a partir de una o ms variables y el comportamiento con la implementacin de mtodos. La siguiente figura muestra la representacin cmun de los objetos de software

Como se observa en la figura, todos los objetos tienen una parte pblica (su comportamiento) y una parte privada (su estado). En este caso, hicimos una vista transversal pero desde el mundo exterior, el objeto se observar como una esfera. Clase Una clase est formada por los mtodos y las variables que definen las caractersticas cmunes a todos los objetos de esa clase. Precisamente la clave de la OOP est en abstraer los mtodos y los datos comunes a un conjunto de objetos y almacenarlos en una clase.

Una clase equivale a la generalizacin de un tipo especfico de objetos. Una instancia es la concrecin de una clase. Clase X

En la figura anterior, el objeto A y el objeto B son instancias de la clase X.

Cada uno de los objetos tiene su propia copia de las variables definidas en la clase de la cual son instanciados y comparten la misma implementacin de los mtodos.

También podría gustarte