B I E N V E N I D O S AL SITIO DONDE ENCONTRARAS TEMAS DE INFORMATICA

TIPOS DE LENGUAJES

0 Comments »
Tipos de Lenguajes de Programación

LENGUAJES DE MÁQUINA

El lenguaje máquina de una computadora consta de cadenas de números binarios (ceros y unos) y es el único que "entienden" directamente los procesadores. Todas las instrucciones preparadas en cualquier lenguaje de máquina tienen por lo menos dos partes. La primera es el comando u operación, que dice a la computadora cuál es la función que va a realizar. Todas las computadoras tienen un código de operación para cada una de sus funciones. La segunda parte de la instrucción es el operando, que indica a la computadora dónde hallar o almacenar los datos y otras instrucciones que se van a manipular; el número de operandos de una instrucción varía en las distintas computadoras. En una computadora de operando único, el equivalente binario de "SUMAR 0814" podría hacer que se sume el valor que se encuentra en la localidad de almacenamiento o dirección 0814 al valor que se encuentra en la unidad aritmética lógica.

En una máquina de dos operandos, la representación binaria de "SUMAR 0814 8672" podría hacer que se sume el valor que está en la localidad 8672 al valor que está en la dirección 0814.

El formato de operando único es popular en las microcomputadoras más pequeñas; la estructura de dos operandos se encuentra en casi todas las demás máquinas.

Según los estándares actuales, las primeras computadoras eran poco tolerantes. Los programadores tenían que traducir las instrucciones de manera directa a la forma de lenguaje de máquina que comprendían las computadoras. Por ejemplo, un programador que escribiera la instrucción "SUMAR 0814" para una de las primeras máquinas IBM hubiera escrito:
000100000000000000000000000010111000

Además de recordar las docenas de códigos numéricos para los comandosdel conjunto de instrucciones de la máquina, el programador tenía que conocer las posiciones donde se almacenan los datos y las instrucciones. La codificación inicial muchas veces requería meses, por lo que era costosa y era frecuente que originara errores. Revisar las instrucciones para localizar errores era casi tan tedioso como escribirlas por primera vez. Además, si era necesario modificar un programa posteriormente, la tarea podía llevarse meses.

LENGUAJES ENSAMBLADORES

A principios de la década de 1950, y con el fin de facilitar la labor de los programadores, se desarrollaron códigos nemotécnicos para las operaciones y direcciones simbólicas. La palabra nemotécnico se refiere a una ayuda para la memorización. Uno de los primeros pasos para mejorar el proceso de preparación de programas fue sustituir los códigos de operaciones numéricos del lenguaje de máquina por símbolos alfabéticos, que son los códigos nemotécnicos. Todas las computadoras actuales tienen códigos nemotécnicos aunque, naturalmente, los símbolos que se usan varían en las diferentes marcas y modelos. La computadora sigue utilizando el lenguaje de máquina para procesar los datos, pero los programas ensambladores traducen antes los símbolos de código de operación especificados a sus equivalentes en lenguaje de máquina.

Este procedimiento preparó avances posteriores. Si la computadora era capaz de traducir símbolos convenientes en operaciones básicas, ¿por qué no hacer también que realizara otras funciones rutinarias de codificación, como la asignación de direcciones de almacenamiento a los datos? La técnica de direccionamiento simbólico permite expresar una dirección no en términos de su localización numérica absoluta, sino en términos de símbolos convenientes para el programador.

Durante las primeras etapas del direccionamiento simbólico, el programador asigna un nombre simbólico y una dirección real a un dato. Por ejemplo, el programador podría asignar el valor total de mercancía adquirida durante un mes por un cliente de una tienda de departamentos a la dirección 0063, y darle el nombre simbólico TOTAL. Se podría asignar el valor de la mercancía devuelta sin usar durante el mes a la dirección 2047 y dársele el nombre simbólico CRÉDITO. Así, durante el resto del programa, el programador se referirá a los nombres simbólicos, más que a las direcciones, cuando fuera preciso procesar estos datos. Por ejemplo, se podría escribir la instrucción "S CRÉDITO TOTAL" para restar el valor de las mercancías devueltas del importa total de compras para obtener el importe de la factura mensual del cliente. A continuación, el programa ensamblador traduciría la instrucción simbólica a esta cadena de bits:



Más adelante se hizo otra mejora. Se dejó a la computadora la tarea de asignar y recordar las direcciones de las instrucciones. Lo único que tenía que hacer el programador era indicar a la computadora la dirección de la primera instrucción, y el programa ensamblador se encargaba de almacenar, de manera automática, todas las demás en forma secuencial a partir de ese punto. Así, si se agregaba más tarde otra instrucción al programa, no era necesario modificar las direcciones de todas las instrucciones que seguían al punto de inserción (como tendría que hacerse en el caso de programas escritos en lenguaje de máquina). En vez de ello, el procesador ajustaba automáticamente las localidades de memoria la próxima vez que se ejecutaba el programa.

En la actualidad, los programadores no asignan números de dirección reales a los datos simbólicos, simplemente especifican dónde quieren que se coloque la primera localidad del programa, y el programa ensamblador se encarga de lo demás: asigna localidades tanto para las instrucciones como para los datos.

Estos programas de ensamble, o ensamblador, también permite a la computadora convertir las instrucciones en lenguaje ensamblador del programador en su propio código de máquina. Un programa de instrucciones escrito en lenguaje ensamblador por un programador se llama programa fuente. Después de que el ensamblador convierte el programa fuente en código de máquina a éste se le denomina programa objeto. Para los programadores es más fácil escribir instrucciones en un lenguaje ensamblador que en códigos de lenguajes de máquina, pero es posible que se requieran dos corridas de computadora antes de que se puedan utilizar las instrucciones del programa fuente para producir las salidas deseadas.

Los lenguajes ensambladores tienen ventajas sobre los lenguajes de máquina. Ahorran tiempo y requieren menos atención a detalles. Se incurren en menos errores y los que se cometen son más fáciles de localizar. Además, los programas en lenguaje ensamblador son más fáciles de modificar que los programas en lenguaje de máquina. Pero existen limitaciones. La codificación en lenguaje ensamblador es todavía un proceso lento. Una desventaja importante de estos lenguajes es que tienen una orientación a la máquina. Es decir, están diseñados para la marca y modelo específico de procesador que se utiliza, y es probable que, para una máquina diferente, se tengan que volver a codificar los programas.

LENGUAJES DE ALTO NIVEL

Los primeros programas ensambladores producían sólo una instrucción en lenguaje de máquina por cada instrucción del programa fuente. Para agilizar la codificación, se desarrollaron programas ensambladores que podían producir una cantidad variable de instrucciones en lenguaje de máquina por cada instrucción del programa fuente. Dicho de otra manera, una sola macroinstrucción podía producir varias líneas de código en lenguaje de máquina. Por ejemplo, el programador podría escribir "LEER ARCHIVO", y el programa traductor produciría una serie detallada de instrucciones al lenguaje de máquina previamente preparadas, con lo que se copiaría un registro del archivo que estuviera leyendo el dispositivo de entrada a la memoria principal. Así, el programador no se tenía que ocupar de escribir una instrucción por cada operación de máquina realizada.

El desarrollo de las técnicas nemotécnicas y las macroinstrucciones condujo, a su vez, al desarrollo de lenguajes de alto nivel que a menudo están orientados hacia una clase determinada de problemas de proceso. Por ejemplo, se han diseñado varios lenguajes para procesar problemas científico-matemático, asimismo han aparecido otros lenguajes que hacen hincapié en las aplicaciones de proceso de archivos.
A diferencia de los programas de ensamble, los programas en lenguaje de alto nivel se pueden utilizar con diferentes marcas de computadores sin tener que hacer modificaciones considerables. Esto permite reducir sustancialmente el costode la reprogramación cuando se adquiere equipo nuevo. Otras ventajas de los lenguajes de alto nivel son:

• Son más fáciles de aprender que los lenguajes ensambladores.
• Se pueden escribir más rápidamente.
• Permiten tener mejor documentación.
• Son más fáciles de mantener.
• Un programador que sepa escribir programas en uno de estos lenguajes no está limitado a utilizar un solo tipo de máquina.

LENGUAJES COMPILADOS

Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se requiere una corrida de compilación antes de procesar los datos de un problema.

Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con código binario).

Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el código.

