UNIVERSIDAD TECNOLÓGICA DE PANAMÁ FACULTAD DE INGENIERÍA DE SISTEMAS COMPUTACIONALES Departamento de Computación y Simulación de Sistemas Licenciatura en Ingeniería en Sistemas y Computación Investigación #2 “La Programación Orientada a Objetos” CURSO Desarrollo de Software ESTUDIANTES Alba Muñoz 8-865-518 Amelia González 8-855-1945 Katherine Benitez 8-848-2113 Oscar Gómez 8-848-911 Héctor Pérez 8-839-2020 Anthony Vargas 8-826-1082 Giancarlo Remón 8-849-367 FACILITADORA: Dra. Addys C. de Lam PANAMÁ, 2010 CONTENIDO Introducción Objetivos Contenido 1. ¿Qué es la programación orientada objeto? 2. Antecedentes de la programación orientada a objeto 3. Conceptos fundamentales 4. Características 5. Ventajas 6. Los objetos 6.1. Definición 6.2. Características. 7. Ejemplo de Lenguajes orientados a objetos 8. Mapa conceptual del contenido de la investigación. Conclusiones Glosario Bibliográfica INTRODUCCIÓN Por lo general, en todos los aspectos de la vida existen diferentes métodos y/o caminos para llegar hacia un mismo fin, y la informática, no iba a ser la excepción. Así como existe la programación estructurada, podemos encontrar la programación orientada a objetos, que sigue otras rubricás. Podemos definir a la programación orientada a objeto (POO) como un estilo de programación que utiliza objetos como bloque esencial de construcción. Y sus elementos básicos son: objetos, mensajes, métodos y clases. El objetivo de la programación orientada a objetos son el mejoramiento de la productividad del programador por medio del manejo de la complejidad del software a través del uso de clases y sus objetos asociados. La programación orientada a objetos aunque no es la solución definitiva, construye programas complejos a partir de entidades de programas más simples llamados objetos, que son instancias reales o muestras de clases, permitiendo heredar datos y códigos de aplicaciones existentes. Esto mejora la productividad del programador y facilita la extensión y la re-utilización de clases en otras aplicaciones con mínima modificación al código original. OBJETIVOS 1. Objetivos Generales • Comparar la programación orientada a objetos con otras metodologías de programación, y de tal forma comprender las ventajas que tiene, respecto a la programación estructurada. • Comprender que la POO, es una extensión natural de la actual tecnología de programación y representa un enfoque nuevo y distinto al tradicional. 2. Objetivos Específicos • Entender qué es un objeto, y como funciona dentro de la programación orientada a objetos. • Identificar y comprender los antecedentes de la programación orientada a objetos. • Definir los conceptos que involucran la programación orientada a objetos. CONTENIDO “LA PROGRAMACIÓN ORIENTADA A OBJETOS” 1. ¿Qué es la programación orientada objeto? Se puede definir POO como una técnica o estilo de programación que utiliza objetos como bloque esencial de construcción. Al igual que los tipos de datos definidos por el usuario, un objeto es una colección de datos, junto con las funciones asociadas, utilizadas para operar sobre esos datos. Sin embargo la potencia real de los objetos reside en las propiedades que soportan: herencia, encapsulación y polimorfismo, junto con los conceptos básicos de objetos, clases, métodos y mensajes. 2. Antecedentes de la programación orientada a objeto Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones. Fueron refinados más tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (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 tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos. La programación orientada a objetos tomó posición como el estilo 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 las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos. Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre 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 en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por su 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. PHP en su versión 5 se ha modificado, soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos. 3. Conceptos fundamentales La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes: • Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas. • Herencia: la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. • Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. • Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. • Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. • Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó. • 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 esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método. • Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). • Componentes de un objeto: atributos, identidad, relaciones y métodos. • Identificación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes. 4. Características • Abstracción: Es la capacidad de separar las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto sirve como modelo de un "algo" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas se necesitan para ampliar una abstracción. • Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. • Ocultamiento: Cada objeto está aislado del exterior, y cada tipo de objeto expone una puerta de acceso o interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien no tenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. • Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. La herencia nos permite, entre otras cosas, evitar tener que escribir el mismo código una y otra vez, puesto que al definir que una categoría (que en programación llamaremos clase) pertenece a otra, automáticamente estamos atribuyéndoles las características generales de la primera, sin tener que definirlas de nuevo. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple. 5. Ventajas La POO tiene las siguientes ventajas respecto a otros paradigmas de la programación: • Fomenta la reutilización y extensión del código. • Facilita el mantenimiento del software. • Permite crear sistemas más complejos. • Agiliza el desarrollo de software. • Facilita la creación de programas visuales. • Facilita el trabajo en equipo. • Relacionar el sistema al mundo real. UNIFORMIDAD: Ya que es la representación de los objetos lleva implica tanto el análisis como el diseño y la codificación de los mismos. COMPRENSION: Tanto los datos que componen los objetos, como los procedimientos que los manipulan, están agrupados en clases, que se corresponden con las estructuras de información que el programa trata. FLEXIBILIDAD: Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar, cualquier cambio que se realice sobre ellos quedará reflejado automáticamente en cualquier lugar donde estos datos aparezcan. ESTABILIDAD: Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo RAPIDEZ: En este aspecto, los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan más a las especificaciones de la máquina. Si la rapidez es crítica, puede elegir un lenguaje de programación como C++, que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C. GESTION DE RECURSOS: Las aplicaciones orientadas a objetos demandan normalmente más recursos del sistema que las aplicaciones procedurales. La creación dinámica de objetos, que ocupa un lugar en la memoria del ordenador, puede acarrear graves problemas. Una de las soluciones, que incluye alguno delos lenguajes OOP, es liberar a menudo el espacio que los objetos dejan de utilizar. Este procedimiento de optimización como garbage collection (recolección de basura, implementado en java), minimiza los efecto de la creación dinámica de objetos. 6. Los objetos 6.1. Definición Un objeto en POO representa alguna entidad de la vida real, es decir, alguno de los objetos que pertenecen al negocio con que estamos trabajando o al problema con el que nos estamos enfrentando, y con los que podemos interactuar. A través del estudio de ellos se adquiere el conocimiento necesario para, mediante la abstracción y la generalización, agruparlos según sus características en conjuntos, estos conjuntos determinan las clases de objetos con las que estamos trabajando. 6.2. Características Los objetos tienen características fundamentales que nos permiten conocerlos mediante la observación, identificación y el estudio posterior de su comportamiento; estas características son: • Identidad: propiedad que permite a un objeto diferenciarse de otros. La identidad de los objetos sirve para comparar si dos objetos son iguales o no. No es raro encontrar que en muchos lenguajes de programación la identidad de un objeto esté determinada por la dirección de memoria de la computadora en la que se encuentra el objeto, pero este comportamiento puede ser variado re-definiendo la identidad del objeto a otra propiedad. • Comportamiento: El comportamiento de un objeto está directamente relacionado con su funcionalidad y determina las operaciones que este puede realizar o a las que puede responder ante mensajes enviados por otros objetos. La funcionalidad de un objeto está determinada, primariamente, por su responsabilidad. • Estado: El estado de un objeto se refiere al conjunto de los valores de sus atributos en un instante de tiempo dado. El comportamiento de un objeto puede modificar el estado de este. Cuando una operación de un objeto modifica su estado se dice que esta tiene "efecto colateral". 7. Ejemplo de Lenguajes orientados a objetos LENGUAJE DE PROGRAMACIÓN PROGRAMA • C++ • JAVA • Ruby • Visual Basic . NET Microsoft Visual Studio 2008 - Professional • Python 8. Mapa Conceptual: “La Programación Orientada a Objetos” BIBLIOGRAFÍA BARRAZA, KROL, MELÉNDEZ, VELÁZQUEZ. “Introducción a la Programación Orientada a Objetos”. Segunda Edición. Imprenta Universidad Tecnológica de Panamá. WEB-BIBLIOGRAFÍA • Programación orientada objeto http://www.desarrolloweb.com/articulos/1330.php • Antecedentes de la programación orientada a objeto http://programarenc.webcindario.com/Cplus/capitulo1.htm • Conceptos fundamentales http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/clases.htm • Características http://thefricky.wordpress.com/2007/12/28/programacion-orientada-a-objetos-caracteristicas-de-la-poo/ http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos#Caracter.C3.ADsticas_de_la_POO • Ventajas http://facilisweb.es/blog/?p=70 http://ar.answers.yahoo.com/question/index?qid=20090907143057AAEWt7n • Objetos http://es.wikipedia.org/wiki/Objeto_(programacion) • Lenguajes orientados a objetos http://es.wikipedia.org/wiki/Lenguaje_orientado_a_objetos http://www.lenguajes-de-programacion.com/programacion-orientada-a-objetos.shtml