Docente: Ing. Cristbal Jaime Garay Integrantes: Greivin Steven Leiva Misael Alejandro Lpez Snchez Chester Gonzlez Amoretty Kevin moiss Murillo Ruiz Marvin Eduardo Muoz Gastn Iriam Ali Lpez Zniga
Fecha de entrega: Viernes 12 de septiembre del 2014
Managua, Nicaragua
Introduccin
En este trabajo de investigacin presentamos la herencia y polimorfismo que son conceptos fundamentales en la programacin orientada a objetos, la POO establece una manera particular de agrupar los componentes y organizar su estructura para posteriormente desarrollar aplicaciones. De esta forma estos conceptos sencillos debemos tenerlos muy en cuenta para el cabal entendimiento de la POO.
Objetivos
Explicar los conceptos de herencia y polimorfismo. Relacionar la herencia y el polimorfismo con conceptos obtenidos en cursos anteriores. Distinguir y examinar ambos conceptos para que los estudiantes comprendan su importancia.
Desarrollo Introduccin a la programacin orientada a objetos
"En el transcurso de los ltimos 35 aos, los diseadores de hardware para ordenadores han pasado del diseo de equipos del tamao de un hangar a ordenadores porttiles basados en microprocesadores minsculos.
En el mismo perodo, los desarrolladores de software han pasado de escribir programas en ensamblador y COBOL a escribirlos en C y C++. Podramos denominar a esto progreso (algunas personas no estaran de acuerdo), pero claramente el mundo del software no progresa tan rpidamente como el mundo del hardware. Entonces, qu tienen los diseadores de hardware que los desarrolladores de software no poseen? La respuesta est en los componentes utilizados. Si los ingenieros de hardware electrnico tuvieran que comenzar desde un montn de arena cada vez que disean un nuevo dispositivo de hardware, y el primer paso fuese la extraccin de silicio para fabricar placas de circuitos integrados, el progreso tampoco sera tan veloz. Sin embargo, un diseador de hardware siempre construye un sistema que se basa en componentes ya preparados, cada uno con una funcin especfica y que brinda un conjunto de servicios a travs de interfaces definidas. La tarea de los diseadores de hardware es considerablemente ms fcil gracias al trabajo de sus predecesores. La reutilizacin de los componentes es tambin un mtodo para crear mejores software. An hoy, los desarrolladores de software comienzan desde un montn de arena y siguen los mismos pasos que dieron cientos de desarrolladores en el pasado. A menudo el resultado es sorprendente, pero podra mejorarse. La creacin de nuevas aplicaciones a partir de componentes ya existentes y que ya han sido probados, tiende siempre a producir cdigos ms fiables. Adems, se ha demostrado que es ms rpida y econmica, factores no menos importantes."
Mtodos de objeto El enfoque modular de objeto implica la creacin de una representacin informtica de los elementos del mundo real en los que estamos interesados, sin preocuparnos por la implementacin; es decir, independientemente de un lenguaje de programacin. Por lo tanto, supone la determinacin de objetos y el aislamiento de sus datos y de las funciones que usan. Entre 1970 y 1990, varios analistas desarrollaron enfoques orientados a objetos y hacia 1994 haba ms de 50 mtodos de objetos. Sin embargo, solamente 3 mtodos realmente alcanzaron popularidad: El mtodo OMT de Rumbaugh El mtodo BOOCH'93 de Booch El mtodo OOSE de Jacobson En 1994, Rumbaugh y Booch (a quienes luego se uni Jacobson, en 1995) sumaron sus esfuerzos para desarrollar el lenguaje de definicin UML (Unified Modeling Language), que define un lenguaje estndar mediante la incorporacin de la ventajas de varios mtodos precedentes (es decir, los de los otros analistas). Esto permite la programacin completa de una aplicacin con un lenguaje que utiliza un enfoque modular para todos los componentes del programa que se est desarrollando. El concepto de objeto La programacin orientada a objetos consiste en ordenar datos en conjuntos modulares de elementos de informacin del mundo real (denominado undominio). Estos elementos de datos se llaman objetos. Estos datos se agrupan de acuerdo a las caractersticas principales del mundo real de estos elementos (tamao, color, etc.). El enfoque de objetos es una idea que se ha probado con creces. Simula fue el primer lenguaje de programacin en implementar el concepto de clases en 1967. En 1976, Smalltalk implement los conceptos de encapsulacin, agrupacin y herencia (los conceptos principales de la programacin orientada a objetos). Por otra parte, se han implementado varios lenguajes de programacin orientada a objetos a escala global (Eiffel, Objective C, Loops, etc.). La dificultad que presenta este enfoque es la creacin de una representacin abstracta, en forma de objetos, de entidades que realmente existen (perro, auto, lmpara elctrica...) o que existen virtualmente (seguridad social, clima...). Un objeto se caracteriza por varios conceptos: Atributos: estos son los datos que caracterizan al objeto. Son variables que almacenan datos relacionados al estado de un objeto. Mtodos (usualmente llamados funciones de miembro): Los mtodos de un objeto caracterizan su comportamiento, es decir, son todas las acciones (denominadas operaciones) que el objeto puede realizar por s mismo. Estas operaciones hacen posible que el objeto responda a las solicitudes externas (o que acte sobre otros objetos). Adems, las operaciones estn estrechamente ligadas a los atributos, ya que sus acciones pueden depender de, o modificar, los valores de un atributo. Identidad: El objeto tiene una identidad, que lo distingue de otros objetos, sin considerar su estado. Por lo general, esta identidad se crea mediante un identificador que deriva naturalmente de un problema (por ejemplo: un producto puede estar representado por un cdigo, un automvil, por un nmero de modelo, etc.).
El concepto de clases
Una clase es la estructura de un objeto, es decir, la definicin de todos los elementos de que est hecho un objeto. Un objeto es, por lo tanto, el "resultado" de una clase. En realidad, un objeto es una instancia de una clase, por lo que se pueden intercambiar los trminos objeto o instancia (o incluso evento). Una clase se compone de dos partes: Atributos (denominados, por lo general, datos miembros): esto es, los datos que se refieren al estado del objeto Mtodos (denominados, por lo general, funciones miembros): son funciones que pueden aplicarse a objetos Si tenemos una clase llamada auto, los objetos Peugeot y Renault sern instancias de esa clase. Tambin puede haber otros objetos Peugeot 406, diferenciados por su nmero de modelo. Asimismo, dos instancias de una clase pueden tener los mismos atributos, pero considerarse objetos distintos independientes. En un contexto real: dos camisas pueden ser idnticas, pero no obstante, tambin ser diferentes de alguna manera. Sin embargo, si las mezclamos es imposible distinguir una de la otra. El concepto de encapsulacin La encapsulacin es un mecanismo que consiste en organizar datos y mtodos de una estructura, conciliando el modo en que el objeto se implementa, es decir, evitando el acceso a datos por cualquier otro medio distinto a los especificados. Por lo tanto, la encapsulacin garantiza la integridad de los datos que contiene un objeto. Ocultacin de datos El usuario de una clase en particular no necesita saber cmo estn estructurados los datos dentro de ese objeto, es decir, un usuario no necesita conocer la implementacin Al evitar que el usuario modifique los atributos directamente y forzndolo a utilizar funciones definidas para modificarlos (llamadas interfaces), se garantiza la integridad de los datos (por ejemplo, uno puede asegurarse de que el tipo de datos suministrados cumple con nuestras expectativas bien que los se encuentran dentro del periodo de tiempo esperado). La encapsulacin define los niveles de acceso para elementos de esa clase. Estos niveles de acceso definen los derechos de acceso para los datos, permitindonos el acceso a datos a travs de un mtodo de esa clase en particular, desde una clase heredada o incluso desde cualquier otra clase. Existen tres niveles de acceso: pblico: funciones de toda clase pueden acceder a los datos o mtodos de una clase que se define con el nivel de acceso pblico. Este es el nivel de proteccin de datos ms bajo protegido: el acceso a los datos est restringido a las funciones de clases heredadas, es decir, las funciones miembro de esa clase y todas las subclases privado: el acceso a los datos est restringido a los mtodos de esa clase en particular. Este es nivel ms alto de proteccin de datos El concepto de herencia La herencia es especfica de la programacin orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y mtodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y mtodos nuevos para la subclase, que luego se aplican a los atributos y mtodos heredados.
Esta particularidad permite crear una estructura jerrquica de clases cada vez ms especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compaa que vende estas clases tiende a proteger las datos miembro usando la encapsulacin). Jerarqua de clase La relacin primaria-secundaria entre clases puede representarse desde un punto de vista jerrquico, denominado vista de clases en rbol. La vista en rbol comienza con una clase general llamada superclase (a la que algunas veces se hace referencia como clase primaria, clase padre, clase principal, o clase madre; existen muchas metforas genealgicas). Las clases derivadas (clase secundaria o subclase) se vuelven cada vez ms especializadas a medida que van descendiendo el rbol. Por lo tanto, se suele hacer referencia a la relacin que une a una clase secundaria con una clase primaria mediante la frase "es una" x o y.
Herencia mltiple Algunos lenguajes orientados a objetos, como C++ permiten herencias mltiples, lo que significa que una clase puede heredar los atributos de otras dos superclases. Este mtodo puede utilizarse para agrupar atributos y mtodos desde varias clases dentro de una sola.
Definicin de polimorfismo
La palabra polimorfismo proviene del griego y significa que posee varias formas diferentes. Este es uno de los conceptos esenciales de una programacin orientada a objetos. As como la herencia est relacionada con las clases y su jerarqua, el polimorfismo se relaciona con los mtodos. En general, hay tres tipos de polimorfismo: Polimorfismo de sobrecarga Polimorfismo paramtrico (tambin llamado polimorfismo de plantillas) Polimorfismo de inclusin (tambin llamado redefinicin o subtipado)
Trataremos de describir ahora con ms precisin estos tipos de polimorfismo, pero le sugerimos prestar atencin, ya que muchas personas suelen confundirse al tratar de comprender las diferencias existentes entre estos tres tipos. Polimorfismo de sobrecarga
El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con funcionalidad similar, en clases que son completamente independientes una de otra (stas no tienen que ser clases secundarias de la clase objeto). Por ejemplo, la clase complex, la clase image y la clase link pueden todas tener la funcin "display". Esto significa que no necesitamos preocuparnos sobre el tipo de objeto con el que estamos trabajando si todo lo que deseamos es verlo en la pantalla. Por lo tanto, el polimorfismo de sobrecarga nos permite definir operadores cuyos comportamientos varan de acuerdo a los parmetros que se les aplican. As es posible, por ejemplo, agregar el operador + y hacer que se comporte de manera distinta cuando est haciendo referencia a una operacin entre dos nmeros enteros (suma) o bien cuando se encuentra entre dos cadenas de caracteres (concatenacin). Polimorfismo paramtrico
El polimorfismo paramtrico es la capacidad para definir varias funciones utilizando el mismo nombre, pero usando parmetros diferentes (nombre y/o tipo). El polimorfismo paramtrico selecciona automticamente el mtodo correcto a aplicar en funcin del tipo de datos pasados en el parmetro. Por lo tanto, podemos por ejemplo, definir varios mtodos homnimos deaddition() efectuando una suma de valores. El mtodo int addition(int,int) devolvera la suma de dos nmeros enteros. float addition(float, float) devolvera la suma de dos flotantes. char addition(char, char) dara por resultado la suma de dos caracteres definidos por el autor. etc. Una signature es el nombre y tipo (esttico) que se da a los argumentos de una funcin. Por esto, una firma de mtodo determina qu elemento se va a llamar. Polimorfismo de subtipado
La habilidad para redefinir un mtodo en clases que se hereda de una clase base se llama especializacin. Por lo tanto, se puede llamar un mtodo de objeto sin tener que conocer su tipo intrnseco: esto es polimorfismo de subtipado. Permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos, enmascarndolos con una interfaz comn (siendo esta la clase bsica). Imagine un juego de ajedrez con los objetos rey, reina, alfil, caballo, torre y pen, cada uno heredando el objeto pieza. El mtodo movimiento podra, usando polimorfismo de subtipado, hacer el movimiento correspondiente de acuerdo a la clase objeto que se llama. Esto permite al programa realizar el movimiento.de_pieza sin tener que verse conectado con cada tipo de pieza en particular.
Conclusiones
Segn Luis Joyanes (1998), la herencia Es la capacidad para crear nuevas clases de objetos que se construyen basados en clases existentes. La herencia es una propiedad que permite a un objeto poseer propiedades de otras clases.Adems, a estos nuevos objetos creados es posible asignarles nuevos atributos y mtodos. Polimorfismo proviene de dos races griegas: poli, mltiples y morfismo, formas. Esta caracterstica es la capacidad que objetos similares tienen para responder de diferentes formas al mismo mensaje, y permite al programador implementar mltiples formas de un mismo mtodo, dependiendo cada una de ellas de la clase sobre la que se realice la implementacin. Esto permite acceder a varios mtodos distintos utilizando el mismo medio de acceso (el mismo nombre). El polimorfismo est muy relacionado con la herencia. Bibliografa
Understanding Active X and OLE - David Chappell http://es.kioskea.net/contents/410-poo-encapsulacion-de-datos.html Introduccin a la programacin orientada a objetos - VELARDE DE BARRAZA, OLINDA y cols. PEARSON EDUCACIN, Mxico, 2006