domingo, 20 de octubre de 2013

-Paradigmas

¿Que es un paradigma?

Un paradigma de programación es una propuesta tecnológica que es adoptada por una comunidad de programadores cuyo núcleo central es incuestionable en cuanto a que únicamente trata de resolver uno o varios problemas claramente delimitados. 

Es un estilo de programación empleado. La resolución de estos problemas debe suponer consecuentemente un avance significativo en al menos un parámetro que afecte a la ingeniería de software.

 Tiene una estrecha relación con la formalización de determinados lenguajes en su momento de definición.


-Tipos de paradigmas de programación más comunes:




  • Programación Imperativa o por procedimientos:
La programación imperativa, en contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.

La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa.

Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; donde cada paso es una instrucción.

Los lenguajes de paradigmas imperativos son los siguientes: 
PerlPhytonJavaEuphoriaFenix , ClipperPascal.




  • Programación Funcional:
En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. 

Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. 

Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.

Los lenguajes de paradigmas funcional son los siguientes: Perl.



  • Programación Lógica:
La programación lógica es un tipo de paradigmas de programación dentro del paradigma de programación declarativa

El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcionalprogramación con restricciones, programas DSL (de dominio específico) e híbridos.

La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático. La programación lógica gira en torno al concepto de predicado, o relación entre elementos.

Los lenguajes de paradigmas lógicos son los siguientes: PrologPascal.



  • Programación Orientado a Objetos:
La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticosEstá basado en varias técnicas, incluyendo herenciacohesiónabstracciónpolimorfismoacoplamiento y encapsulamiento

Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe una gran variedad de lenguajes de programación que soportan la orientación a objetos.

Los lenguajes de paradigmas orientado a objetos son los siguientes: PhytonLenguaje DJavaFenixSimula.











-Perl:


Historia:
Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.
Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.

Caracteristicas:
La estructura completa de Perl deriva ampliamente del lenguaje C. Perl es un lenguaje imperativo, con variables, expresiones, asignaciones, bloques de código delimitados por llaves, estructuras de control y subrutinas.
Perl también toma características de la programación shell. Todas las variables son marcadas con un Sigilo precedente (Sigil, en inglés). Los sigilos identifican inequívocamente los nombres de las variables, permitiendo a Perl tener una rica sintaxis. Notablemente, los sigilos permiten interpolar variables directamente dentro de las cadenas de caracteres (strings). Como en los shell, Perl tiene muchas funciones integradas para tareas comunes y para acceder a los recursos del sistema.
Perl toma las listas del Lisp, hash (memoria asociativa) del AWK y expresiones regulares del sed. Todo esto simplifica y facilita todas las formas del análisis sintáctico, manejo de texto y tareas de gestión de datos.
En Perl 5, se añadieron características para soportar estructuras de datos complejas, funciones de primer orden (p. e. clausuras como valores) y un modelo de programación orientada a objetos. Éstos incluyen referencias, paquetes y una ejecución de métodos basada en clases y la introducción de variables de ámbito léxico, que hizo más fácil escribir código robusto (junto con el pragma strict). Una característica principal introducida en Perl 5 fue la habilidad de empaquetar código reutilizable como módulos. Larry Wall indicó más adelante que "la intención del sistema de módulos de Perl 5 era apoyar el crecimiento de la cultura Perl en vez del núcleo de Perl".
Todas las versiones de Perl hacen el tipificado automático de datos y la gestión de memoria. El intérprete conoce el tipo y requerimientos de almacenamiento de cada objeto en el programa; reserva y libera espacio para ellos según sea necesario. Las conversiones legales de tipo se hacen de forma automática en tiempo de ejecución; las conversiones ilegales son consideradas errores fatales.

Tipos de datos:
Perl tiene tres tipos de datos: escalares, listas y hashes:
  • Un escalar es un solo valor; puede ser un número, un string (cadena de caracteres) o una referencia
  • Una lista es una colección ordenada de escalares (una variable que almacena una lista se llama array)
  • Un hash, o memoria asociativa, es un mapeo de strings a escalares; los strings se llaman claves y los escalares valores.
Todas las variables están precedidas por un sigilo, que identifica el tipo de dato que es accedido (no el tipo de dato de la misma variable). Se puede usar el mismo nombre para variables de diferentes tipos, sin que tengan conflictos.
Paradigma:
Perl: Imperativo, orientado a objetos y funcional.


-Python:


Historia:
Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones e interactuar con el sistema operativo Amoeba.
El nombre del lenguaje proviene de la afición de su creador por los humoristas británicos Monty Python.
Van Rossum es el principal autor de Python, y su continuo rol central en decidir la dirección de Python es reconocido, refiriéndose a él como Benevolente Dictador Vitalicio (en inglés: Benevolent Dictator for Life, BDFL).
En 1991, van Rossum publicó el código de la versión 0.9.0 en alt.sources. En esta etapa del desarrollo ya estaban presentes clases con herencia, manejo de excepciones, funciones y los tipos modulares, como: strlistdict, entre otros. Además en este lanzamiento inicial aparecía un sistema de módulos adoptado de Modula-3; van Rossum describe el módulo como “una de las mayores unidades de programación de Python”.El modelo de excepciones en Python es parecido al de Modula-3, con la adición de una cláusula else.3 En el año 1994 se formó comp.lang.python, el foro de discusión principal de Python, marcando un hito en el crecimiento del grupo de usuarios de este lenguaje.

