Vous êtes sur la page 1sur 21

UNIVERSIDAD DE PANAMÁ

CENTRO REGIONAL DE VERAGUAS


FACULTAD DE INFORMÁTICA, ELECTRÓNICA Y COMUNICACIONES
LICENCIATURA EN INGENIERIA EN INFORMÁTICA
ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACIÓN

PARCIAL # 2
EVOLUCIÓN DE LOS LENGUAJES DE PROGRAMACIÓN

Presentado por:
Carlos De Gracia 9-721-393
Efraín Caballero 9-719-1952

Profesor:
Diego Santimateo

III Año
II Semestre

18 de Septiembre de 2007
Evolución de los lenguajes de programación
_______________________________________________________________________________

INTRODUCCIÓN

Los lenguajes informáticos, que inicialmente surgen como una forma de expresar
un conjunto de órdenes dadas a una máquina, han ido evolucionando hacia otras
aproximaciones o paradigmas en los que se describe la estructura de un problema
de forma enunciativa o declarativa, aproximándose, de este modo, al paradigma
de la lengua natural.

Desde el nacimiento del primer lenguaje de programación se han ido


desarrollando diversas técnicas y metodologías de programación, que han
permitido que los programadores, hagan uso de estos lenguajes, siguiendo una
estructura general, de manera uniforme, y que permita el entendimiento de nuestro
código, al igual que han permitido el manejo de técnicas más sencillas para el
manejo e implementación de los lenguajes de programación.

En el siguiente trabajo, se presenta un cuestionario, que nos introduce en


diferentes aspectos y técnicas que han hecho muy reconocidos a diversos
lenguajes de programación, y que nos permiten no solo conocer el origen y
evolución de los lenguajes de programación, sino también, la técnicas utilizadas
por estos, así también como metodologías, que han influenciado en la
programación actual.

Tercera Semana

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

Parcial #2 – Evolución de los Lenguajes de Programación


Trabajo en grupo – entrega 18 de septiembre - impreso
10 ptos cada pregunta.
Objetivo
Analizar conceptos involucrados en la evolución de los lenguajes de
programación.

Indicaciones
Utilice como base la conferencia ofrecida por el Dr. Ricardo Peña Marí en la
Universidad Complutense de Madrid, España, sobre la evolución histórica de la
programación de computadoras, que puede acceder en:
http://webdiis.unizar.es/asignaturas/LP/doc/LP-1-Motivacion.pdf

Otras referencias de apoyo


 http://computing-dictionary.thefreedictionary.com/binding+time
 http://www.iecc.com/gclist/GC-faq.html
 http://en.wikipedia.org/wiki/Programming_language
 http://es.wikipedia.org/wiki/Teorema_de_Dijkstra
 http://es.wikipedia.org/wiki/C++

Obviamente usted puede o debe realizar otras consultas para nutrir sus
respuestas, por lo cual deberá presentar la webgrafía o bibliografía
correspondiente. Adicionalmente le recordamos que este es un trabajo
colaborativo lo que implica que todos son responsables por el aprendizaje de
todos, el grupo no logra su objetivo hasta que todos consideren que han
alcanzado nuevos aprendizajes o que aceptan cada una de las respuestas dadas,
así las cosas cada grupo debe incluir en su informe, el detalle de la organización
para el desarrollo de esta prueba, los conocimientos previos a los que cada uno
debió recurrir, el tipo de apoyo que recibió del grupo, los obstáculos que
encontraron, los nuevos conocimientos adquiridos y sus comentarios generales

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

sobre este trabajo y sobre todo conclusiones individuales sobre el trabajo


realizado.

Desarrolle el siguiente cuestionario


1. Relacione algoritmo y computadora.
2. Compare el modelo de Von Newmann y el Charles Babage.
3. Identifique dos características que debió lograr el FORTRAN sobre la
programación programación usual de su época, para ser un lenguaje
atractivo.
4. Describa los aportes relevantes del Algol y comente la razón de su fracaso.
5. Compare los conceptos de Portabilidad de un lenguaje de programación
con el de Máquina Virtual.
6. Justifique el nacimiento del COBOL.
7. Qué componentes o conceptos podemos decir que el C ha heredado del
ALGOL?
8. Explique el concepto de “Garbage Collection” e identifique el lenguaje
pionero y uno moderno que lo utilice.
9. Explique las diferencias entre lenguaje interpretado y compilado con
ejemplos de cada uno.
10. Analice el concepto de “Función de Orden Superior” en el lenguaje C.
Ejemplifique.
11. Identifique los aportes que generó el LISP y reflexione sobre el origen de la
recursividad.
12. Compare los mecanismos de entrada / salida de FORTRAN IV y C.
13. Explique y de ejemplo en C del Principio de Diseño “ortogonalidad”.
14. ¿Cuál es la característica de las estructuras de control según la
programación estructurada (PE) de E. Dijkstra? Ejemplifique en C y
explique cómo se relaciona la PE con la instrucción GOTO.
15. Evalúe el “Binding Time” (tiempo de asignación o ligadura o asociación de
elementos o recursos de un lenguaje) de los array en C.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

