miércoles, 14 de julio de 2010



NUEVAS CORRIENTES DE LENGUAJES

La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas de ordenador. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos La programación Orientada a Objeto se convirtió en la corriente dominante. El último factor que ha propulsado OOA&D, (Object Oriented Analysis and Design; OOA&D), ha sido su idoneidad para modelar interfaces gráficos de usuario. La popularidad de lenguajes gráficos orientados a objeto y basados en objeto como Visual Basic y Java refleja la efectividad de este enfoque.

Los objetos son entidades que combinan estado (atributo), comportamiento (método) e identidad:

§ El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).

§ El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él.

§ La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).

Existe un acuerdo acerca de qué características contempla la "orientación a objetos", las características siguientes son las más importantes:

§ Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos.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 lo están, una variedad de técnicas son requeridas 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. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

§ Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que específica 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. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

§ Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

§ Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. 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.

§ Recolección de basura: la Recolección de basura o Garbage Collector es la técnica por la cual el ambiente de Objetos se encarga de destruir automáticamente, y por tanto desasignar de la memoria, los Objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo Objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de Programación Orientada a Objetos como C++ u Object Pascal, esta característica no existe y la memoria debe desasignarse manualmente.

Los objetos interactúan enviando y recibiendo mensajes. El programador se concentra en cómo las acciones de cada uno de estos objetos se coordinan y cómo se comunican entre sí. El programador no necesita saber cómo un objeto en particular lleva a cabo su función.

Entre los lenguajes orientados a objetos se destacan los siguientes:

§ ActionScript; fue originalmente un lenguaje de creación de scripts, en ActionScript 3.0 la compatibilidad con la programación orientada a objetos es opcional. Esto proporciona a los programadores la flexibilidad de elegir el mejor enfoque para proyectos de ámbito y complejidad variables. Para tareas pequeñas, es posible que sea suficiente con utilizar un paradigma de programación mediante procedimientos. Para proyectos más grandes, los principios de la programación orientada a objetos pueden facilitar la comprensión, el mantenimiento y la ampliación del código.

C es el principal lenguaje de programación en todos los sistemas operativos y plataformas. El lenguaje C original, fue desarrollado por Kernighan y Ritchie en 1972, en la ATT. El estándar de C original estaba el libro escrito en 1978 por estos dos autores. (B. Kernighan and D. Ritchie, The C Programming Language, Prenctice-Hall, 1978.)

§ EL ANSI C Fue creado con el objetivo con el objetivo estandarizar un lenguaje uniforme a partir del C original. Este fue estandarizado por el "comité para el estándar ANSI C" en 1983

§ El lenguaje C++ se desarrollo a partir de 1980 y su autor fue B. Stroustrup, también de la ATT. El C++ era inicialmente era una extensión del lenguaje C que fue llamada "C with classes". A partir de de 1983 este lenguaje empezó a ser llamado C++ y utilizado fuera de la ATT. En nombre C++ se refiere al carácter del operador incremento de C (++). Este lenguaje tuvo gran difusión y éxito en el mundo de los programadores y la ATT comenzó a estandarizarlo internamente en 1987.

En 1989 se formó un comité ANSI C++ que fue seguido algún tiempo después por un comité ISO, quienes se encargaron de estandarizarlo a nivel americano e internacional. Actualmente el C++ es un lenguaje muy versátil, potente y general. Su éxito entre los programadores profesionales le ha llevado a ocupar el primer puesto como herramienta de desarrollo de aplicaciones y hasta es el preferido para compilar la mayor parte de sistemas operativos como Linux y Windows.

El C++ tiene las mismas las ventajas del C en cuanto a riqueza de operadores y expresiones, flexibilidad, concisión y eficiencia. Además, ha eliminado algunas de las dificultades y limitaciones del C original.