Caracteristicas:
Python usa tipado dinámico y conteo de referencias para la administración de memoria.
Una característica importante de Python es la resolución dinámica de nombres; es decir, lo que enlaza un método y un nombre de variable durante la ejecución del programa (también llamado enlace dinámico de métodos).
Otro objetivo del diseño del lenguaje es la facilidad de extensión. Se pueden escribir nuevos módulos fácilmente en C o C++. Python puede incluirse en aplicaciones que necesitan una interfaz programable.
Aunque la programación en Python podría considerarse en algunas situaciones hostil a la programación funcional tradicional del Lisp, existen bastantes analogías entre Python y los lenguajes minimalistas de la familia Lisp como puede ser Scheme.

Tipo de paradigma:
Python es un lenguaje de programación multiparadigma. 
Esto significa que más que forzar a los programadores a adoptar un estilo particular de programación, permite varios estilos: programación orientada a objetos, programación imperativa y programación funcional. Otros paradigmas están soportados mediante el uso de extensiones.


File:Python logo and wordmark.svg

-D (Lenguaje de programación):


D es un lenguaje de programación de uso general desarrollado por Walter Bright cuya primera versión apareció en 1999. Se origina como un rediseño de C++, con un enfoque más pragmático, pero no es un lenguaje puramente derivado del anterior. D ha mantenido algunas características de C++ y también está influido por otros conceptos de otros lenguajes como JavaC# y Eiffel. Una versión estable fue lanzada el 2 de enero de 2007.


Características:
D está siendo diseñado con lecciones aprendidas del uso de C++ en vez de ser diseñado desde una perspectiva teórica. Aunque usa muchos de los conceptos de C/C++ también descarta algunos, y por lo tanto no es compatible con código escrito en C o C++. D retiene la habilidad de C++ de hacer código de bajo nivel, permitiendo incluir código en ensamblador. La herencia múltiple de C++ es reemplazada por herencia simple e interfaces y 'mixins'. La sintaxis de declaración y la sintaxis para las expresiones se parecen a las de C++.
El soporte del lenguaje ensamblador demuestra una de las diferencias entre D con respecto a otros lenguajes como Java y C#. Esto permite incluir código específico de la máquina con código D, una técnica comúnmente usada por programadores de software de sistema para acceder a características de bajo nivel necesarias para interactuar directamente con el hardware, permitiendo escribir software como sistemas operativos y drivers.
D incluye soporte para comentarios de documentación, pero hasta ahora sólo el compilador entregado por Digital Mars implementa un generador de documentación.

Orientado a objetos:
La programación orientada a objetos está basada en herencia simple, con todas las clases derivadas de la clase Object. D no soporta herencia múltiple; en vez de eso, usa interfaces parecidas a las de Java, que son comparables a las clases abstractas de C++.

Metaprogramación:
Metaprogramación es soportada por una combinación de plantillas, ejecución de funciones en tiempo de compilación, tuplas y 'mixins' de cadena. Soporta CTFE (evaluación de funciones en tiempo de compilación).

Implementacion:
Las implementaciones actuales de D compilan el código directamente a código máquina para lograr una ejecución eficiente.
Cambios al lenguaje no se hacen regularmente desde la versión 1.0. El diseño está virtualmente congelado, y nuevos lanzamientos se concentran en resolver bugs existentes. El compilador oficial de Walter Bright define el lenguaje.
  • DMD: El compilador de Digital Mars, el compilador oficial de D. El front end está bajo la licencia Artistic License y la licencia GNU GPL; las fuentes para el front end son distribuidas con los binarios del compilador. El back end es propietario, pero el código es abierto.
  • GDC: Un front end para el back end GCC, construido usando las fuentes del compilador DMD. Snapshots soportan la versión 2.0 del lenguaje.
  • LDC: Un compilador basado en DMD y usa LLVM como back end. El backend LLVM permite que LDC logre optimizar el código alcanzando rendimiento similar a C/C++ e incluso superándolo en ocasiones.

Herramientas del desarrollo:
D todavía no está soportado en muchos entornos de desarrollo, lo cual es un problema esencial para muchos usuarios. Editores que pueden ser usados incluyen a Entice Designer, emacs, vim, SciTE y Zeus entre otros. Vim soporta el resaltado de sintaxis y completado de código (a través de ctags parcheados). Code::Blocks incluye soporte parcial del lenguaje.
Hay dos plu-gins en desarrollo para Eclipse, Descent y Mmrnmhrm.
Adicionalmente, hay IDEs escritas en el propio D como Poseidon, que incluye completado de código, resaltado de sintaxis y depurador.
Aplicaciones escritas en D pueden ser depuradas con cualquier depurador de C o C++, como GDB o WinDbg, aunque soporte para varias características fundamentales de D es limitado. Un depurador con soporte explícito para D es Ddbg para Windows. El depurador comercial ZeroBUGS para Linux tiene soporte experimental para D. Ddbg puede ser usado con varios IDEs o desde la línea de comandos, ZeroBUGS tiene su propia interfaz gráfica.