16. Relacione o compare la característica Psicológica de “Uniformidad” con el


concepto de “sobrecarga de operadores”. Ejemplifique utilizando el lenguaje
JavaScript).
17. Use BNF para especificar una repetición en el lenguaje Pascal.

Para beneficio de todos, las consultas para aclarar lo que estimen conveniente
sobre esta prueba, pueden hacerlas en nuestro grupo de Esnips.

CUESTIONARIO

Relacione algoritmo y computadora

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

El algoritmo se relaciona con la computadora porque los algoritmos se utilizan


mucho en la computación porque cada programa que se inventa utiliza algoritmos
para resolver un tipo de problema diferente como por ejemplo matemático,
científico, etc. Por eso relacionamos el algoritmo con la computadora.

Compare el modelo de Von Newmann y el Charles Babbage.

Charles Babbage diseñó una máquina de propósito general capaz de resolver


cualquier problema matemático. La máquina de Babbage era un artilugio movido
por vapor que jamás llegó a completarse ni a funcionar bien (como Windows)
debido a que requería medios técnicos inexistentes en la época. Muchos
recordareis esa cita célebre de. Mientras que el Modelo de Von Newmann es a
arquitectura Von Newmann es vital, ya que en ella se basan las computadoras
actuales.
Después de esta comparación de los modelos de Von Newmann y el de Charles
Babbage concluimos que fueron muy importantes para la creación de las
computadoras de hoy en día. Pero podemos decir que el modelo más importante
es el de Von Newmann porque gracias a su modelo se ha originado el desarrollo
de las demás computadoras.

Identifique dos características que debió lograr el FORTRAN sobre la


programación usual de su época, para ser un lenguaje atractivo.

Entre las características que debió lograr FORTRAN sobre la programación usual
de su época, para ser un lenguaje atractivo, podemos mencionar estas dos:

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

 Fue un lenguaje compacto en comparación con el lenguaje de maquina o


ensamblador que eran los lenguajes de esa época.
 La otra características es que era un lenguaje más fácil de entender porque
en el lenguaje de maquina solo se utilizaban 0´s y 1´s, y era mucho más
difícil para programar.

Describa los aportes relevantes del Algol y comente la razón de su fracaso.

Entre los aportes que podemos mencionar de Algol tenemos los siguientes:
 Un ejemplo de ello es la sintaxis BNF (Backus and Naur Form) desarrollada
por dichos autores para expresar su gramática.
 Primer lenguaje con formato libre: los espacios en blancos o fines de línea
adicionales que aparecen al principio no son significativos, y son eliminados
en la fase de análisis léxico.
 Introdujo del símbolo ‘ ; ’ y de las construcciones parentizadas begin y end
para separar sintácticamente las instrucciones.
 Primer lenguaje con estructura de bloques. Introdujo las reglas de visibilidad
(el ámbito de los identificadores es local al bloque en que están
declarados).
 Primer lenguaje con disciplina de tipos. A diferencia de Fortran, todas las
variables han de ser declaradas, junto con su tipo, antes de ser nombradas.
 Primer lenguaje con instrucciones estructuradas de control de flujo. En
particular, las instrucciones for e if then else son aportaciones de Algol 60.
 Primer lenguaje en introducir la recursividad.
 Primer lenguaje en introducir los pasos de parámetros por valor y por
nombre.
 Límites de los arrays: decididos en tiempo de ejecución.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

Las razones del fracaso de Algol se dieron, ya que este lenguaje no llegó a
difundirse en la industria debido a que las compañías fabricantes no pusieron
especial empeño en el desarrollo de compiladores. También, ya que Algol 60 tenía
una notación elegante, pero ineficiente de implementar y los usuarios prefirieron
ocuparse de sus propios lenguajes.

Compare los conceptos de Portabilidad de un lenguaje de programación con


el de Máquina Virtual.

Los conceptos de portabilidad de lenguajes de programación con el de Máquina


Virtual, son muy parecido los dos, ya que la portabilidad permite la dependencia
de programas de las plataformas en la que corre y la maquina virtual genera un
entorno virtual entre las plataformas de las computadoras, que permite correr
programas en cualquier plataforma que contenga maquina virtual.