LENGUAJES INTERPRETADOS

Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de producción.

LENGUAJES DE PROGRAMACIÓN DECLARATIVOS

Se les conoce como lenguajes declarativos en ciencias computacionales a aquellos lenguajes de programación en los cuales se le indica a la computadora qué es lo que se desea obtener o qué es lo que se esta buscando, por ejemplo: Obtener los nombres de todos los empleados que tengan más de 32 años. Eso se puede lograr con un lenguaje declarativo como SQL.
La programación declarativa es una forma de programación que implica la descripción de un problema dado en lugar de proveer una solución para dicho problema, dejando la interpretación de los pasos específicos para llegar a dicha solución a un intérprete no especificado. La programación declarativa adopta, por lo tanto, un enfoque diferente al de la programación imperativa tradicional.

En otras palabras, la programación declarativa provee el "qué", pero deja el "cómo" liberado a la implementación particular del intérprete. Por lo tanto se puede ver que la programación declarativa tiene dos fases bien diferenciadas, la declaración y la interpretación.

Es importante señalar que a pesar de hacer referencia a intérprete, no hay que limitarse a "lenguajes interpretados" en el sentido habitual del término, sino que también se puede estar trabajando con "lenguajes compilados".

CARACTERÍSTICAS DE LOS LENGUAJES DE PROGRAMACIÓN DECLARATIVOS

• Los lenguajes declarativos están orientados a buscar la solución del problema, sin preocuparse por la forma de llegar a ello; es decir, el programador debe concentrarse en la lógica del algoritmo, más que en el control de la secuencia.
• Los programas están formados por un conjunto de definiciones o ecuaciones, las cuales describen lo que debe ser calculado, no en sí la forma de hacerlo.
• Las variables sólo pueden tener asignado un solo valor a lo largo de la ejecución del programa, lo cual implica que no puede existir asignación destructiva. Debido a esto, cobra especial importancia el uso del anidamiento y la recursividad.
• Las listas representan la estructura fundamental de datos.
• El orden de la ejecución no resulta importante debido a que no existen efectos colaterales; es decir, que al calcular un valor, resulta imposible afectar el cálculo de otros y con esto se puede afirmar que cualquier secuencia de ejecución deberá conducir al mismo resultado.
• Las expresiones o definiciones pueden ser usadas como valores y por lo tanto se pueden tratar como argumentos de otras definiciones.
• El control de la ejecución no es responsabilidad del programador.

DESVENTAJAS DE LA PROGRAMACIÓN DECLARATIVA

La principal desventaja de la programación declarativa es que no puede resolver cualquier problema dado, sino que está restringida al subconjunto de problemas para los que el intérprete o compilador fue diseñado.

Otra desventaja de la programación declarativa está relacionada con la eficiencia. Dado que es necesaria una fase de interpretación extra, en la cual se deben evaluar todas las consecuencias de todas las declaraciones realizadas, el proceso es relativamente más lento que en la programación imperativa, en que los cambios de estado del sistema están dados por instrucciones particulares y no por un conjunto de condiciones arbitrariamente grande.

VENTAJAS DE LA PROGRAMACIÓN DECLARATIVA

A pesar de lo anterior existen algunas ventajas en el uso de la programación declarativa. Entre las ventajas se destaca que la solución de un problema se puede realizar con un nivel de abstracción considerablemente alto, sin entrar en detalles de implementación irrelevantes, lo que hace a las soluciones más fácil de entender por las personas. La resolución de problemas complejos es resuelta por el intérprete a partir de la declaración de las condiciones dadas.

La programación declarativa es muy usada en la resolución de problemas relacionados con inteligencia artificial, bases de datos, configuración, y comunicación entre procesos; sin embargo, ningún leguaje declarativo se aproxima en popularidad a los lenguajes imperativos.

EJEMPLOS DE LENGUAJES DECLARATIVOS

Algunos lenguajes declarativos que se pueden mencionar son:
• PROLOG
• SQL
• HTML
• WSDL (Web Services Description Language)
• XML Stylesheet Language for Transformation

LENGUAJES DE PROGRAMACIÓN 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,

