Fundamentos Poo- Cap.10

10
ORIGEN DE LA PROGRAMACIÓN ORIENTADA A OBJETOS Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cómputo Noruego en Oslo. Según se informa, la historia es que trabajaban en simulaciones de naves, y fueron confundidos por la explosión combinatoria de cómo las diversas cualidades de diversas naves podían afectar unas a las otras. La idea ocurrió para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron refinados más tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "en marcha" en lugar de tener un sistema basado en programas estáticos. La programación orientada a objetos tomó posición como la metodología de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++ , una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para los cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación orientada a eventos. Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, y otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por otra parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría de navegadores.

description

fundamentos practicos

Transcript of Fundamentos Poo- Cap.10

  • ORIGEN DE LA PROGRAMACIN ORIENTADA A OBJETOS

    Los conceptos de la programacin orientada a objetos tienen origen en Simula 67, un lenguaje diseado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cmputo Noruego en Oslo. Segn se informa, la historia es que trabajaban en simulaciones de naves, y fueron confundidos por la explosin combinatoria de cmo las diversas cualidades de diversas naves podan afectar unas a las otras. La idea ocurri para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamiento. Fueron refinados ms tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (y cuya primera versin fue escrita sobre Basic) pero diseado para ser un sistema completamente dinmico en el cual los objetos se podran crear y modificar "en marcha" en lugar de tener un sistema basado en programas estticos.

    La programacin orientada a objetos tom posicin como la metodologa de programacin dominante a mediados de los aos ochenta, en gran parte debido a la influencia de C++ , una extensin del lenguaje de programacin C. Su dominacin fue consolidada gracias al auge de las Interfaces grficas de usuario, para los cuales la programacin orientada a objetos est particularmente bien adaptada. En este caso, se habla tambin de programacin orientada a eventos.

    Las caractersticas de orientacin a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, y otros. La adicin de estas caractersticas a los lenguajes que no fueron diseados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del cdigo. Los lenguajes orientados a objetos "puros", por otra parte, carecan de las caractersticas de las cuales muchos programadores haban venido a depender. Para saltar este obstculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en mtodos orientados a objetos, pero permitiendo algunas caractersticas imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparicin de Internet, y a la implementacin de la mquina virtual de Java en la mayora de navegadores.

  • Programacin Orientada a Objetos (POO)

    La programacin orientada a objetos es un paradigma de programacin que define los programas en trminos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o mtodos) e identidad (propiedad del objeto que lo diferencia del resto). La programacin orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y mdulos ms fciles de escribir, mantener y reutilizar.

    De esta forma, un objeto contiene toda la informacin, (los denominados atributos) que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases, e incluso entre objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. Este dispone de mecanismos de interaccin, llamados mtodos, que favorecen la comunicacin entre objetos y en consecuencia, el cambio de estado en los propios objetos. Esta caracterstica lleva a tratarlos como unidades indivisibles, en las que no se separan informacin y procesamiento (mtodos).

    Dada esta propiedad de conjunto de una clase de objetos, que al contar con una serie de atributos definitorios, requiere de unos mtodos para poder tratarlos (lo que hace que ambos conceptos estn ntimamente entrelazados), el programador debe pensar indistintamente en ambos trminos, ya que no debe nunca separar o dar mayor importancia a los atributos en favor de los mtodos, ni viceversa. Hacerlo puede llevar al programador a seguir el hbito errneo de crear clases contenedoras de informacin por un lado y clases con mtodos que manejen esa informacin por otro (llegando a una programacin estructurada camuflada en un lenguaje de programacin orientado a objetos).

    Esto difiere de los lenguajes imperativos tradicionales, en los que los datos y los procedimientos estn separados y sin relacin, ya que lo nico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programacin estructurada anima al programador a pensar sobre todo en trminos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. Los programadores de lenguajes imperativos escriben funciones y despus les pasan datos. Los programadores que emplean lenguajes orientados a objetos definen objetos con datos y mtodos y despus envan mensajes a los objetos diciendo qu realicen esos mtodos en s mismos.

  • Diferencias con la programacin imperativa

    Aunque la programacin imperativa (a veces llamada procedural o procedimental) condujo a mejoras de la tcnica de programacin secuencial, tales como la programacin estructurada y "refinamientos sucesivos", los mtodos modernos de diseo de software orientado a objetos incluyen mejoras entre las que estn el uso de los patrones de diseo, diseo por contrato, y lenguajes de modelado

    Las principales diferencias entre la programacin imperativa y la orientada a objetos son:

    La programacin orientada a objetos es ms moderna, es una evolucin de la programacin imperativa que plasma en el diseo de una familia de lenguajes conceptos que existan previamente con algunos nuevos.

    La programacin orientada a objetos se basa en lenguajes que soportan sintctica y semnticamente la unin entre los tipos abstractos de datos y sus operaciones (a esta unin se la suele llamar clase).

    La programacin orientada a objetos incorpora en su entorno de ejecucin mecanismos tales como el polimorfismo y el envo de mensajes entre objetos.

  • Para tener unos conceptos bsicos de la Programacin Orientada a Objetos es necesario tener estos conceptos claros

    Qu son los objetos?

    En informtica, un OBJETO es un conjunto de variables y de los mtodos relacionados con esas variables.

    Un objeto contiene en s mismo la informacin y los mtodos o funciones necesarios para manipular esa informacin.

    Lo ms importante de los objetos es que permiten tener un control total sobre 'quin' o 'qu' puede acceder a sus miembros, es decir, los objetos pueden tener miembros pblicos a los que podrn acceder otros objetos o miembros privados a los que slo puede acceder l. Estos miembros pueden ser tanto variables como funciones.

    El gran beneficio de todo esto es la encapsulacin, el cdigo fuente de un objeto puede escribirse y mantenerse de forma independiente a los otros objetos contenidos en la aplicacin.

    Qu son las clases?

    Una CLASE es un proyecto, o prototipo, que define las variables y los mtodos comunes a un cierto tipo de objetos.

    Las clases son las matrices de las que luego se pueden crear mltiples objetos del mismo tipo. La clase define las variables y los mtodos comunes a los objetos de ese tipo, pero luego, cada objeto tendr sus propios valores y compartirn las mismas funciones.

    Primero deberemos crear una clase antes de poder crear objetos o ejemplares de esa clase.

    Qu son los mensajes?

    Para poder crear una aplicacin necesitars ms de un objeto, y estos objetos no pueden estar aislados unos de otros, pues bien, para comunicarse esos objetos se envan mensajes.

    Los mensajes son simples llamadas a las funciones o mtodos del objeto con el se quiere comunicar para decirle que haga cualquier cosa.

    Qu es la herencia?

    Esto slo significa que puedes crear una clase partiendo de otra que ya exista.

    Puedes crear una clase a travs de una clase existente, y esta clase tendr todas las variables y los mtodos de su 'superclase', y adems se le podrn aadir otras variables y mtodos propios.

    Se llama 'Superclase' a la clase de la que desciende una clase.

  • Conceptos de la Programacin Orientada a Objetos Como solucin

    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 comn 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 comunes 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, los objetos A y 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.

    Mensaje

    Los objetos interactan envindose mensajes unos a otros. Tras la recepcin de un mensaje el objeto actuar. La accin puede ser el envo de otros mensajes, el cambio de su estado, o la ejecucin de cualquier otra tarea que se requiera que haga el objeto.

    Una comunicacin dirigida a un objeto, que le ordena que ejecute uno de sus mtodos con ciertos parmetros asociados al evento que lo gener.

    Mtodo

    Un mtodo se implementa en una clase, y determina cmo tiene que actuar el objeto cuando recibe un mensaje.

    Cuando un objeto A necesita que el objeto B ejecute alguno de sus mtodos, el objeto A le manda un mensaje al objeto B.

    Al recibir el mensaje del objeto A, el objeto B ejecutar el mtodo adecuado para el mensaje recibido.

    Evento

    Un suceso en el sistema (tal como una interaccin del usuario con la maquina o un mensaje enviado por un objeto). El sistema maneje el evento enviando el mensaje adecuado al objeto pertinente.

    Propiedad o atributo

    Contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y cuyo valor puede ser alterado por la ejecucin de algn mtodo.

  • Estado interno

    Propiedad invisible de los objetos, que puede ser nicamente accedida y alterada por un mtodo del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos).

    Caractersticas de la Programacin Orientada a Objetos

    Encapsulamiento

    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: 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: 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.

  • Herencia

    La herencia es un mecanismo que permite la definicin de una clase a partir de la definicin de otra ya existente. La herencia permite compartir automticamente mtodos y datos entre clases, subclases y objetos.

    La herencia est fuertemente ligada a la reutilizacin del cdigo en la OOP. Esto es, el cdigo de cualquiera de las clases puede ser utilizado sin ms que crear una clase derivada de ella, o bien una subclase.

    Hay dos tipos de herencia: Herencia Simple y Herencia Mltiple. 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 ms clases iniciales. Java slo permite herencia simple.

    Superclase y Subclases

    El concepto de herencia conduce a una estructura jerrquica de clases o estructura de rbol, lo cual significa que en la OOP todas las relaciones entre clases deben ajustarse a dicha estructura.

    En esta estructura jerrquica, cada clase tiene slo una clase padre. La clase padre de cualquier clase es conocida como su superclase. La clase hija de una superclase es llamada una subclase.

    Una superclase puede tener cualquier nmero de subclases.

    Una subclase puede tener slo una superclase.

    A es la superclase de B, C y D. D es la superclase de E. B, C y D son subclases de A. E es una subclase de D.

  • Polimorfismo

    Un objeto solamente tiene una forma (la que se le asigna cuando se construye ese objeto) pero la referencia a objeto es polimrfica porque puede referirse a objetos de diferentes clases (es decir, la referencia toma mltiples formas). Para que esto sea posible debe haber una relacin de herencia entre esas clases.

    Abstraccin

    La relacin de herencia entre clases, se puede pensar en una jerarqua de clase, como la definicin de conceptos demasiado abstractos en lo alto de la jerarqua y esas ideas se convierten en algo ms concreto, conforme, se desciende por la cadena de la superclase. Las clases hijas no estn limitadas al estado y conducta provistos por sus superclases; pueden agregar variables y mtodos adems de los que ya heredan de sus clases padres. Las clases hijas pueden, tambin, sobrescribir los mtodos que heredan por implementaciones especializadas para esos mtodos. De igual manera, no hay limitacin a un slo nivel de herencia por lo que se tiene un rbol de herencia en el que se puede heredar varios niveles hacia abajo y mientras ms niveles descienda una clase, ms especializada ser su conducta.

    La herencia presenta los siguientes beneficios:

    Las subclases proveen conductas especializadas sobre la base de elementos comunes provistos por la superclase. A travs del uso de herencia, los programadores pueden reutilizar el cdigo de la superclase muchas veces.

    Los programadores pueden implementar superclases llamadas clases abstractas que definen conductas "genricas". Las superclases abstractas definen y pueden implementar parcialmente las conductas, pero gran parte de la clase no est definida ni implementada.

  • Bibliografa

    Paginas de investigacin de la programacin orientada a objetos

    http://www.programacion.com/java/tutorial/java_basico/1/#basico http://www.fi-b.unam.mx/pp/profesores/carlos/java/java_basico3_1.html http://es.wikipedia.org/wiki/Programacion http://www.desarrolloweb.com/articulos/499.php?manual=15

    Basado del libro . Deitel y Deitel, Cmo programar en java, Introduccin al DOO con UML y lo patrones de diseo. Quita Edicin, Pearson Prentice Hall. 2004