Lenguajes de Programación - Departamento de Lenguajes y

Anuncio
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Índice del capı́tulo
Lenguajes de Programación: Capı́tulo 1.
Introducción
–
Lenguajes de Programación: Capı́tulo 1. Introducción
1. El concepto de Lenguaje de Programación
2. Criterios de diseño
Carlos Ureña Almagro
3. Paradigmas de Programación
Dpt. Lenguajes y Sistemas Informáticos
ETSI Informática y de Telecomunicación
Universidad de Granada
Curso 2010-11
4. Antecedentes
5. Los primeros lenguajes de programación
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 1/1.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 2/1.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
Indice de la sección
El concepto de Lenguaje de Programación
Sección 1
El concepto de Lenguaje de Programación
Un lenguaje de programación es un convenio entre personas que
puede definirse ası́:
Conjunto de reglas o normas que permiten asociar a cada
programa correcto un cálculo que será llevado a cabo por
un ordenador (sin ambigüedades).
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 3/59.
I
por tanto, un lenguaje de programación es un convenio o
acuerdo acerca de como se debe de interpretar el significado
de los programas de dicho lenguaje
I
muchas veces se confunden los lenguajes con los compiladores,
interpretes o con los entornos de desarrollo de software
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 4/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
El concepto de Lenguaje de Programación
Estándarización de los lenguajes
El convenio suele estar reflejado en un documento (un libro) que se
hace público y mediante el cual se determinan las reglas de
interpretación correcta de los programas
I
algunos lenguajes están definidos por un documento
estandarizado en un organismo oficial como ISO (p.ej. C++
es el estándard ISO/IEC 14882, de 1998 )
I
en otros casos la descripción del lenguaje no está oficialmente
estandarizada, el lenguaje se define por el documento de
referencia que lo describe (pej. Java, descrito en este libro
Lenguajes de Programación: Capı́tulo 1. Introducción.
¿ que es un programa ?
En este contexto, un programa es una:
Secuencia finita de dı́gitos y caracteres, directamente
legible por las personas y por el ordenador
I
estas secuencias se suelen almacenar en uno o varios archivos
de texto ASCII o UNICODE.
I
también es posible almacenar programas en formatos
alternativos de archivos, como XML u otros, aunque en stos
casos los archivos no son directamente legibles por las
personas, sı́ son legibles mediante herramientas de traducción.
http://java.sun.com/docs/books/jls/ )
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 5/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
Cada lenguaje tiene asociado un conjunto (que debe estar bien
definido en el lenguaje) de programas correctos.
I
Las reglas de cada lenguaje deben definir ese conjunto sin
ambigüedades.
Para esto se suelen usar métodos mas o menos formales. La
validez de un programa se define a varios niveles con técnicas
distintas:
I
I
I
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
¿ que es un programa correcto ?
I
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 6/59.
léxico : expresiones regulares
sintaxis : gramáticas libres de contexto
semántica : descripciones o reglas no formales
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 7/59.
¿ que es un cálculo ?
Es necesario definir adecuadamente que se entiende por calculo,
podemos verlo desde dos perspectivas:
I
en sentido amplio:
Cualquier proceso automático de recogida,
manipulación, y difusión de información
I
en sentido formal:
Cualquier proceso automático cuyos aspectos
relevantes puedan ser modelados matemáticamente
con una máquina de turing
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 8/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
¿ que es el significado de un programa ?
¿ que es el significado de un programa ?
Al cálculo asociado por un lenguaje a un programa correcto se le
considera el significado del programa.
Ejemplo de significado: consideremos este programa
1
I
I
a las metodologı́as para especificar el significado de los
programas se les llama semántica de los lenguajes de
programación.
las reglas de cada lenguaje deben permitir establecer el
significado sin ambigüedad alguna, de forma clara y concisa
2
3
4
5
6
7
8
9
10
11
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 9/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
¿ que es el significado de un programa ?
El significado del anterior programa es el cálculo necesario para
evaluar una determinada función f .
I
La función f es la que asocia, a una secuencia de números
enteros, otra secuencia que contiene el factorial de cada uno
de ellos.
f
∈ N∗
→ N∗
(a1 , . . . , an ) → f (a1 , . . . , an ) = (a1 !, . . . , an !)
I
Existen varias aproximaciones a la semántica de los lenguajes
de programación.
I
Lo que hemos visto se denomina semantica denotacional (un
programa denota una función)
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 11/59.
int fact ( int n)
{
i f ( n>0) r e t u r n n∗ f a c t ( n−1) ;
else
return 1 ;
}
i n t main ( )
{
int n ;
w h i l e ( c i n >> n )
c o u t << f a c t ( n ) ;
}
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 10/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
El lenguaje como una función que asigna significado
Programas posibles
Programas correctos
Lenguaje de
programación
f
P1
P2
Significados
posibles
C1
C2
C1 = f (P1 )
C2 = f (P2 )
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 12/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
El concepto de Lenguaje de Programación
Programas equivalenes
Ambigüedad en los programas
Distintos programas pueden tener el mismo significado (serı́an
equivalentes)
Lenguaje de programación
Programas correctos
f
A
Los lenguajes deben ser no ambiguos:
Cálculos
posibles
C
B
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 13/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
¿ para que sirven los lenguajes de programación ?
Esencialmente:
para comunicar a un ordenador un procesamiento que va
a llevarse a cabo en dicho dispositivo (de forma cómoda
para la persona que escribe el programa).
En cuanto a la corrección: debe ser posible calcular si un
programa es correcto o no
I
En cuanto al significado: el significado de un programa debe
ser único.
Un ejemplo de ambiguedad es la siguiente expresion de C/C++
1
2
C = f (A) = f (B)
I
int a = 3 ;
c o u t << ((++a ) + ( a ∗=2)) ;
// 4+8 o 7+6
Según el estándard, puede denotar dos calculos distintos: se puede
imprimir 12 o 13 como salida.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 14/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
El concepto de Lenguaje de Programación
¿ como deben ser los lenguajes de programación ?
Como toda actividad de diseño en ingenierı́a, un lenguaje de
programación debe ser diseñado siguiendo unos principios básicos.
Pero también:
para comunicar entre personas información no ambigua
sobre algoritmos matemáticos o procesos reales
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 15/59.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 16/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Indice de la sección
Criterios de diseño de LL.PP.
Sección 2
Criterios de diseño
A continuación se incluyen una serie de caracterı́sticas deseables de
los lenguajes de programación:
I
Casi siempre, lograr una de ellas nos acerca a otras
caracterı́sticas relacionadas, pero inevitablemente también nos
aleja de otras caracterı́sticas contrapuestas a la primera.
I
Cada diseño de un lenguaje supone un compromiso o
equilibrio entre las caracterı́sticas deseables.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 17/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 18/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Facilidad de lectura y escritura
Facilidad de escritura (writability)
Facilidad para expresar un cálculo de forma clara,
correcta, concisa, y rápida. (es una caracterı́stica muy
genérica, que se concreta en otras)
Generalidad y Ortogonalidad
Generalidad
Las caracterı́sticas o construcciones del lenguaje deben
ser aplicables uniformemente y con la mı́nimas
restricciones en todos los contextos posibles.
Ortogonalidad (independencia)
Legibilidad
El diseño del lenguaje debe permitir que la lectura de los
programas lleve fácilmente a una compresión correcta del
cálculo que significan.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 19/59.
Las diferentes caracterı́sticas deben ser lo más
independientes posible entre ellas, en el sentido de que el
uso de una no debe modificar, limitar o impedir el uso
simultáneo o combinado de otra.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 20/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Uniformidad y Simplicidad
Uniformidad
Expresividad y fiabilidad
Expresividad
Caracterı́sticas parecidas deberı́an tener apariencias
parecidas.
Caracterı́sticas distintas no deberı́an tener la misma
apariencia
Simplicidad
El numero de caracterı́sticas o posibilidades distintas o
independientes deberı́a ser el mı́nimo posible. No deberı́a
haber caracterı́sticas distintas pero muy parecidas.
El lenguaje es expresivo cuando permite expresar con
facilidad procesos o estructuras complejos.
Fiabilidad
El lenguaje debe hacer fácil la construcción de programas
fiables, y debe impedir o dificultad la construcción de
programas no fiables.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 22/59.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 21/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Lenguajes de Programación: Capı́tulo 1. Introducción.
Criterios de diseño
Definición correcta y portabilidad
Definción precisa y clara
Como ya se ha comentado, la correctitud y el significado
de todo programa deben estar definidos sin
ambigüedades, y además, estas definiciones deben
fácilmente legibles y comprensibles.
Independencia de la máquina y el S.O.
En general, el lenguaje debe permitir la construcción con
la máxima facilidad posible de programas usables en
arquitecturas hardware y SS.OO. distintas con un mı́nimo
de cambios.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 23/59.
Eficiencia
Eficiencia en la traducción
El diseño del lenguaje debe permitir fácilmente la
construcción de traductores e intérpretes que sean
eficientes en uso de tiempo y memoria
Eficiencia de ejecución
El diseño del lenguaje no debe dar lugar a que la
interpretación o ejecución de los programas traducidos
conlleve un alto gasto en tiempo o memoria.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 24/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Indice de la sección
Paradigmas de Programación
Sección 3
Paradigmas de Programación
3.1. Lenguajes Imperativos
3.2. Lenguajes Funcionales
3.3. Lenguajes Declarativos
Constituyen tres categorı́as de los lenguajes de programación:
I
Imperativos
I
Funcionales (o aplicativos)
I
Lógicos (o declarativos)
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 25/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 26/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Lenguajes Imperativos
¿ que es un paradigma de programación ?
I
Cada uno de estos paradigmas se caracteriza por un modelo
formal distinto de lo que constituye un cálculo.
I
El conjunto de cálculos realizables es igual en los tres casos
(los que se pueden hacer con máquinas de turing)
Lenguajes Imperativos
Un cálculo es un conjunto de instrucciones que establecen
explı́citamente como se debe manipular la información digital
presente en memoria, y/o como se debe recoger o enviar
información desde/hacia los dispositivos
Ejemplos:
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 27/59.
I
Ejemplos de lenguajes imperativos: Fortran, Algol, Pascal, C,
Ada, C++, Java, C#
I
La mayorı́a de los lenguajes usados para desarrollo de software
comercial son imperativos
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 28/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Paradigmas de Programación
Lenguajes Imperativos
Lenguajes Imperativos
Ejemplo en C (1/2)
1
2
3
4
5
6
7
8
9
10
11
12
13
Ejemplo en C (2/2)
i n t mcd ( i n t x , i n t y )
{
i f ( x == 0 && y == 0 )
{ printf (” error !” ); exit (1);
}
i f ( x < 0 ) x = −x ;
i f ( y < 0 ) y = −y ;
w h i l e ( y != 0 )
{ int r = x % y ;
x = y ; y = r ;
}
return x ;
}
1
2
3
4
i n t main ( )
{
p r i n t f (”%d\n ” , mcd ( 1 0 , 1 0 2 ) ) ;
}
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 29/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 30/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Lenguajes Funcionales
Lenguajes Funcionales
Lenguajes Funcionales (o aplicativos)
Los programas en los Lenguajes Funcionales
Un cálculo es el proceso de aplicar una función recursiva a un valor
de su dominio para obtener el correspondiente valor del rango (el
resultado).
Un programa en estos lenguajes consiste en una especificación de
la función recursiva que queremos calcular, junto con los
argumentos sobre los que se aplica.
El término función recursiva debe entenderse aquı́ según se
introduce en la teorı́a de la computabilidad, es decir, como una
función calculable con una máquina de turing (no como un
subprograma que se invoca a si mismo)
Normalmente, dicha función estará especificada en términos de
otras, que también se incluyen en el programa
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 31/59.
Ejemplos:
I
Ejemplos de lenguajes funcionales son: Lisp, Scheme, ML,
Miranda, Haskell
I
Menos difundidos que los imperativos para el desarrollo de
software comercial
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 32/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Paradigmas de Programación
Lenguajes Funcionales
Lenguajes Declarativos
Ejemplo de programa en Haskell
En este lenguaje, el máximo común divisor se calcula con la
función mcd
1
2
3
4
5
mcd 0 0
mcd x y
where
mcd1
mcd1
Lenguajes Declarativos (logicos
Un cálculo es el proceso de encontrar que elementos de un dominio
cumplen determinada relación definida sobre dicho dominio, o bien
determinar si un determinado elemento cumple o no dicha relación.
= e r r o r ”mcd no e s t á d e f i n i d o p a r a 0 , 0 ”
= mcd1 ( abs x ) ( abs y )
x 0 = x
x y = mcd1 y ( r e s t o x y )
6
7
mcd 10 1 0 2 ;
I
Un programa en estos lenguajes consiste en una especificación
de la relación que queremos calcular
I
Normalmente, dicha relación estará especificada en términos
de otras, que también se incluyen en el programa
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 33/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 34/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Lenguajes Declarativos
Lenguajes Declarativos
El lenguaje Prolog
Ejemplo de programa en Prolog
El lenguaje declarativo por excelencia es Prolog
I
I
Ejecutar un programa consiste en buscar recursivamente en
una base de datos de relaciones
Prolog está especialmente indicado para aplicaciones muy
especı́ficas como:
I
I
I
I
I
sistemas expertos
demostración de teoremas
consulta de bases de datos relaccionales,
procesamiento del lenguaje natural
En este caso, mcd es una relacción entre tres valores enteros (se
cumple si el tercero es el m.c.d. de los dos primeros)
1
2
3
4
5
6
mcd1 ( x , y , r ) :− y i s 0 , r i s x
mcd1 ( x , y , r ) :− nx i s y , r e s t o ( x , y , ny ) ,
mcd1 ( nx , ny , r )
mcd ( x , y , r ) :− a b s ( x , ax ) , a b s ( y , ay ) ,
mcd1 ( ax , ay , r )
?− mcd ( 1 0 , 1 0 2 , z ) .
Para estos casos, los programas en prolog son más cortos y
claros que los equivalentes en otros paradigmas
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 35/59.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 36/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Paradigmas de Programación
Paradigmas de Programación
Lenguajes Declarativos
Lenguajes Declarativos
Los paradigmas de prog. en la asignatura.
I
Esta asignatura se centra en el paradigma de programación
imperativa, con algunas menciones a caracterı́sticas de
lenguajes funcionales
I
No trataremos aspectos de programación declarativa
Puntos en común entre paradigmas.
I
Algunos conceptos de los lenguajes de programación son
comunes a la programación imperativa y la funcional
I
Algunos de los conceptos surgidos en la programación
imperativa se han incorporado a los lenguajes funcionales (y
viceversa)
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 37/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Antecedentes
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 38/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Antecedentes
Indice de la sección
Antecedentes
Sección 4
Antecedentes
4.1. Plankalkül
4.2. Shortcode
4.3. A-0
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 39/59.
I
Los primeros lenguajes de programación surgen debido a las
dificultades de la programación directa en código máquina o
con ensambladores básicos.
I
Revisaremos tres de los primeras construcciones que pueden
llamarse lenguajes de programación
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 40/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Antecedentes
Antecedentes
Plankalkül
Plankalkül
El lenguaje Plankalkül
Puede considerarse el primer lenguaje especı́ficamente diseñado
para la programación de ordenadores.
Conceptos que introduce
Introduce varios de los conceptos básicos de la programación de
alto nivel:
Diseñado por Konrad Zuse en Alemania, entre 1943 y 1945.
Inicialmente pensado para sus ordenadores Z1, Z2, que fueron
de los primeros de la historia.
I
Variables: sin declaración explı́cita, con nombres de una letra
(R,V o Z) seguida de un dı́gito.
I
Expresiones con operadores infijos
I
No se pudo implementar un compilador o interprete para los Z
por los problemas de la postguerra alemana.
I
Sentencia de asignación de una expresión a una variable
I
Ejecución condicional de sentencias (if sin else)
I
No se publicó hasta 1972, y el primer (y único) intérprete se
implementó en 2000.
I
Bucles indefinidos (mediante sentencias equivalentes a
continue o break, no con una expresión lógica)
I
Subprogramas que producen un resultado
I
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 41/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Antecedentes
Shortcode
Conceptos que introduce: tipos de datos
I
I
Lenguajes de Programación: Capı́tulo 1. Introducción.
Antecedentes
Plankalkül
I
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 42/59.
Tipos de datos definidos por el usuarios (con declaración
explı́cita de la representación como secuencias de bits),
también llamados estructuras
Tipos de datos (estructuras) predefinidos: enteros, enteros en
BCD, reales, números complejos, números racionales (con y
sin signo)
Pares, arrays y listas (con elementos de tipo arbitrario),
implementados usando árboles binarios.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 43/59.
El lenguaje Shortcode
Es el lenguaje usado por el primer programa intérprete conocido..
I
Desarrollado en EE.UU por John Mauchly en 1949, fue usado
en el UNIVAC I.
I
El ordenador UNIVC I tenı́a una longitud de palabra de 72
bits. Las instrucciones de asignación con expresiones
complejas se codifican en dichas palabras de 72 bits.
I
Se buscaba la facilidad de programación a cambio de perder
eficiencia en tiempo (ya que se interpretaba)
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 44/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Antecedentes
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
A-0
El lenguaje A-0
Indice de la sección
Diseñado e implementado por Grace Hopper entre 1951 y 1953
para la compañı́a UNIVAC, se diseño para el primer compilador
(que generaba código máquina a partir de especificaciones de más
alto nivel en A-0)
I
La entrada del compilador es un programa con llamadas a
subrutinas:
I
I
Sección 5
Los primeros lenguajes de programación
5.1. Fortran
5.2. Algol
5.3. Simula
Las subrutinas se identifican por nombres
Podı́an incluir lecturas o escrituras sobre parámetros formales.
I
La salida es código máquina con las subrutinas expandidas en
el lugar de las llamadas, y con las referencias a los parámetros
particularizadas a los actuales
I
Esto se hacı́a antes manualmente, con muy alta probabilidad
de errores.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 45/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 46/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Los primeros lenguajes de programación
Lenguajes pioneros
El lenguaje Fortran
Fortran
I
Existen multitud de lenguajes, y la mayorı́a se han diseñado
incorporando nuevos conceptos
I
En los primeros lenguajes casi todos los conceptos eran nuevos
Seleccionamos tres por la relevancia a largo plazo de los
conceptos que introdujeron:
I
I
I
I
Fortran: introduce la programación de alto nivel
Algol: Introduce la programación estructurada
Simula: Introduce la programación orientada a objetos
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 47/59.
Es el primer lenguaje de alto nivel con amplia difusión y amplia
disponibilidad de compiladores. La motivación de su diseño fue
sustituir la programación en ensamblador.
I
Diseñado e implementado por primera vez entre 1955 y 1957
en IBM, para el IBM 704.
I
Ha tenido una amplı́sima difusión y uso
I
Durante muchos años se ha considerado el lenguaje por
excelencia para aplicaciones cientı́ficas, ha tenido muchas
ampliaciones.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 48/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Fortran
Fortran
Conceptos introducidos en Fortran
I
Ejemplo de programa en Fortran
Calcula el producto y la suma de los elem. de un array, e imprime
0 (producto ≤ suma), o 1 (producto > suma) :
Variables cuyo nombre seria de hasta 6 caracteres (2
inicialmente). El nombre determina implı́citamente el tipo,
que solo podı́a ser entero o de coma flotante.
1
I
Sentencia de asignación con expresiones infijas a la derecha
(incluyendo sub-expresiones entre paréntesis.
2
I
Vectores o arrays uni o bi-dimensionales.
4
I
Sentencias IF-GOTO con expresiones aritméticas, incluyendo
operadores aritméticos relacionales
5
I
Sentencia DO (bucles definidos).
7
I
Subrutinas definidas por el usuario (sin compilación separada)
I
Entrada y de salida con formato.
3
6
8
9
10
11
100
200
250
300
500
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 50/59.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 49/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Algol
Algol
El lenguaje Algol
Conceptos introducidos en Algol
Es el lenguaje que introduce lo que hoy conocemos como
programación estructurada. La motivación inicial era mejorar
algunas limitaciones de Fortran.
I
Declaración explı́cita de variables y parámetros, incluyendo su
tipo.
I
Arrays multidimensionales, con posibilidad de fijar el rango de
ı́ndices.
I
Agrupación de sentencias en sentencias compuestas
delimitadas por las palabras clave begin-end (estructura de
bloques).
I
Definido por un comité internacional en varias reuniones entre
1958 y 1962.
I
Es el primer lenguajes descrito formalmente por BNFs
I
No fue apoyado por IBM, y se difundió poco, aunque se uso
mucho para comunicar algoritmos
I
Sentencia if-else, bucles definidos e indefinidos con posibilidad
de anidamiento arbitrario.
I
Tuvo un impacto enorme en posteriores lenguajes: Pascal,
Modula, Ada, C, Simula
I
Variables de ámbito restringido a los bloques.
I
Paso de parámetros por valor y por nombre
I
Procedimientos recursivos.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 51/59.
DIMENSION A( 1 0 )
ISUM = 0
IPROD = 1
DO 100 I =1 ,10
ISUM = ISUM + A( I )
IPROD = IPROD ∗ A( I )
IF ( IPROD−ISUM ) 2 0 0 , 2 0 0 , 3 0 0
PRINT 0
GOTO 500
PRINT 1
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 52/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Los primeros lenguajes de programación
Algol
Algol
Ejemplo de (sub)programa en Algol (1/2)
Ejemplo de (sub)programa en Algol (2/2)
Subprograma de nombre ejemplo que acepta dos parámetros
enteros:
1
procedure ejemplo (a , b ) ;
6
7
5
begin
integer k ;
real
e ;
....
6
7
8
9
3
5
value
a, b ;
integer a , b ;
4
2
4
2
3
....
f o r k := a /2 s t e p 2 u n t i l b do
begin
e := i f e s p r i m o ( k ) then 0 e l s e 1 ;
i f e == 0 then
p u t l i s t ( k , ’ e s primo ’ )
else
p u t l i s t ( k , ’ no e s primo ’ )
end
1
8
9
10
end
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 53/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Simula
El lenguaje Simula
Conceptos introducidos en Simula
Es el lenguaje que introduce los conceptos esenciales de la
programación orientada a objetos.
I
I
I
I
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Simula
I
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 54/59.
Basado en Algol para todos los aspectos de la programación
estructurada.
Su diseño fue motivado por la necesidad de crear software de
simulación.
Fue diseñado e implementado en el Centro de Computación
Noruego de Oslo entre 1962 y 64, por Kristen Nygaard y
Ole-Johan Dahl.
No se ha usado mucho para software comercial, sı́ para
comunicar algoritmos.
Influencia decisiva en lenguajes OO: Smalltalk, Eiffel, C++,
Java.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 55/59.
I
Definición de clases como variables de instancia más metodos
para acceder a ellas
I
Los objetos como variables instancias de una clase
I
Herencia o extensión de clases.
I
Métodos virtuales (polimorfismo de herencia).
I
Corutinas (es un concepto de la programación concurrente)
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 56/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Los primeros lenguajes de programación
Simula
Simula
Ejemplo de programa en Simula (1)
Ejemplo de programa en Simula (2)
Clase de nombre rectángulo con dos atributos reales (ancho y
alto) y un método que devuelve un valor lógico (escuadrado).
1
2
begin
f i g u r a c l a s s R e c t a n g u l o ( ancho , a l t o ) ;
real
7
8
9
10
8
9
10
end o f R e c t a n g u l o ;
....
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 57/59.
Lenguajes de Programación: Capı́tulo 1. Introducción.
Los primeros lenguajes de programación
Simula
fin del capı́tulo.
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 59/59.
i f ( r . e s C u a d r a d o ) then
begin
OutText ( ” e s un c u a d r a d o ” ) ;
OutImage ;
end
6
ancho , a l t o ;
boolean procedure e s C u a d r a d o ;
e s C u a d r a d o := ancho=a l t o ;
7
ref ( rectangulo ) r ;
r :− new r e c t a n g u l o ( 2 . 0 , 2 . 0 ) ;
3
5
5
6
2
4
3
4
....
1
11
12
end o f program
Autor: Carlos Ureña. Fecha creación: September 30, 2010. Página: 58/59.
Descargar