Antecedentes de La Programación Orientada a Objetos

6
ANTECEDENTES DE LA PROGRAMACIÓN ORIENTADA A OBJETOS A partir de la década de los 70 se originó la llamada Crisis del Software debido a una serie de problemas encontrados en el desarrollo de sistemas para computadoras. La crisis también se derivó de la contradicción entre el desarrollo del hardware y su aprovechamiento a través del software, esto es, que se dedicó poco esfuerzo al desarrollo de metodologías para la creación del software, creando un atraso de entre una y dos generaciones entre los microprocesadores y el software que los manipula. Las respuestas a estos problemas fueron entre otras: Programación estructurada en los lenguajes de programación. Modularidad y organización de bibliotecas. Estas mejoras no fueron suficientes para resolver el problema ya que no se consideró: Recursos humanos para el mantenimiento consistente en adaptar el software a nuevos requerimientos imposibles de haber sido planificados inicialmente. Errores del software, esto es, resultados erróneos. Altos costos y tiempo de desarrollo muy largos. El análisis era deficiente, lo cual derivaba cambios y adaptaciones. Problemas de comunicación entre los diferentes módulos al momento de la unión. Sistemas poco flexibles y confiables. Esto ocurre cuando el sistema no cubre las necesidades del usuario final, es decir o No proporciona la información que el usuario requiere. o Información no confiable. o Sistemas difícil de manipu

description

programacion

Transcript of Antecedentes de La Programación Orientada a Objetos

Page 1: Antecedentes de La Programación Orientada a Objetos

ANTECEDENTES DE LA PROGRAMACIÓN ORIENTADA A OBJETOS

A partir de la década de los 70 se originó la llamada Crisis del Software debido a una serie de problemas encontrados en el desarrollo de sistemas para computadoras. La crisis también se derivó de la contradicción entre el desarrollo del hardware y su aprovechamiento a través del software, esto es, que se dedicó poco esfuerzo al desarrollo de metodologías para la creación del software, creando un atraso de entre una y dos generaciones entre los microprocesadores y el software que los manipula.

Las respuestas a estos problemas fueron entre otras:

Programación estructurada en los lenguajes de programación.

Modularidad y organización de bibliotecas.

Estas mejoras no fueron suficientes para resolver el problema ya que no se consideró:

Recursos humanos para el mantenimiento consistente en adaptar el software a nuevos requerimientos imposibles de haber sido planificados inicialmente.

Errores del software, esto es, resultados erróneos.

Altos costos y tiempo de desarrollo muy largos.

El análisis era deficiente, lo cual derivaba cambios y adaptaciones.

Problemas de comunicación entre los diferentes módulos al momento de la unión.

Sistemas poco flexibles y confiables. Esto ocurre cuando el sistema no cubre las necesidades del usuario final, es decir

o No proporciona la información que el usuario requiere.

o Información no confiable.

o Sistemas difícil de manipu

Los especialistas en software llegaron a la conclusión de que en cualquier técnica que trate de resolver los problemas antes mencionados, el desarrollo de sistemas deberá contemplar las siguientes características:

Entender el problema y dominarlo

Comunicación entre personas

Prever cambios continuos

Reutilizar el código

Page 2: Antecedentes de La Programación Orientada a Objetos

Entonces surge como una alternativa el enfoque orientado a objetos. Es importante señalar que la programación orientada a objetos no es una revolución, sino que surge como resultado de la evolución de los lenguajes de programación de tercera generación y de la necesidad de idear nuevos métodos y metodologías para enfrentar el análisis, diseño y codificación de sistemas complejos de software

En 1967 se desarrolló SIMULA, que es un lenguaje para aplicaciones de simulación y se le considera como el precursor en la introducción del concepto de objeto.

En los 70's el modelo de objeto se amplia y surge el primer lenguaje de Programación Orientada a Objetos (POO) llamado Smalltalk. A fines de los años 80's surge Eiffell, Actor, C++, Objetive C, que son lenguajes con potencialidad para el desarrollo de aplicaciones complejas.

En 1995 surge Java para la programación del Web-Internet.

ENFOQUE ORIENTADO A OBJETOS

El concepto de la tecnología de POO es la conexión de procedimientos de programas y de datos. Los datos y procedimientos (o métodos) se amalgaman dentro de una clase, al ocultamiento de esa información se le llama encapsulamiento y sólo se deja una interfaz para que exista interaccción con el exterior. A partir de ella se pueden generar objetos de software que tendrán las mismas características y funcionalidades de la clase de la que provienen.

En la programación orientada a objetos lo principal es la relación entre los datos y las funciones, esto es, un programa contiene objetos que responden a los mensajes que se les envían.

En la programación, un mensaje (o un llamado a una función) es simplemente una petición a un objeto para que haga algo. Un objeto contiene datos y acciones o las tarea que el objeto es capaz de realizar. Las acciones llamadas funciones miembro o métodos son parte de los objetos y se implementan mediante la realización de las funciones.

VENTAJAS DE LA PROGRAMACIÓN Y MÉTODOS ORIENTADOS A OBJETOS

Existen aspectos que hacen que la POO mejore la calidad de los sistemas. Estos aspectos son principalmente la abstracción, modularidad, extensibilidad y reutilización.

ABSTRACCIÓN: consiste en elevar el nivel de las representaciones necesarias para un sistema de software, de manera que se reduzcan los detalles. Por ejemplo, aunque sería posible representar un programa en código binario, ninguna persona es capaz de comprender una aplicación partiendo de 0 y 1. Esto requeriría de programas más extensos, a diferencia de los sistemas de software construidos con lenguajes de programación de más alto nivel, los cuales reducen el

Page 3: Antecedentes de La Programación Orientada a Objetos