El proceso anterior se puede realizar con un lenguaje imperativo como por ejemplo BASIC, C, C++, Java, Clipper, Dbase, C#, PHP, Perl, etc.

Dentro de la programación imperativa, se tiene un conjunto de instrucciones que le indican al computador cómo realizar una tarea.

Los lenguajes imperativos se basan en comandos u órdenes que se le dan a la computadora para que haga algo, con el fin de organizar o cambiar valores en ciertas partes de la memoria.

La ejecución de estos comandos se realiza, en la mayor parte de ellos, secuencialmente, es decir, hasta que un comando no ha sido ejecutado no se lee el siguiente.

Según el dominio, o mejor dicho con el propósito que se utiliza el programa, se puede hablar de lenguajes de dominio específico y de dominio general.

LENGUAJES IMPERATIVOS PROCEDURALES

En los lenguajes tradicionales o procedurales, es la aplicación quien controla qué porciones de código se ejecuta, y la secuencia en que este se ejecuta. La ejecución de la aplicación se inicia con la primera línea de código, y sigue una ruta predefinida a través de la aplicación, llamando procedimientos según sea necesario.

Los lenguajes procedurales están fundamentados en la utilización de variables para almacenar valores y en la realización de operaciones con los datos almacenados. Algunos ejemplos son: FORTRAN, PASCAL, C, ADA, ALGOL,…

En este tipo de lenguajes, la arquitectura consta de una secuencia de celdas, llamadas memoria, en las cuales se pueden guardar en forma codificada, lo mismo datos que instrucciones; y de un procesador, el cual es capaz de ejecutar de manera secuencial una serie de operaciones, principalmente aritméticas y booleanas, llamadas comandos. En general, un lenguaje procedural ofrece al programador conceptos que se traducen de forma natural al modelo de la máquina. El programador tiene que traducir la solución abstracta del problema a términos muy primitivos, cercanos a la máquina.

Con un lenguaje procedural el usuario (normalmente será un programador) especifica qué datos se necesitan y cómo obtenerlos. Esto quiere decir que el usuario debe especificar todas las operaciones de acceso a datos llamando a los procedimientos necesarios para obtener la información requerida. Estos lenguajes acceden a un registro, lo procesan y basándose en los resultados obtenidos, acceden a otro registro, que también deben procesar. Así se va accediendo a registros y se van procesando hasta que se obtienen los datos deseados. Las sentencias de un lenguaje procedural deben estar embebidas en un lenguaje de alto nivel, ya que se necesitan sus estructuras (bucles, condicionales, etc.) para obtener y procesar cada registro individual.

ALGUNOS LENGUAJES IMPERATIVOS

Algunos lenguajes de programación imperativos que se pueden mencionar son:
• BASIC
• C
• C++
• Java
• C#
• PHP
• Perl

DIFERENCIA ENTRE LENGUAJES DECLARATIVOS E IMPERATIVOS

En los lenguajes declarativos las sentencias que se utilizan lo que hacen es describir el problema que se quiere solucionar, pero no las instrucciones necesarias para solucionarlo. Esto último se realizará mediante mecanismos internos de inferencia de información a partir de la descripción realizada.

Los lenguajes imperativos describen paso a paso un conjunto de instrucciones que deben ejecutarse para variar el estado un programa y hallar la solución, es decir, un algoritmo en el que se describen los pasos necesarios para solucionar un problema.

LENGUAJES DE PROGRAMACIÓN ORIENTADOS A OBJETOS

En la Programación Orientada a Objetos (POO u OOP según siglas en inglés) se definen los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos) comportamiento (esto es, procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas módulos más fáciles de escribir, mantener y reutilizar.

De esta forma, un objeto contiene toda la información, (los denominados atributos) que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entre objetos de la misma clase, al poder tener valores bien diferenciados en sus atributos). A su vez, dispone de mecanismos de interacción (los llamados métodos) que favorecen la comunicación entre objetos (de una misma clase o de distintas), y en consecuencia, el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse) información (datos) y procesamiento (métodos).