Justifique el nacimiento del COBOL.

COBOL nació porque el Departamento de Defensa de Estados Unidos, quería


disponer de un lenguaje universal para aplicaciones comerciales.

¿Qué componentes o conceptos podemos decir que el C ha heredado del


ALGOL?

El lenguaje de programación C ha heredado de ALGOL los siguientes conceptos:


 Estructura de bloques.
 Las reglas de visibilidad para los identificadores declarados dentro de un
bloque.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

 Las instrucciones for e if then else.


 También heredo la recursividad de ALGOL.
 Los pasos de parámetros por valor y por nombre.
 Los límites de los arrays decididos en tiempo de ejecución.

Explique el concepto de “Garbage Collection” e identifique el lenguaje


pionero y uno moderno que lo utilice.

“Garbage Collection” (recolección de basura) es una forma de gestión o


administración automática de memoria, donde el recolector de basura intenta
recuperar la memoria usada por objetos que nunca serán accedidos o cambiados
nuevamente por una aplicación.

Al compilar un programa, automáticamente se incluye en éste una subrutina


correspondiente al recolector de basura. Esta subrutina es invocada
periódicamente sin la intervención del programador para realizar las tareas de
liberación de memoria.

El lenguaje pionero en el uso del garbage collector es Lisp, ya que fue utilizado
para resolver el problema de la administración manual de la memoria y uno
moderno que lo utilice es Java.

Explique las diferencias entre lenguaje interpretado y compilado con


ejemplos de cada uno.

Antes de explicar las diferencias entre un lenguaje interpretado y un lenguaje


compilado, vale la pena definir estos conceptos:

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

 Un lenguaje compilado es un lenguaje de programación que se implementa


mediante un compilador. Es decir que una vez escrito el programa, éste se
traduce a partir de su código fuente por medio de un compilador en un
archivo ejecutable para una determinada plataforma.
 Un lenguaje interpretado es aquel en el que las instrucciones se traducen o
interpretan, una a una, en tiempo de ejecución a un lenguaje intermedio o
lenguaje máquina o a través de una máquina virtual.

Entre las diferencias que podemos encontrar entre un lenguaje interpretado y uno
compilado podemos mencionar las siguientes:

 Lenguaje de programación interpretado tiende a ser simple de programar,


mientras que el compilado tiene mayor complejidad de sintaxis.
 Un lenguaje compilado es infinitamente más rápido y eficiente que un
lenguaje interpretado
 El lenguaje interpretado tiene mayor flexibilidad frente a los lenguajes
compilados.
 El lenguaje interpretado tiene más facilidad para lograr independencia de
plataformas (portabilidad).

Como ejemplo de lenguajes compilados podemos mencionar:


 Fortran
 La familia de lenguajes de C
 Ada
 Pascal
 Algol

Como ejemplos de lenguajes interpretados tenemos:


 ActionScript

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

 ASP (hasta la versión 3)


 BeanShell (Java en lenguaje de Scripts)
 JavaScript (todas las plataformas)
 Lisp
 Lua
 Perl (Mundo Unix y en general para todas las demás plataformas)
 PHP
 Python (todas las plataformas)
 Ruby
 VBScript (Microsoft Windows)

Analice el concepto de “Función de Orden Superior” en el lenguaje C.


Ejemplifique.

El concepto de orden superior lo podemos definir como la capacidad de un


lenguaje para manejar su propio código como una estructura de datos más.

Analizando esta definición y otros conceptos hemos llegado a la conclusión de que


a través de la función del orden superior se puede pasar un procedimiento o
función como argumento a otro procedimiento o función.

El orden superior existe en muchos lenguajes pero, debido a que se implementa


de formas distintas, no se suele usar esta característica.

En el lenguaje C, los punteros a funciones, permiten pasar funciones como


argumentos.

A continuación mostramos un ejemplo de una función de orden superior en el


lenguaje C, en el cual se calcula el área o perímetro de un rectángulo.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

#include<iostream>
// Tipo que representa funciones de dos argumentos que devuelven entero
typedef long (* Funcion) (int, int);
long area (int x, int y)
{
return x*y; //si toma esta función, calcula el área
}
long perimetro( int x, int y)
{
return 2*(x+y); //si toma esta función, calcula el área
}
long calcularectangulo ( int a, int b, Funcion pf)
{
return pf(a ,b); //función a retornar
}
// Programa principal
int main()
{
int i, a, b; cin>>i>>a>>b;
// si i!=0 calcula el área, si no el perímetro.
if ( i )
cout=calcularectangulo(a, b, area);
else
cout=calcularectangulo(a, b, perimetro);
}
Identifique los aportes que generó el LISP y reflexione sobre el origen de la
recursividad.

Entre los aportes que el lenguaje de programación LISP genero tenemos:


 La implementación de listas en diversos lenguajes de programación.
 El desarrollo y evolución de una ciencia que se conoce como Inteligencia
Artificial.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

 Introdujo el manejo de excepciones con catch y throw.

Sobre el origen de la técnica de recursividad podemos decir que esta se


implementó en el lenguaje de programación LISP, como una técnica que permita
realizar operaciones de ciclos aplicando características parecidas a los bucles en
otros lenguajes; ya que LISP no cuenta con una construcción explicita de esta
técnica de bucles.

Compare los mecanismos de entrada / salida de FORTRAN IV y C.

Al ver los mecanismos de entrada / salida para ambos lenguajes, como lo son
FORTRAN IV (o FORTRAN 66) y C, pudimos analizar las diferencias entre estos
dos lenguajes para la entrada y salida.

Las instrucciones de FORTRAN que permite mecanismos de entrada / salida


están READ, WRITE, BACKSPACE, REWIND y ENDFILE.

Mientras que en el lenguaje de programación C, no existen palabras claves para


realizar la entrada y salida de datos, ya que estas se realizan a través de
funciones de biblioteca.

Explique y de ejemplo en C del Principio de Diseño “ortogonalidad”.

El principio de diseño de ortogonalidad permite que nuestro pseudo-código no sea


más simple y más regular que el código real.

Con esto podemos decir, que los principios del diseño se deben aplicar de manera
flexible, ya que pueden existir aspectos no deseados.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

También cabe señalar algunos aspectos importantes sobre la ortogonalidad:


 La ortogonalidad puede ser inapropiada
 Mucha ortogonalidad pueden descomponer el lenguaje porque algunas
entradas de las m x n posibles, pueden estar sin usar o pueden ser difíciles
de implementar.
 Algunas de ellas pueden aún ser operaciones ilegales; en este caso, el
programador debe recordar esas operaciones no válidas como
excepciones.

¿Cuál es la característica de las estructuras de control según la


programación estructurada (PE) de E. Dijkstra? Ejemplifique en C y explique
cómo se relaciona la PE con la instrucción GOTO.

En lenguajes de programación, las estructuras de control permiten modificar el


flujo de ejecución de las instrucciones de un programa.

Con las estructuras de control se puede:


• De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-
Then-Else y Select-Case).

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

• Ejecutar un grupo de sentencias mientras exista una condición (Do-While).


• Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until).
• Ejecutar un grupo de sentencias un número determinado de veces (For-
Next).

Todas las estructuras de control tienen un único punto de entrada y un único punto
de salida. Esto es una de las cosas que permite que la programación se rija por
los principios de la programación estructurada.

Ejemplos de estructuras de control:

If-Then-Else
Si la condición es verdadera, se ejecuta el bloque de sentencias 1, de lo contrario,
se ejecuta el bloque de sentencias 2.
IF (Condición) THEN
(Bloque de sentencias 1)
ELSE
(Bloque se sentencias 2)
END IF
Do-While
Mientras la condición sea verdadera, se ejecutarán las sentencias del bloque.

Do While (Condición)
(Bloque de sentencias)
Fin

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

En realidad la instrucción GOTO no se relaciona con la programación


estructurada, ya que este tipo de programación es llamado como el tipo de
programación sin GOTO.
En ciertos lenguajes clásicos (como APL o las formas primitivas de FORTRAN y
BASIC) se emplea con frecuencia la instrucción GOTO de transferencia
incondicional, que permite pasar la ejecución del programa a otra parte del mismo,
señalada por una etiqueta. En otros (como C o Pascal) se utiliza un estilo diferente
de programar (la programación estructurada) en la que la instrucción GOTO está
prohibida o, al menos, desaconsejada.

Evalúe el “Binding Time” (tiempo de asignación o ligadura o asociación de


elementos o recursos de un lenguaje) de los array en C.

Binding Time es cuando a una variable se le asignada su tipo (entero, string, etc.)
en un lenguaje de programación. Los compiladores tradicionales y ensambladores
proveen la unión temprana y asignan tipos en la compilación. Los lenguajes
orientados a objetos proveen ligamiento tardío (late-binding) y asignan tipos en
tiempo de ejecución cuando la variable recibe un valor del teclado u otra fuente.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

Relacione o compare la característica Psicológica de “Uniformidad” con el


concepto de “sobrecarga de operadores”. (Ejemplifique utilizando el
lenguaje JavaScript).

Centrándonos en el tema de la programación, la uniformidad nos permite escribir


los programas de forma que tengan una presentación más clara, que sean más
fáciles de leer y de entender.

Este concepto de uniformidad lo podemos encontrar en la programación a través


de normas de estilo y documentación de los programas, ya que nos benefician a la

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

hora de reducir errores semánticos y nos obligan a mantener cierta consistencia


de nuestro código.

Llegado este punto podemos relacionar la uniformidad con el término sobrecarga


de operadores, por lo que primero daremos una definición a este concepto.

La sobrecarga de operadores significa que es simplemente otra manera de invocar


funciones.

La sobrecarga de operadores, al igual que la uniformidad, nos permite también


escribir programas que sean fáciles de leer y de entender, ya que nos da la opción
de utilizar operadores con diferentes implementaciones, lo que nos permite un
mayor manejo de nuestro código y su entendimiento.

Use BNF para especificar una repetición en el lenguaje Pascal.

Especificación de una repetición en Pascal para un número finito de iteraciones:

Repetición  for <Sentencia de asignación> to <Expresión> do <Sentencia>


Sentencia de asignación  <Variable> := <Expresión>
Expresión  <Literal> | <Identificador> | <Variable> | <Llamada a función>
Sentencia  <Sentencia de asignación> | <Sentencia compuesta> | <Llamada a procedimiento>
Variable  <Identificador> | <Elemento de estructura> | <Variable dinámica>
Literal  <Letra mayúscula> | <Letra minúscula> | <Carácter de subrayado>
Identificador  <Literal>{<Literal> | <Digito>}
Identificador  <Literal>{<Literal> | <Digito>}

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

Letra mayúscula  A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
Letra minúscula  a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
Digito  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Carácter de subrayado  _

CONCLUSIÓN

En conclusión, el desarrollo de este trabajo nos ha permitido conocer de una forma


distinta aspectos importantes de algunos lenguajes de programación conocidos,
mostrándonos algunas técnicas y metodologías de programación, que han
permitido una mayor flexibilidad y entendimiento del código, así como aspectos en
común que han tenido estos lenguajes y que han servido de ejemplo para la
implementación de distintos lenguajes de programación actuales.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

Pensamos que la aplicación de esta investigación, nos ha permitido adentrarnos


un poco más en la estructura que compone los lenguajes de programación, por lo
que pensamos que el desarrollo del mismo fue de nuestro interés, pero pensamos
que esta investigación merece un estudio más a fondo, ya que quedan algunas
inquietudes, que no solo se conocerán a través de esta investigación, sino que
merecen su comprensión en el área de clases, a través de conversaciones y
análisis.

Referencia Electrónica

Computadores virtuales y binding-time [en línea]. Binding y binding-time.


http://asignaturas.inf.udec.cl/dilp/public_html/2-1.htm [consulta: 16 Sept. 2007].

Departamento de Informática de la Universidad de Valladolid [en línea]. Sintaxis de


Pascal. http://www.infor.uva.es/~cvaca/asigs/pascal.html [consulta 18 Sept. 2007].

Maestría en Ciencias en Ingeniería Electrónica [en línea]. Notación BNF.

Autores: Carlos De Gracia


Efraín Caballero
Evolución de los lenguajes de programación
_______________________________________________________________________________

http://www.depi.itch.edu.mx/apacheco/teoria/bnf.htm [consulta: 17 Sept. 2007].

Wikipedia. La enciclopedia libre [en línea]. http://es.wikipedia.org/wiki/Sobrecarga


[consulta: 16 Sept. 2007].

Grupo de Arquitectura y Redes de Computadores, Escuela Superior de Informática


[en línea]. Sobrecarga de operadores. http://arco.inf-
cr.uclm.es/~david.villa/pensar_en_C++/products/vol1/C12.html
[consulta: 16 Sept. 2007].

Todo sobre programación web y más. [En línea]. Programación Estructurada.


http://www.todo-programacion.com.ar/archives/2005/04/programacion_es.html
[consulta: 17 Sept. 2007].

Apuntes Web y Notas de Programación - Dev Blog - Ricardo Obregón. [en línea].
Lenguajes interpretados vs Lenguajes Compilados: Desidia, capricho o tendencia.
http://robregonm.blogspot.com/2006/02/lenguajes-interpretados-vs-lenguajes.html
[consulta: 17 Sept. 2007].

Autores: Carlos De Gracia


Efraín Caballero

Vous aimerez peut-être aussi