JAVA> La evolución de C++ ha continuado con la aparición de Java, un lenguaje creado simplificando algunas cosas de C++ y añadiendo otras, que se utiliza para realizar aplicaciones en Internet como la tecnología Microsoft C##. Hay que señalar que el C++ ha influido en algunos puntos muy importantes del ANSI C, como por ejemplo en la forma de declarar las funciones, en los punteros a void, etc. En efecto, aunque el C++ es posterior al C, sus primeras versiones son anteriores al ANSI C, y algunas de las mejoras de éste fueron tomadas del C++. En estas Notas se van a presentar los fundamentos del lenguaje C++ tradicional a partir del lenguaje C. Su descripción se va a realizar en dos partes: una inicial en la que se contemplan las modificaciones y una posterior con los añadidos.

El C++ es a la vez un lenguaje procedural (orientado a algoritmos) y orientado a objetos. Como lenguaje procedural se asemeja al C y es compatible con él. Como lenguaje orientado a objetos se basa en una filosofía completamente diferente, que exige del programador un completo cambio de mentalidad. Las características propias de la Programación Orientada a Objetos (Object Oriented Programming, u OOP) de C++ son modificaciones mayores que sí que cambian radicalmente su naturaleza.

Cualquier programador debe diferenciar a simple vista la diferencia entre un archivo C y un C++. :los archivos o ficheros fuente de C++ tienen la extensión *.cpp (c plus plus) en lugar de *.c

Una de las ventajas del ANSI y el C++ es permiten incluir comentarios en el código con dos barras consecutivas (//) hasta el fin de la línea 2. Mientras que anteriormente había que marcar siempre el final con /* */.

También se incluyen variables tipo enum. Ejemplo: enum ( CERO, PRIMERO, SEGUNDO, TERCERO} es igual que declarar CERO=0, PRIMERO=1, SEGUNDO=2, TERCERO=3

El C++ incluye la deficion de variables multiples tip estructuras con "struct". Ejemplo: struct persona { int cedula; char[100] nombre; char[100] apellido1; char[100] direccion; }

Otras ventajas introducidas por el C++ son: scope de variables automatic (default) y static. Para mejorar la opcion #define se incluye una especificacion de variables constantes tipo "const" que estan sometidas a las mismas reglas de visibilidad que otras variables (como static). - También se introducen conversiones explicitas de tipo como int x = (int) (y/z); - Asimismo se incluyen las funcionen inline que son sustituidas por el compilador. Ejemplo: inline int copiar (int *x, int *y) { *x = *y; } Tambien introduce punteros tipo void. Operadores new y delete para gestion dinamica de mejoria.

§ C#; ¿Qué es? C# es un lenguaje de propósito general orientado a objetos creado por Microsoft para su plataforma .NET. Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes. C# fue diseñado para combinar el control a bajo nivel de lenguajes como C y la velocidad de programación de lenguajes como Visual Basic.

§ Object Pascal (Delphi), es un lenguaje de programación de alto nivel de propósito general; esto es, se puede utilizar para escribir programas para fines científicos y comerciales. El lenguaje de programación Pascal fue desarrollado por el profesor Niklaus (Nicolás) Wirth en Zurich, Zuiza, al final de los años 1960s y principios de los 70s. Wirth diseñó este lenguaje para que fuese un buen primer lenguaje de programación para personas comenzando a aprender a programar. Pascal tiene un número relativamente pequeño de conceptos para aprender y dominar. Su diseño facilita escribir programas usando un estilo que está generalmente aceptado como práctica estándar de programación buena. Otra de las metas del diseño de Wirth era la implementación fácil. Él diseñó un lenguaje para el cual fuese fácil escribir un compilador para un nuevo tipo de computadora. Delphi es un entorno de desarrollo de software diseñado para la programación de propósito general con énfasis en la programación visual. En Delphi se utiliza como lenguaje de programación una versión moderna de Pascal llamada Object Pascal. Es producido comercialmente por la empresa estadounidense Code Gear?. En sus diferentes variantes, permite producir archivos ejecutables para Windows, Linux y la plataforma .NET.

§ Java, El lenguaje de programación Java, fue diseñado por la compañía Sun Microsystems Inc., con el propósito de crear un lenguaje que pudiera funcionar en redes computacionales heterogéneas (redes de computadoras formadas por más de un tipo de computadora, ya sean PC, MAC’s, estaciones de trabajo, etc.), y que fuera independiente de la plataforma en la que se vaya a ejecutar. Esto significa que un programa de Java puede ejecutarse en cualquier máquina o plataforma.

§ JavaScript (la herencia se realiza por medio de la programación basada en prototipos), Java Script ¿Qué es? Se trata de un lenguaje de programación del lado del cliente, porque es el navegador el que soporta la carga de procesamiento. Gracias a su compatibilidad con la mayoría de los navegadores modernos, es el lenguaje de programación del lado del cliente más utilizado.

§ Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede modificarse al algoritmo linearization C3 por medio del módulo Class::C3 en CPAN)