Dada esta propiedad de conjunto de una clase de objetos, que al contar con una serie de atributos definitorios, requiere de unos métodos para poder tratarlos (lo que hace que ambos conceptos están íntimamente entrelazados), el programador debe pensar indistintamente en ambos términos, ya que no debe nunca separar o dar mayor importancia a los atributos a favor de los métodos, ni viceversa. Hacerlo puede llevar al programador a seguir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen esa información por otro (llegando a una programación estructurada camuflada en un lenguaje de programación orientada a objetos).

Esto difiere de los lenguajes imperativos tradicionales, en los que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida.

La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos
procedimientos manejan. Los programadores de lenguajes imperativos escriben funciones y después les pasan los datos. Los programadores que emplean lenguajes orientados a objetos definen objetos con datos y métodos y después envían mensajes a los objetos diciendo que realicen esos métodos por sí mismos.

Un objeto se puede definir como un grupo de procedimientos que comparten un estado. Se define al conjunto de datos como "estado", y "métodos" como el conjunto de procedimientos que pueden alterar ese estado. Un programa orientado a objetos es un método de implementación en el que los programas están organizados como colecciones de objetos, donde cada uno es una instancia de alguna clase, y donde todas las clases son miembros de una jerarquía de clases conectadas por relaciones de herencia. Este tipo de lenguajes son muy recientes en comparación a los primeros lenguajes de programación que aparecieron.

ALGUNOS LENGUAJES ORIENTADOS A OBJETOS

Entre los lenguajes orientados a objetos más importantes que se pueden mencionar, aparecen los siguientes.
• Ada
• C++
• C#
• VB.NET
• Clarion
• Delphi
• Eiffel
• Jave
• Lexico (en castellano)
• Objective-C
• Ocaml
• Oz
• PHP
• PowerBuilder
• Pitón
• Ruby
• Smalltalk

REFERENCIAS BIBLIOGRÁFICAS

1. Cejas, C.B; Crespillo, O.G.; Jiménez F., M.J.; Ramírez G., C.; Sánchez G., C.; Sánchez N., C. Tipos de Lenguajes de Programación. Extraído el 29 de agosto, 2006 de http://juanfc.lcc.uma.es/EDU/EP/trabajos/T201.Clasificaciondelostiposdelenguajes.pdf#search=%22tipos%20de%20lenguajes%20imperativos%22
2. Wikipedia. La enciclopedia libre. Programación declarativa. Extraído el 29 de agosto, 2006 de http://es.wikipedia.org/wiki/Programaci%C3%B3n_declarativa
3. Concept&Development. Programación declarativa. Extraído el 29 de agosto, 2006 de http://pviojo.net/posts/programacion-declarativa
4. Wikipedia. La enciclopedia libre. Programación imperativa. Extraído el 29 de agosto, 2006 de http://es.wikipedia.org/wiki/Lenguajes_imperativos
5. Universidad Tecnológica Nacional. Facultad Regional Tucuman. Lenguajes de Programación. Extraído el 29 de agosto, 2006 de http://www.frt.utn.edu.ar/sistemas/paradigmas/lenguajes.htm
6. Wikipedia. La enciclopedia libre. Programación orientada a objetos. Extraído el 30 de agosto, 2006 de http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos#La_Programaci.C3.B3n_Orientada_a_Objetos_.28POO.29_como_soluci.C3.B3n 7. Introducción a la Programación Lógica. Ingeniería Técnica en Informática de Sistemas. Departamento de Lenguajes y Ciencias de la Computación. Universidad de Málaga. Extraído el 30 de agosto, 2006 de http://72.14.209.104/search?q=cache:doHkGvx7wQIJ:www.lcc.uma.es/~lopez/apuntes/declasis/apuntes/introduccion/intro_sis4pp.pdf+programacion+declarativa+logica&hl=es&gl=sv&ct=clnk&cd=6 8. Rossel, G. Programación lógica. Extraído el 30 de agosto, 2006 de http://www.amzi.com/articles/code07_whitepaper.pdf#search=%22programacion%20%20logica%22
9. Wikipedia. La enciclopedia libre. Programación funcional. Extraído el 30 de agosto, 2006 de http://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional
10. Wanadoo. El Rincón del Vago. Base de Datos. Extraído el 30 de agosto, 2006 de http://html.rincondelvago.com/concepto-de-base-de-datos.html

0 Responses to "TIPOS DE LENGUAJES"

Publicar un comentario