viernes, 18 de octubre de 2013

-Java:


El lenguaje de programación Java fue originalmente desarrollado por James Gosling de Sun Microsystems (la cual fue adquirida por la compañía Oracle) y publicado en el 1995 como un componente fundamental de la plataforma Java de Sun Microsystems. su sintaxis deriva mucho de C y C++, pero tiene menos facilidades de bajo nivel que cualquiera de ellos. 

Las aplicaciones de Java son generalmente compiladas a bytecode (clase Java) que puede ejecutarse en cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente.

Independencia de la plataforma: 

La segunda característica, la independencia de la plataforma, significa que programas escritos en el lenguaje Java pueden ejecutarse igualmente en cualquier tipo de hardware. Este es el significado de ser capaz de escribir un programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma de Java, ‘’’write once, run anywhere’’’.

Componentes:


  • Bibliotecas de Java, que son el resultado de compilar el código fuente desarrollado por quien implementa la JRE, y que ofrecen apoyo para el desarrollo en Java. Algunos ejemplos de estas bibliotecas son:
    • Las bibliotecas centrales, que incluyen:
      • Una colección de bibliotecas para implementar estructuras de datos como listas, arrays, árboles y conjuntos.
      • Bibliotecas para análisis de XML.
      • Seguridad.
      • Bibliotecas de internacionalización y localización.
    • Bibliotecas de integración, que permiten la comunicación con sistemas externos. Estas bibliotecas incluyen:
      • La API para acceso a bases de datos JDBC (Java DataBase Conectivity).
      • La interfaz JNDI (Java Naming and Directory Interface) para servicios de directorio.
      • RMI (Remote Method Invocation) y CORBA para el desarrollo de aplicaciones distribuidas.
    • Bibliotecas para la interfaz de usuario, que incluyen:
      • El conjunto de herramientas nativas AWT (Abstract Windowing Toolkit), que ofrece componentes GUI (Graphical User Interface), mecanismos para usarlos y manejar sus eventos asociados.
      • Las Bibliotecas de Swing, construidas sobre AWT pero ofrecen implementaciones no nativas de los componentes de AWT.
      • APIs para la captura, procesamiento y reproducción de audio.
  • Una implementación dependiente de la plataforma en que se ejecuta de la máquina virtual de Java (JVM), que es la encargada de la ejecución del código de las bibliotecas y las aplicaciones externas.
  • Plugins o conectores que permiten ejecutar applets en los navegadores Web.
  • Java Web Start, para la distribución de aplicaciones Java a través de Internet.
  • Documentación y licencia. 

Java se enmarca en el paradigma  imperativo y orientado a objetos.

Es un lenguaje de programación de propósito generalconcurrenteorientado a objetos basado en clases que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible.

-Prolog:


-Introducción:

En Octubre de 1981, el gobierno japonés y más concretamente el Ministerio Japonés de Comercio Internacional e Industria (MITI), anuncia la puesta en marcha de un proyecto revolucionario equiparable a la carrera del espacio norteamericana.
Están dispuestos a ofrecer al mundo la siguiente generación, la Quinta Generación de Ordenadores. Unas máquinas de Inteligencia Artificial que pueden pensar, sacar conclusiones, emitir juicios e incluso comprender las palabras escritas y habladas.
Con este fin se crea el ICOT (Institute for New Generation Computer Technology) constituido por cuarenta brillantes investigadores de las más importantes empresas, y se les dota con todos los medios necesarios para construir la nueva clase de supercomputadoras.

El papel del PROLOG:

La Quinta Generación prevé máquinas diseñadas para el tratamiento lógico, de capacidades análogas a las capacidades de anteriores generaciones de ordenadores para tratar operaciones aritméticas. Se trata de ordenadores que tienen el PROLOG como lenguaje nativo (lenguaje máquina), con capacidad para procesar millones de inferencias lógicas por segundo (LIPS).

Programación Lógica:

La programación lógica es un paradigma de los lenguajes de programación en el cual los programas se consideran como una serie de aserciones lógicas.
De esta forma, el conocimiento se representa mediante reglas, tratándose de sistemas declarativos.
Una representación declarativa es aquélla en la que el conocimiento está especificado, pero en la que la manera en que dicho conocimiento debe ser usado no viene dado. El más popular de los sistemas de programación lógica es el PROLOG.

Historia:

Se trata de un lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille I (Marsella, Francia) por los profesores Alain Colmerauer y Philippe Roussel. Nació de un proyecto que no tenía como objetivo la implementación de un lenguaje de programación, sino el procesamiento de lenguajes naturales.


Alain Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de deducción e inferencia del sistema. Interesado por el método de resolución SL, Trudel persuadió a Robert Kowalski para que se uniera al proyecto, dando lugar a una versión preliminar del lenguaje Prolog a finales de 1971 y apareciendo la versión definitiva en 1972. Esta primera versión de Prolog fue programada en ALGOL W.

Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de instrucciones de una máquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado.