colaborativo no 1

11
ACTIVIDAD No. 6 Trabajo Colaborativo No 1 FRANKLIN CESAR ESTEVEZ GARCIA COD. 79741159 TUTOR: Ing. CESAR ORLANDO JIMÉNEZ ANGARITA PROGRAMACION ORIENTADA A OBJETOS UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BÁSICAS, TECNOLOGÍA E INGENIERÍA INGENIERÍA DE SISTEMAS OCTUBRE 2013

Upload: franklin-estevez

Post on 28-Dec-2015

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Colaborativo No 1

ACTIVIDAD No. 6 Trabajo Colaborativo No 1

FRANKLIN CESAR ESTEVEZ GARCIA

COD. 79741159

TUTOR: Ing. CESAR ORLANDO JIMÉNEZ ANGARITA

PROGRAMACION ORIENTADA A OBJETOS

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD

ESCUELA DE CIENCIAS BÁSICAS, TECNOLOGÍA E INGENIERÍA

INGENIERÍA DE SISTEMAS

OCTUBRE

2013

Page 2: Colaborativo No 1

Desarrollo informe.

Capítulo 1 Conceptos Básicos Orientado a Objetos

(Tomado del libro Programación de Computadores de José Cárcamo Sepúlveda, Ediciones UIS).

Cada objeto tiene un conjunto de características o atributos que lo hacen diferente a los demás.

Un objeto es una entidad provista de un conjunto de propiedades o atributos (datos), de un comportamiento o funcionalidad (métodos) y de sus posibles relaciones con otros objetos. El concepto de objeto tiene un equivalente al objeto de nuestro mundo real. En nuestro entorno siempre estamos en constante relación con objetos: los creamos, los usamos, los modificamos cambiando sus atributos, características o propiedades, los relacionamos con otros objetos, etc.

¿Podríamos hacer la representación de un objeto del mundo real?

Según nos indica el modulo, desde el punto de vista computacional es posible representar lógicamente cualquier objeto del mundo real. Para una solución software un objeto es un elemento especial de información que se construye a partir de una estructura de datos y una estructura funcional.

Podemos definir objeto como el "encapsulamiento de un conjunto de operaciones (métodos) que pueden ser invocados externamente, y de un estado que recuerda el efecto de los servicios".

La programación orientada a objetos se acerca más al mundo real estructurando en un mismo elemento de información datos y procedimientos.

Características de datos: Por ejemplo hora, minutos y segundos

El ejemplo de la sección anterior muestra que por medio de la abstracción tu creas una entidad bien definida que puede ser adecuadamente manejada. Estas entidades definen la estructura de datos de un conjunto de elementos. Por ejemplo, cada empleado administrado tiene un nombre, fecha de nacimiento y número social.

La estructura de los datos puede ser accesada solamente por medio de operaciones definidas. Este conjunto de operaciones es llamado interface y es exportada por la entidad. Una entidad con las propiedades recién descritas se conoce como un tipo de datos abstracto (TDA).

Page 3: Colaborativo No 1

Características funcionales: Por ejemplo mostrar la hora, actualizar la hora y siendo más

ambiciosos mostrar la hora en segundos, mostrar la hora en minutos o sumar y restar horas.

¿Qué es un mensaje?

Un mensaje es un encargo de decir o llevar una cosa. Más puntualmente, podemos definir un mensaje como el llamado que se hace a un objeto para que ejecute una de sus operaciones. Para que el objeto funcione se le debe enviar un mensaje adecuado, que sea identificado por el mismo objeto.

Un objeto por sí solo no tiene mucho significado. Ejemplo: el objeto "bicicleta" no tiene mucho sentido si no interactúa con un objeto "persona" que pedalee.

La interacción entre objetos se produce mediante mensajes. Los mensajes son llamados a métodos de un objeto en particular.

Podemos decir que el objeto persona envía el mensaje "girar a la izquierda" al objeto bicicleta.

Los mensajes pueden contener parámetros. Por ejemplo teniendo un método en la clase bicicleta llamado "Girar" que recibe como parámetro la dirección (derecha o izquierda).

Un mensaje está compuesto por los siguientes tres elementos:

1. El objeto destino, hacia el cual el mensaje es enviado 2. El nombre del método a llamar 3. Los parámetros solicitados por el método

Capítulo 2. Introducción y elementos básicos de programación orientada a objetos (poo)

Introducción

Un método de implementación en el que los programas se organizan como colecciones cooperativas de objetos, cada una de las cuales representan una instancia de alguna clase, y cuyas clases son todas miembros de una jerarquía de clases unidas mediante relaciones de herencia” Booch.

