¿Qué es un lenguaje de programación?.
Un conjunto de sintaxis y reglas semánticas que definen los programas del computador. Es una técnica estándar de comunicación para entregarle instrucciones al computador. Un lenguaje le da la capacidad al programador de especificarle al computador, qué tipo de datos actúan y que acciones tomar bajo una variada gama de circunstancias, utilizando un lenguaje relativamente próximo al lenguaje humano.
Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, interpretación o intermedio, es decir, ser traducido al lenguaje de máquina para que pueda ser ejecutado por el ordenador.
Los lenguajes de programación pueden ser clasificados de acuerdo a diversos criterios:
Lenguajes interpretados (Interpretes) como Basic, Dbase.
Lenguajes compilados (Compiladores) como C, C++, Clipper.
Lenguajes interpretados con recolectores de basura (Maquina Virtual) como Smalltalk, Java, Ocaml.
Lenguajes Scripts (Motor de ejecución) como Perl, PhP.
Clasificación de los Lenguajes de Programación
Declarativos
Se les conoce como lenguajes declarativos en ciencias computacionales aquellos lenguajes de programación en los cuales se le indica a la computadora que es lo que se desea obtener o que es lo que se esta buscando, por ejemplo: Obtener los nombres de todos los empleados que tengan más de 32 años. Algunos ejemplos de lenguajes declarativos son el Datatrieve, SQL y las expresiones regulares.
Siglas de Structured Query Language (Lenguaje Estructurado de Consultas). Es un lenguaje declarativo que aúna características del Álgebra y el Cálculo Relacionales que nos permite lanzar consultas contra una Base de Datos para recuperar información de nuestro interés, almacenada en ella.
Ejemplos de consultas SQL:
SELECT Nombre From Tabl_fich_personales where Edad >=18;
Muestra el Campo "Nombre" de todos los individuos mayores de 18 años de la tabla
"Tabl_fich_personales"
El concepto de expresiones regulares (Regular expressions en inglés) se refiere a una familia de lenguajes compactos y potentes para la descripción de conjuntos de cadenas de caracteres. Numerosos editores de texto y otras utilidades (especialmente en el sistema operativo UNIX), como por ejemplo sed y awk, utilizan estos lenguajes para buscar ciertas estructuras en el texto y, por ejemplo, remplazarlas con alguna otra cadena de caracteres.
Imperativos
En ciencias de la computación se llama lenguajes imperativos a aquellos en los cuales se le ordena a la computadora cómo realizar una tarea siguiendo una serie de pasos o instrucciones, por ejemplo:
Paso 1, solicitar número.
Paso 2, multiplicar número por dos.
Paso 3, imprimir resultado de la operación.
Paso 4, etc,
Algunos ejemplos de lenguajes imperativos son: BASIC, C, C++, Java, Clipper, Dbase, C# y Perl.
Generaciones de los Lenguajes
Los equipos de ordenador (el hardware) han pasado por cuatro generaciones, de las que las tres primeras (ordenadores con válvulas, transistores y circuitos integrados) están muy claras, la cuarta (circuitos integrados a gran escala) es más discutible.
Algo parecido ha ocurrido con la programación de los ordenadores (el software), que se realiza en lenguajes que suelen clasificarse en cinco generaciones, de las que las tres primeras son evidentes, mientras no todo el mundo está de acuerdo en las otras dos. Estas generaciones no coincidieron exactamente en el tiempo con las de hardware, pero sí de forma aproximada, y son las siguientes:
Primera generación: Los primeros ordenadores se programaban directamente en código binario, que puede representarse mediante secuencias de ceros y unos sistema binario. Cada modelo de ordenador tiene su propio código, por esa razón se llama lenguaje de máquina.
Segunda generación: Los lenguajes simbólicos, así mismo propios de la máquina, simplifican la escritura de las instrucciones y las hacen más legibles.
Tercera generación: Los lenguajes de alto nivel sustituyen las instrucciones simbólicas por códigos independientes de la máquina, parecidas al lenguaje humano o al de las Matemáticas.
Cuarta generación: se ha dado este nombre a ciertas herramientas que permiten construir aplicaciones sencillas combinando piezas prefabricadas. Hoy se piensa que estas herramientas no son, propiamente hablando, lenguajes. Algunos proponen reservar el nombre de cuarta generación para la programación orientada a objetos.
Quinta generación: se llama así a veces a los lenguajes de la inteligencia artificial, aunque con el fracaso del proyecto japonés de la quinta generación el nombre ha caído en desuso.
Historia y Características de algunos Lenguajes
Ada
Lenguaje de programación diseñado por Jean Ichbiah de Cii Honeywell Bull por encargo del Departamento de Defensa de los EE.UU. para unificar el uso de los lenguajes de programación en los proyectos que le fuesen entregados. Es un lenguaje diseñado con la seguridad en mente y es multipropósito, pudiendo llegar desde la facilidad de Pascal a la flexibilidad de C pero con una filosofía orientada a la reducción de errores.
Su nombre conmemora a la condesa Ada Lovelace, hija de Lord Byron, a quien se considera la primera programadora de la Historia, por su relación con Charles Babbage, creador de la máquina analítica. El Departamento de Defensa de los Estados Unidos (DoD) y los ministerios equivalentes de varios países europeos exigen la utilización de este lenguaje en los proyectos realizados bajo su patrocinio. También es usado en otros entornos en los que también se necesita una gran seguridad como la gestión del tráfico aéreo (en empresas como Boeing o la española Indra).
Smalltalk
Diseñado por Alan Kay durante los años setenta en el Palo Alto Reasearch Institute de Xerox (conocido como Xerox Parc). Smalltalk era un elemento de la primera computadora personal con interfaz gráfica el "Alto" (que nunca fue llevado al mercado pero de cuyas ideas nació el Macintosh).
Smalltalk es considerado el primero de los lenguajes orientados a objetos (OOP). En Smalltalk TODO es un objeto.. aun los números enteros. Smalltalk se basó en ideas de Simula (un lenguaje de simulaciones). .
Java
Plataforma de software desarrollada por Sun Microsystems. Esta plataforma ha sido desarrollada de tal manera que los programas desarrollados para ella puedan ejecutarse de la misma forma en diferentes tipos de arquitecturas y dispositivos computacionales.
La plataforma Java consta de tres partes:
- El lenguaje de programación
- Máquina virtual de Java
- API Java
C Más Más
C++ (pronunciado "C plus plus" o "C más más", por algunos programadores de habla hispana) es un lenguaje de programación, diseñado a mediados de los ochenta, por Bjarne Stroustrup, como extensión del lenguaje de programación C.
Es un lenguaje híbrido, que se puede compilar y resulta más sencillo de aprender para los programadores que ya conocen C. Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes como ROOT (http://root.cern.ch/) (enlace externo). Las principales características del C++ son abstracción (encapsulación), el soporte para programación orientada a objetos (polimorfismo) y el soporte de plantillas o programación genérica (Templates). Las plantillas se las define de la manera siguiente: template <parámetros> declaración X y se las instancia con X<parámetros>.
Pero añade otra serie de propiedades que se encuentran más difícilmente en otros lenguajes de alto nivel:
- Posibilidad de redefinir los operadores
- Indentificación de tipos en tiempo de ejecución (RTTI)
El nombre C++ fue propuesto por Rick Masciatti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En el C++, "C++" significa "uno más de C" y se refiere a que C++ es una extensión del C.
Algunos dicen que "C++" todavía significa "C", porque "++" en este caso es el operador de la postincrementación, es decir, aumenta el valor de la expresión a la que se refiere, después, en las instrucciones siguientes. Por esto el valor de la expresión en este momento permanece original.
Pascal
Pascal es un lenguaje de programación de alto nivel, desarrollado por Niklaus Wirth. Se convirtió en uno de los lenguajes extensamente usados en lo cursos de introducción a la programación, pues fue bien recibido como lenguaje de enseñanza para estudiantes universitarios. Pascal es un lenguaje con técnicas de programación estructurada, dicha programación hace programadores disciplinados.
Sus primeras versiones datan de 1970. Es un lenguaje de programación estructurado creado por Niklaus Wirth, un profesor del Instituto tecnológico de Zurich, que lo creó pensando en un lenguaje didáctico que enseñase la programación como "una disciplina sistemática basada en determinados conceptos fundamentales". Estos conceptos más tarde se tornarían motivo de controversia entre los que creen que este lenguage tiene utilidad limitada a los medios academicos, como Brian W. Kernighan.
A partir de los años setenta se convirtió en el sucesor de ALGOL en el entorno universitario. Pascal permite construir programas muy legibles.
Delphi Delphi es un entorno de programación visual basado en una versión moderna del lenguaje de programación Pascal. Como entorno visual, la programación en Delphi consiste en diseñar las pantallas de que se compone el programa colocando todos sus componentes (botones, campos de texto, etc.), asociando después código a ellos. El lenguaje utilizado por Delphi es una extensión de Pascal denominada Object Pascal, que básicamente añade al Pascal tradicional soporte para la programación orientada a objetos (habitualmente llamada POO).
Ocaml
El lenguaje Objective CAML, también llamado Ocaml u O'Caml, es un lenguaje de programación avanzado de la familia de los lenguajes ML, desarrollado y distribuido por el INRIA en Francia. Ocaml admite los paradigmas de programación imperativa, programación funcional y programación orientada a objetos.
Ocaml nace de la evalución del lenguaje CAML (http://www.pps.jussieu.fr/~cousinea/Caml/caml_history.html), abreviación de Categorical Abstract Machine Language, al integrarse la programación con objetos.
El código fuente en Ocaml se compila en código para una máquina virtual o en código nativo para diferentes arquitecturas que incluyen IA32, IA64, PowerPC, AMD64, Sparc, Alpha, HP/PA, MIPS y StrongARM. Este último compilador produce código comparable en eficiencia al producido por compiladores como el del lenguaje C/C++ (http://shootout.alioth.debian.org/).
Ocaml dispone de un análisis de tipos estático con inferencia de tipos, valores funcionales de primera clase, polimorfismo paramétrizado, llamada por patrones, manejo de excepciones, recolección de basura y otras características avanzadas
Haskell
Hacia 1950, John McCarthy diseñó el lenguaje LISP (List Processing) que utilizaba las listas como tipo básico y admitía funciones de orden superior. Este lenguaje se ha convertido en uno de los lenguajes más populares en el campo de la inteligencia Artificial. Sin embargo, para que el lenguaje fuese práctico, fue necesario incluir características propias de los lenguajes imperativos como la asignación destructiva y los efectos laterales que lo alejaron del paradigma funcional. Actualmente ha surgido una nueva corriente defensora de las características funcionales del lenguaje encabezada por el dialecto Scheme, que aunque no es puramente funcional, se acerca a la definición original de McCarthy.
Lisp
Después de Fortran es el segundo lenguaje de programación de alto nivel. LISP fue creado por John McCarthy y sus colaboradores en el MIT.
El elemento fundamental en LISP es la lista, en el sentido más amplio del término, pues tanto los datos como los programas son listas. De ahí viene su nombre, pues LISP es un acrónimo de "LIStProcessing".
Los lenguajes de este tipo se llaman "aplicativos" o "funcionales", porque se basan en la aplicación de funciones a sus datos.
En LISP se distinguen dos tipos fundamentales de elementos:
- Átomos: son datos elementales y pueden pertenecer a varios tipos: números, caracteres, cadenas de caracteres y símbolos.
- Listas: son secuencias de átomos o de listas encerradas entre paréntesis. Además, existe una lista especial, "nil", que es la lista nula, que no tiene ningún elemento.
En LISP, una función se expresa como una lista.
Algunas de las funciones predefinidas de LISP tienen símbolos familiares (+ para la suma, * para el producto), pero otras son más exóticas, especialmente dos que sirven precisamente para manipular listas, descomponiéndolas en sus componentes.
Sus nombres ("car" y "cdr") son un poco extraños, reliquias de tiempos pasados y de la estructura de los ordenadores de segunda generación, "car" devuelve la cabeza de una lista y "cdr" su cola o resto.
LISP sigue una filosofía de tratamiento no-destructivo de los parámetros, de modo que la mayoría de las funciones devuelven un lista resultado de efectuar alguna transformación sobre la que recibieron, pero sin alterar esta última.
Uno de los motivos por los que LISP es especialmente adecuado para la IA es el hecho de que el código y los datos tengan el mismo tratamiento (como listas); esto hace especialmente sencillo escribir programas capaces de escribir otros programas según las circunstancias.
Prolog
La Programación Lógica es un Paradigma de Programación basado en la Lógica. Los programas construidos un lenguaje lógico están construidos únicamente por expresiones lógicas, es decir, que son ciertas o falsas, en oposición a un expresión interrogativa (una pregunta) o expresiones imperativas (una orden). Un ejemplo de lenguaje lógico es Prolog (Programación lógica).
Perl
Perl (Practical Extraction and Report Language) es un lenguaje de programación desarrollado por Larry Wall (lwall at netlabs.com) a partir otras herramientas de UNIX como son: ed,grep,awk,c-shell, para la administración de tareas propias de sistemas UNIX.
No establece ninguna filosofía de programación concreta. No se puede decir que sea orientado a objetos, modular o estructurado aunque soporta directamente todos estos paradigmas y su punto fuerte son las labores de procesamiento de textos y archivos.
No es ni un compilador ni un intérprete, esta en un punto intermedio, cuando mandamos a ejecutar un programa en Perl, se compila el código fuente a un código intermedio en memoria que se optimiza como si se fuera a elaborar un programa ejecutable pero es ejecutado por un motor, como si se tratase de un interprete.
Lenguaje de programación basado en scripts portable a casi cualquier plataforma. Es muy utilizado para escribir CGIs.
PHP
PHP (acrónimo de "PHP: Hypertext Preprocessor") es un lenguaje de programación de scripts, concebido en el tercer trimestre de 1994 por Rasmus Lerdorf. Se utiliza principalmente para la programación de CGIs para páginas web, destaca por su capacidad de ser embebido en el código HTML. Además, existe un compilador comercial (el Zend Optimizer).
PHP/FI
El analizador sintáctico fue reescrito a mediados de 1995 y fue nombrado PHP/FI version 2. FI viene de otro programa que Rasmus había escrito y que procesaba los datos de formularios. Así que combinó las "Herramientas para páginas web personales", el "intérprete de formularios", añadió soporte para mSQL y PHP/FI vio la luz. PHP/FI creció a gran velocidad y la gente empezó a contribuir en el código.
SQL
Siglas de Structured Query Language (Lenguaje Estructurado de Consultas). Es un lenguaje declarativo que aúna características del Álgebra y el Cálculo Relacionales que nos permite lanzar consultas contra una Base de Datos para recuperar información de nuestro interés, almacenada en ella.
UML
Lenguaje Unificado de Modelado (UML, por sus siglas en inglés, Unified Modelling Language) es el lenguaje de modelado de sistemas de software más conocido en la actualidad; aún cuando todavía no es un estándar oficial, está apoyado en gran manera por la OMG. El UML cuenta con varios tipos de modelos, los cuales muestran diferentes aspectos de las entidades representadas.
Tipos de modelo
- Funcional: Muestra la funcionalidad del sistema desde el punto de vista del usuario, incluye:
- Objetos: Muestra la estructura y la subestructura del sistema usando objetos, atributos, operaciones y asociaciones, incluye:
- Dinámico: Muestra el comportamiento interno del sistema, incluye:
- Diagramas de secuencia
- Diagramas de actividad
- Diagramas de estado