§ PHP (a partir de su versión 5), PHP ¿Qué es? PHP usa una mezcla entre interpretación y compilación para intentar ofrecer a los programadores la mejor mezcla entre rendimiento y flexibilidad. PHP compila para tu código una serie de instrucciones (llamadas opcodes) siempre que estas son accedidas. Estas instrucciones son entonces ejecutadas una por una hasta que el script termina. Esto es diferente a la manera convencional de compilación de lenguajes como C++ donde el código es compilado a código ejecutable que es después ejecutado. Php es recompilado cada vez que se solicita un script.

§ Python, es un lenguaje de programación dinámica orientada a objetos que puede ser usado para el desarrollo de toda clase de software, es utilizado ampliamente por la NASA, Google, Linperial, etc. Ofrece soporte para la integración con otros lenguajes y herramientas y viene con una gran cantidad de bibliotecas estándar. El interprete/compilador de Python se encuentra disponible en Linux y en plataformas como Java y Mac OS X.

§ Ruby, y Ruby on Rails ¿Qué es? Ruby on Rails, también conocido como RoR o Rails es un Framework de aplicaciones Web de código abierto escrito en el lenguaje de programación Ruby. Ruby apareció en el año 1995 y creo que su principal problema había sido la falta de documentación en otro idioma que no sea japonés. Eso se ha ido solucionando y crece la popularidad del lenguaje. Su aplicación insignia, por decirlo de algún modo parece ser RoR. Su mecanismo de gem se me parece al CPAN de Perl y al Pear de PHP.

§ Visual Basic 6.0, Visual Basic es un lenguaje de programación desarrollado por Alan Cooper para Microsoft. El lenguaje de programación es un dialecto de BASIC, con importantes añadidos. Su primera versión fue presentada en 1991 con la intención de simplificar la programación utilizando un ambiente de desarrollo completamente gráfico que facilitara la creación de interfaces gráficas y en cierta medida también la programación misma.

§ Visual Objects, Visual Fox Pro es un lenguaje de programación orientado a objetos y procedural, un Sistema Gestor de Bases de datos o Database Management System (DBMS), y desde la versión 7.0, un Sistema administrador de bases de datos relacionales, producido por Microsoft.

Lenguaje de programación Scala (Lenguaje usado por Twister) http://www.scala-lang.org/

Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino que son híbridos que combinan la POO con otros paradigmas.

Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de programación clásico.

Un nuevo paso en la abstracción de paradigmas de programación es la Programación Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en todo el mundo.

Java es un lenguaje de programación orientado a objetos. La orientación a objetos es uno de los mayores cambios que ha sufrido la programación en los últimos años. La idea detrás de este concepto es que cada objeto (datos) tiene asociado un conjunto de funciones (programa) que permiten manipular estos datos. De esta forma tenemos un conjunto de datos con las funciones que utilizaremos para manipularlos permitiendo fácilmente crear componentes reutilizables. Es ampliamente reconocido que los lenguajes orientados a objetos permiten crear aplicaciones más robustas, claras y fáciles de mantener. Hoy en día, el lenguaje orientado a objetos más utilizado es C++ pero aún arrastra algunas limitaciones de su antecesor, el C. Java, que fue creado desde cero, y que no arrastra ninguna herencia, es un lenguaje creado a semejanza del C++ pero mucho más sencillo y claro.

No hay comentarios:

Publicar un comentario