Actualmente una de las áreas más importantes en la industria y el ámbito académico es la orientación a objetos. La orientación a objetos promete mejoras de amplio alcance en la forma de diseño, desarrollo y mantenimiento del software ofreciendo una solución a largo

Page 4: Colaborativo No 1

plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo del software: la falta de portabilidad del código y reusabilidad, código que es difícil de modificar, ciclos de desarrollo largos y técnicas de codificación no intuitivas.

Ventajas de POO.

La programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.

Las ventajas más importantes son las siguientes:

- Fomenta la reutilización y extensión del código.

- Relacionar el sistema al mundo real.- Permite crear sistemas más complejos.

- Facilita la creación de programas visuales.

- Construcción de prototipos.

- Agiliza el desarrollo de software.

- Facilita el trabajo en equipo.

- Facilita el mantenimiento del software.

- Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible.

- Los programas son fáciles de diseñar debido a que los objetos reflejan elementos del mundo real.

- Las aplicaciones son más sencillas para los usuarios debido a que los datos innecesarios están ocultos.

- Los objetos son unidades auto contenidas.

- La productividad se incrementa debido a que puede reutilizar el código.

- Los sistemas son fáciles de mantener y se adaptan a las cambiantes necesidades de negocios.

- Es más fácil crear nuevos tipos de objetos a partir de los ya existentes.

- Simplifica los datos complejos.

- Reduce la complejidad de la transacción.

- Confiabilidad.

- Robustez.

Page 5: Colaborativo No 1

- Capacidad de ampliación.

- Permite mostrar la magnitud de los lenguajes de programación basada en objetos.

- Crea sistemas más flexibles, que en un futuro son modificables.

Desventajas de la tecnología orientada a objetos.

No todos los programas pueden ser modelados con exactitud por el modelo de objetos. Si lo que se desea es leer algunos datos, hacer algo simple y escribir de nuevo, no tiene necesidad de definir clases y objetos. Sin embargo, en algunos lenguajes de POO, puede que se tenga que realizar este paso extra. Otra desventaja es que si se fuerza el lenguaje en el concepto de programación orientada a objetos, se pierden algunas de las características de los lenguajes útiles, como los "lenguajes funcionales". Otra desventaja el que concepto que un programador tiene de lo que constituye un objeto abstracto puede no coincidir con la visión de otro programador. Los objetos a menudo requieren una extensa documentación.

Un gran porcentaje de programadores no están familiarizados con los conceptos de dicha tecnología. En otras palabras, la lógica de la programación estructurada sigue siendo predominante en la mayoría de los desarrolladores de software, después de haber revisado de forma breve los principios de la programación orientada a objetos, nos es claro que en ésta se requiere una lógica de pensamiento totalmente diferente a la lógica comúnmente utilizada para la programación estructurada.

Evolución de la programación

A continuación nombraremos la evolución más notable que ha tenido la POO.

La Programación Orientación a Objetos (P.O.O.) surge en Noruega en1967 con un lenguaje llamado Simula 67, desarrollado por Krinsten Nygaard y Ole-Johan Dahl, en el centro de cálculo noruego.

Page 6: Colaborativo No 1

Simula 67 introdujo por primera vez los conceptos de clases, corrutinas y subclases (conceptos muy similares a los lenguajes Orientados a Objetos de hoy en día).

El nacimiento de la Programación Orientación a Objetos en Europa pasó inadvertido para gran parte de los programadores. Hoy tenemos la Orientación a Objetos como un niño de 33 años al que todos quieren bautizar.

Uno de los problemas de inicio de los años setentas era que pocos sistemas lograban terminarse, pocos se terminaban con los requisitos iniciales y no todos los que se terminaban cumpliendo con los requerimientos se usaban según lo planificado. El problema consistía en cómo adaptar el software a nuevos requerimientos imposibles de haber sido planificados inicialmente.

Este alto grado de planificación y previsión es contrario a la propia realidad. El hombre aprende y crea a través de la experimentación, no de la planeación. La Orientación a Objetos brinda estos métodos de experimentación, no exige la planificación de un proyecto por completo antes de escribir la primera línea de código.

En los 70’s científicos del centro de investigación en Palo Alto Xerox (Xerox park) inventaron el lenguaje Small talk que dio respuesta al problema anterior (investigar no planificar).

Small talk fue el primer lenguaje Orientado a Objetos puro de los lenguajes Orientados a Objetos, es decir, únicamente utiliza clases y objetos (Java usa tipos de datos primitivos, o bien los Wrappers que son clases que encapsulan tipos de datos primitivos).

Quien tuvo la idea fue D. Parnas cuando propuso la disciplina de ocultar la información. Su idea era encapsular cada una de las variables globales de la aplicación en un solo módulo junto con sus operaciones asociadas, sólo mediante las cuales se podía tener acceso a esas variables.

El resto de los módulos (objetos) podían acceder a las variables sólo de forma indirecta mediante las operaciones diseñadas para tal efecto.

En los años 80’s Bjarne Stroustrup de AT&T Labs., amplió el lenguaje C para crear C++ que soporta la programación Orientada a Objetos.

En esta misma década se desarrollaron otros lenguajes Orientados a Objetos como Objective C, Common Lisp Object System (CIOS), object Pascal, Ada y otros.

Posteriores mejoras en herramientas y lanzamientos comerciales de C++ por distintos fabricantes, justificaron la mayor atención hacia la programación Orientada a Objetos en la comunidad de desarrollo de software. El desarrollo técnico del hardware y su disminución del costo fue el detonante final. Con más computadoras al alcance de más personas más programadores, más problemas y más algoritmos surgieron.

Page 7: Colaborativo No 1

En el inicio de los 90’s se consolida la Orientación a Objetos como una de las mejores maneras para resolver problemas. Aumenta la necesidad de generar prototipos más rápidamente (concepto RAD Rapid Aplication Developments). Sin esperar a que los requerimientos iniciales estén totalmente precisos.

En 1996 surge un desarrollo llamado JAVA (extensión de C++). Su filosofía es aprovechar el software existente. Facilitar la adaptación del mismo a otros usos diferentes a los originales sin necesidad de modificar el código ya existente.

En 1997-98 se desarrollan herramientas ‘CASE’ orientadas a objetos (como el diseño asistido por computadora).

Del 98 a la fecha se desarrolla la arquitectura de objetos distribuidos RMI, Corba, COM, DCOM.

Actualmente la orientación a objetos parece ser el mejor paradigma, no obstante, no es una solución a todos los problemas. Trata de eliminar la crisis del software. Entre los creadores de metodologías orientadas a objetos se encuentran: G. Booch, Rambaught, Ivar Jacobson y Peter Cheng.

Comparación entre la Programación orientada a Objetos y la programación estructurada.

PROGRAMACION ESTRUCTURADA PROGRAMACION ORIENTADA A OBJETO

VENTAJAS DESVENTAJAS VENTAJAS DESVENTAJAS

Datos separados del Diseño.

Reutilización del código.

Entendimiento del programa en el mundo real.

Fácil entendimiento de la lógica del programa.

Código simple (aunque cueste acostumbrarse).

Fácil documentación y diseño del programa.

Dinamismo en el manejo de los datos.

Facilidad en el mantenimiento y expansión.

Complejidad para adaptarse.

Mayor cantidad de código (aunque a la larga no, por la reutilización).

Reusabilidad.

Extensibilidad.

Facilidad de mantenimiento.

Portabilidad.

Rapidez de Desarrollo.

Más fáciles de entender porque se utilizan abstracciones más cercanas a la realidad.

Curvas de aprendizaje largas

Dificultad en la abstracción

Limitaciones para el programador.

Tamaño excesivo en las aplicaciones resultantes.

Cuando se heredan clases a partir de clases existentes se heredan de forma implícita todos los miembros de dicha clase aun cuando no todos se necesiten, lo que produce aplicaciones muy grandes que no siempre encajan en los sistemas con los que se disponga.

Page 8: Colaborativo No 1

Velocidad de ejecución (cómo resultado del punto anterior)

La Programación estructurada fija su atención en el conjunto de acciones que manipulan el flujo de datos, mientras que la POO se fija en la interrelación que existe.

Las diferencias más comunes entre la programación estructurada y la programación orientada a objetos son: Aunque la programación estructurada (a veces llamada procedural o procedimental) condujo a mejoras de la técnica de programación secuencial, los métodos modernos de diseño de software orientado a objetos incluyen mejoras entre las que están el uso de los patrones de diseño, diseño por contrato, y lenguajes de modelado.

La programación orientada a objetos es más moderna, es una evolución de la programación estructurada que plasma en el diseño de una familia de lenguajes conceptos que existían previamente con algunos nuevos.

La programación orientada a objetos se basa en lenguajes que soportan sintáctica y semánticamente la unión entre los tipos abstractos de datos y sus operaciones (a esta unión se la suele llamar clase).

La programación orientada a objetos incorpora en su entorno de ejecución mecanismos tales como el polimorfismo y el envío de mensajes entre objetos.

Erróneamente se le adjudica a la programación estructurada clásica ciertos problemas como si fueran inherentes a la misma. Esos problemas fueron haciéndose cada vez más graves y antes de la programación orientada a objetos diversos autores (de los que podemos destacar a Yourdon) encontraron soluciones basadas en aplicar estrictas metodologías de trabajo.

Capítulo 3. Propiedades Básicas De La Programación Orientada a Objetos

Algunas de las causas que están influyendo considerablemente en el notable desarrollo de las técnicas orientadas a objetos son: La OO (orientación a objetos) es especialmente adecuada para realizar determinadas aplicaciones, sobre todo realización de prototipos y simulación de programas, los mecanismos de encapsulación de POO soportan un alto grado de reutilización de código, que se incrementa por sus mecanismos de herencia. En el entorno de la base de datos, la OO se adjunta bien a los modelos semánticos de datos para solucionar las limitaciones de los modelos tradicionales.

El aumento espectacular de los lenguajes de programación orientados a objetos. Interfaces de usuarios gráficos (por iconos) y visuales. Las interfaces de usuarios de una aplicación manipulan la entrada y salida del usuario. Por consiguiente, su función principal es la comunicación con el usuario final. El término Programación Orientada a Objetos (POO), hoy en día ampliamente utilizado, es difícil de definir, ya que no es un concepto nuevo, sino que ha sido el desarrollo de técnicas de programación desde principios de la década de los

Page 9: Colaborativo No 1

setenta, aunque sea en la década de los noventa cuando ha aumentado su difusión, uso y popularidad. No obstante, se puede definir POO como una técnica o estilo de programación que utiliza objetos como bloque esencial de construcción.

Abstracción:

Es una descripción de especificación que enfatiza algunos de los detalles o propiedades de algo. La abstracción consiste en captar las características esenciales de un objeto, así como su comportamiento.

Cada objeto en el sistema sirve como modelo de un "agente" 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 los están, una variedad de técnicas son requeridas para ampliar una abstracción.

Encapsulación:

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. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

La encapsulación se encarga de mantener ocultos los procesos internos que necesita para hacer lo que sea que haga, dándole al programador acceso sólo a lo que necesita.

También llamada "ocultación de la información", esto asegura que los objetos no pueden cambiar el estado interno de otros objetos de maneras inesperadas; solamente los propios métodos internos del objeto pueden acceder a su estado.

Modularidad:

Según Microsoft en su página web es el proceso de crear partes de un todo que se integran perfectamente entre sí para que funcionen por un objetivo general, y a las cuales se les pueden agregar más componentes que se acoplen perfectamente al todo, o extraerle componentes sin afectar su funcionamiento. En el caso que se requiera actualizar un módulo, no hay necesidad de hacer cambios en otras partes del todo. Un ejemplo clásico es un conjunto de módulos que, al integrarlos conforman un armario, el cual puede agregarle más funcionalidad si se le agregan más módulos, o al contrario. También se puede cambiar su finalidad si se acomodan esos módulos para darle otro objetivo: volverlo una mesa.

Page 10: Colaborativo No 1

La modularidad consiste en dividir un programa en módulos que se puedan compilar por separado, pero que tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la Modularidad de diversas formas.

La Modularidad es la propiedad de un sistema que permite su descomposición en un conjunto de módulos cohesivos y débilmente acoplados. Por supuesto no todos los módulos son iguales: tomar un programa monolítico y separarlo de forma aleatoria en archivos no es óptimo. Se debe tener en cuenta los conceptos asociados de dependencia, acoplamiento, cohesión, interfaz, encapsulación y abstracción. Una vez identificado lo que es un buen módulo, se puede contemplar la reutilización de un buen módulo como componente.

Jerarquía:

Es el nivel de flujo de información de herencia que se presenta en alguna eventualidad donde se involucran objetos que, por ser comunes y/o diferentes obtiene más datos de otros objetos y así usarlos o generar nuevos datos específicos. Por ejemplo: un doctor y un taxista son personas, por lo tanto heredan de estos algunos atributos como nombre, cedula y edad, pero estos dos se diferencian en su trabajo. Mientras no hay ningún otro tipo de taxista el doctor tiene muchísimas especializaciones (cirujano, pediatra, dentista etc.) cada uno de ellos (cirujano, pediatra, dentista...) es un doctor por lo tanto heredan del doctor características como doctorado, años de trabajo, sueldo etc. como ves tienes dos niveles donde se muestra jerarquía de herencia.

Polimorfismo:

Se refiere a la posibilidad de enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.

Bibliografía.

http://www.aulaclic.es/macros-excel/t_2_1.htm

http://www.ciberaula.com/articulo/tecnologia_orientada_objetos/

http://msdn.microsoft.com/es-es/library/bb972232.aspx

Page 11: Colaborativo No 1