número total de líneas del código. Con la POO se definen dos niveles de abstracción: el de los objetos y se utiliza para describir la aplicación; y el de los datos y funciones que se usa para describir sus detalles.

MODULARIDAD: permite dividir un sistema en componentes separados, lo que facilita su operación y mantenimiento. El número final de módulos u objetos es menor que el número de datos y funciones. Esto reduce la complejidad de la aplicación, ya que el programador piensa en menos componentes a la vez, descartando detalles innecesarios.

EXTENSIBILIDAD: se refiere a la facilidad de modificar un sistema durante la vida del mismo y dada una aplicación general poder crear, a partir de ella, otras más especializadas. Los sistemas compuestos por múltiples módulos facilitan la extensibilidad dado que los cambios en el sistema se pueden reducir a cambios en módulos particulares y no en todo el sistema a la vez.

REUTILIZACIÓN: se refiere al reúso de componentes. La reutilización reduce el tiempo de diseño, codificación y costo del sistema. Mediante la reutilización se aprovechan componentes o bibliotecas ya desarrolladas, logrando una mejor estandarización y simplificación en las aplicaciones. En general el mayor problema de la reutilización radica en construir componentes genéricos, sencillos con interfaces bien definidas y que pueden utilizarse en varias áreas de aplicación.

LENGUAJES DE PROGRAMACIÓN ORIENTADOS A OBJETOS

En este caso las unidades de datos se consideran objetos activos. La característica principal de los lenguajes orientados a objetos es la capacidad de representar definiciones de objetos a modo de esqueletos que pueden usarse una y otra vez para construir múltiples objetos con las mismas propiedades o modificarse para construir nuevos objetos con propiedades similares. Algunos ejemplos de lenguajes de programación orientada a objetos son

SIMULA (1962): El primer sistema con objetos fue B1000 en 1961, seguido por Sketchpad en 1962, el cual contenía clones o copias de objetos o instancias. Sin embargo, SIMULA I fue el primer lenguaje completamente orientado a objetos, estructurado mediante objetos y clases. Fue creado por Ole Dahl y Kristen Nygaard del Centro de Cómputo de Noruega, Oslo, en 1962.

Smalltalk (1972) : Creado por Alan Kay en Xerox Park, también diseñador de la primera computadora personal basada en POO, FLEX DE 1967 a 1968. La primera versión fue conocida como Smalltalk 72, cuyas raíces fueron SIMULA 67, siguiendo Smalltalk 76, versión totalmente orientada a objetos. El lenguaje Smalltalk ha influido en muchos lenguajes como C++, Java, etc. y aún es muy utilizado.

Modula (1980) : La versión original de este lenguaje se llamó MODULA-2 y fue desarrollada por Nicklaus Wirth a mediados de los 70´s como descendiente directo de PASCAL. Este lenguaje incluía concurrencia y ciertos aspectos de la orientación a objetos.

Page 4: Antecedentes de La Programación Orientada a Objetos

Ada (1983) : fue diseñado por Jean Ichibah del Departamento de la Defensa de Estados Unidos en 1977, para apoyar la programación a gran escala y promover la robustez del software. Se denominó como Ada en honor de Lady Ada Lovelace (1815-1852), considerada la primer programadora en la historia. Aunque la versión original de este lenguaje no era orientada a objetos, la última versión, Ada 95, si lo es.

Objetive C (1983) : fue diseñado por Brad Cox como una extensión a C pero con orientación a objetos. Tiene influencia de Smalltalk 80. Se hizo popular debido a su utilización en la computadora NeXT, incluyendo una interfaz bajo el ambiente NEXTSTEP, conocido luego como OpenStep, y actualmente adquirido por Apple como base de un nuevo sistema operativo MacOS X.

BETA (1983) : fue desarrollado por Ole Lehrmann Madsen en la Universidad de Aarhus en Dinamarca. Beta es un lenguaje orientado a objetos inspirado en SIMULA con sintaxis similar a PASCAL y a C.

C++ (1985) : fue diseñado por Bjarne Stoustrup de AT&T Bell Labs entre 1984 y 1985. C++ agrega mecanismos de orientación a objetos al lenguaje C, lo que lo hace un lenguaje hibrido.

Eiffel (1986) : Se llama así en honor a la torre de Paris. Lo diseño Bertrand Meyer como un lenguaje orientado a objetos con una sintaxis similar a C. El diseño del lenguaje basado en Eiffel apoya un enfoque de ingeniería de software conocido como diseño por contrato.

Self (1986) : Fue diseñado por David Ungar y Randall Smith en Sun Microsystem, su sintaxis es similar a Smalltalk aunque sin incluir la noción de clases en el lenguaje. En lugar de instaciar clases, los objetos se obtienen de otros objetos (sus prototipos) por medio de copiado y refinado.

Haskell (1986) : Fue desarrollado por un comité (Hughes, Wadler, Peterson y otros) que lo bautizó así en honor a Haskell Brooks Curry, cuyo trabajo en lógica matemática sirve como fundamento en los lenguajes funcionales. Haskell esta muy influido po LISP, aunque fue extendido con algunos mecanismos de la orientación a objetos para ser más moderno.

Java (1995) : Fue diseñado por Gosling de Sun Microsystems entre 1994 y 1995, es el lenguaje orientado a objetos más utilizado en la actualidad. Es sencillo y portátil, muy similar a C++, aunque tomando ideas de Modula-3, Smalltalk y Objetive C.

C # (2000) : Este lenguaje es conocido con Sharp, fue diseñado por Microsoft. Es una extensión a C con orientación a objetos, inspirado en C++ y Java. El lenguaje evita muchos de los problemas de diseño de C++.