Programaci ´on estructurada
(Lenguajes de programaci ´on)
M. en C. Sergio Luis P ´erez P ´erez
UAM CUAJIMALPA, M ´EXICO, D. F.
Lenguajes de programaci ´on
Lenguajes de programaci ´on
1 Lenguajes de programaci ´on
Lenguajes de programaci ´on Breve historia
Breve historia
1 Lenguajes de programaci ´on
Breve historia
Niveles de los lenguajes Paradigmas de programaci ´on
Lenguajes de programaci ´on Breve historia
Breve historia I
Para que la computadora entienda nuestras instrucciones debe
usarse un lenguaje espec´ıfico conocido comoc ´odigo m ´aquinao
lenguaje m ´aquinay s ´olo consiste en cadenas binarias.
Unlenguaje de programaci ´ones un lenguaje formal dise ˜nado para poder expresar procesos que pueden ser llevados a cabo por m ´aquinas como las computadoras.
Los primeros operadores de computadoras decidieron hacer traductores para reemplazar los 0 y 1 por palabras o abstracci ´on de palabras y letras provenientes del ingl ´es, lo que dio pie a los lenguajes ensambladores.
Lenguajes de programaci ´on Breve historia
Breve historia II
Ellenguaje ensambladorsigue la misma estructura del lenguaje m ´aquina, pero las letras y palabras son m ´as f ´aciles de recordar y entender que los n ´umeros.
Posteriormente aparecieron diferentes lenguajes de
programaci ´on, en particular loslenguajes de alto nivel.
En 1949, fue propuestoShort CodeporJohn Mauchly, el cual
es uno de los primeros lenguajes de programaci ´on desarrollados.
John Mauchly fue un f´ısico americano que junto conJohn Eckert
dise ˜naron laENIAC, la primer computadora de prop ´osito general.
Tambi ´en dise ˜naron laEDVAC, laBINACy laUNIVAC I, que fue la
Lenguajes de programaci ´on Breve historia
Breve historia III
La primera programadora de computadora conocida fueAda
Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matem ´aticas a Ada quien, despu ´es de
conocer aCharles Babbage, tradujo y ampli ´o una descripci ´on de
su m ´aquina anal´ıtica.
El nombre del lenguaje de programaci ´on Ada fue escogido como homenaje a esta programadora.
En 1953,John Backussometi ´o una propuesta a sus superiores
en IBM para desarrollarFortranjunto con un equipo de varios
Lenguajes de programaci ´on Breve historia
Breve historia IV
El primer manual para Fortran apareci ´o en 1956 y el primer compilador fue entregado hasta 1957.
En 1960, se cre ´oCOBOL, otro de los primeros lenguajes de
programaci ´on.
En 1960, fue desarrolladoAPL(A Programming Language) por
Kenneth E. Iversoncuya novedad fue el uso de arreglos multidimensionales.
Entre 1958 y 1973, fueron desarrolladas diferentes versiones del
lenguajeALGOL(ALGOrithmic Language) por un grupo de
Lenguajes de programaci ´on Breve historia
Breve historia V
ALGOL es de los primeros lenguajes en manejar la
programaci ´on estructurada.
En los 60s, fue desarrolladoSimulapor los noruegosOle-Johan
DahlyKristen Nygaardel cual es el primer lenguaje de
programaci ´on desarrollado para soportar laprogramaci ´on
orientada a objetos.
En los 70s, fue desarrolladoSmalltalkporAlan Keyde Xerox, el
cual es conocido como el primer lenguaje “puro” para programaci ´on orientada a objetos.
De 1969 a 1973, fue desarrolladoCporDennis Ritchiede los
AT&T labs, el cual era un lenguaje orientado principalmente a la
Lenguajes de programaci ´on Breve historia
Breve historia VI
En 1972, fue desarrolladoPrologporAlain Colmerauer, el cual
fue el primer lenguaje de programaci ´on l ´ogica.
En 1979, fue desarrolladoC++porBjarne Stroustrupque es un
lenguaje orientado a objetos y a la programaci ´on de sistemas. C++ ha pasado por diferentes revisiones y est ´andares
introduciendo nuevas funcionalidades: C++98, C++03, C++07, C++11, C++14 y pr ´oximamente C++17.
De 1991 a 1995, fue desarrolladoJavaporJames Gosling,Mike
SheridanyPatrick Naughtonde Sun Microsystems, el cual es un lenguaje orientado a objetos dise ˜nado con un estilo similar a C++.
Lenguajes de programaci ´on Breve historia
Breve historia VII
Las principales versiones de Java son: JDK 1.0 (1996), JDK 1.1 (1997), J2SE 1.2 (1998), J2SE 1.3 (2000), J2SE 1.4 (2002), J2SE 5.0 (2004), Java SE 6 (2006), Java SE 7 (2011), Java SE 8 (2014).
JDKsignificaJava Development Kity es una implementaci ´on de
alguna plataforma como Java SE, Java EE or Java ME.
J2SEsignifica J2SEJava 2 Platform, Standard Editionque es una
plataforma para desarrollo r ´apido y seguro de aplicaciones, as´ı c ´omo de aplicaciones portables.
Java SEsignificaJava Platform, Standard Editiones una colecci ´on de plataformas de desarrollo para Java.
Lenguajes de programaci ´on Breve historia
Breve historia VIII
En 1999,Anders Hejlsbergy su equipo comenzaron el
desarrollo deC#.
Las diferentes versiones de C# van de la 1.0 de 2002 a la 5.0 de 2013.
Existen decenas de lenguajes de programaci ´on y una lista bastante amplia la puede encontrar en:
http://en.wikipedia.org/wiki/List of programming languages. Todo lenguaje de programaci ´on se compone de un conjunto de s´ımbolos (palabras reservadas, operadores, constantes), reglas sint ´acticas y sem ´anticas que definen su estructura y el significado de sus elementos y expresiones.
Lenguajes de programaci ´on Niveles de los lenguajes
Niveles de los lenguajes
1 Lenguajes de programaci ´on
Breve historia
Niveles de los lenguajes
Paradigmas de programaci ´on
Lenguajes de programaci ´on Niveles de los lenguajes
Niveles de los lenguajes I
Por su forma de abstracci ´on existen cuatro niveles de programaci ´on:
1 Lenguajes de m ´aquina. 2 Lenguajes ensambladores. 3 Lenguajes de alto nivel. 4 Lenguajes declarativos.
Lenguajes de programaci ´on Niveles de los lenguajes
Niveles de los lenguajes II
Lenguaje m ´aquina
Fue el primer lenguaje utilizado en la programaci ´on de computadoras.
Es la capa m ´as interna en los niveles de lenguaje en la computaci ´on.
El lenguaje de m ´aquina es el ´unico que entiende la computadora. Este lenguaje se expresa a trav ´es del alfabeto binario.
El lenguaje de m ´aquina es dependiente de la arquitectura de la computadora.
Lenguajes de programaci ´on Niveles de los lenguajes
Niveles de los lenguajes III
Lenguaje ensamblador
El lenguaje ensamblador es una representaci ´on simb ´olica del lenguaje de m ´aquina asociado.
Cada computadora tiene un lenguaje ensamblador propio. El lenguaje ensamblador mnem ´onicos para representar cada instrucci ´on del lenguaje de m ´aquina asociado.
Un programa ensamblador crea c ´odigo objeto traduciendo instrucciones mnem ´onicas de lenguaje ensamblador en c ´odigos de operaci ´on, y resolviendo los nombres simb ´olicos para las localizaciones de memoria y otras entidades.
Lenguajes de programaci ´on Niveles de los lenguajes
Niveles de los lenguajes IV
Lenguaje de alto nivel
Son lenguajes independientes de la computadora. Un programa escrito en lenguaje de alto nivel puede ser
ejecutado en cualquier computadora, siempre que ´esta disponga del traductor o compilador del lenguaje en cuesti ´on.
Los programas pueden ser escritos y comprendidos de una forma m ´as sencilla.
Se caracterizan por proporcionar librer´ıas de uso frecuente (entrada/salida, funciones matem ´aticas, manejo de cadenas, etc.).
Lenguajes de programaci ´on Niveles de los lenguajes
Niveles de los lenguajes V
Lenguaje declarativo
Son aquellos lenguajes en los que se indica a la computadora qu ´e es lo que se desea obtener o qu ´e es lo que se est ´a buscando. Son lenguajes de ´ordenes, donde se expresa lo que hay que hacer en lugar de c ´omo hacerlo.
En la programaci ´on declarativa las sentencias que se utilizan lo que hacen es describir el problema.
Existen diversos tipos de lenguajes declarativos: Los lenguajes l ´ogicos, como Prolog.
Los lenguajes algebraicos, como SQL. Los lenguajes funcionales, como Haskell.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on
1 Lenguajes de programaci ´on
Breve historia
Niveles de los lenguajes
Paradigmas de programaci ´on
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on I
Unparadigma de programaci ´ones una propuesta tecnol ´ogica adoptada por una comunidad de programadores cuyo n ´ucleo central es incuestionable en cuanto a que ´unicamente trata de resolver uno o varios problemas claramente delimitados. La resoluci ´on de estos problemas debe suponer un avance significativo en al menos un par ´ametro que afecte a la ingenier´ıa de software.
El paradigma de programaci ´on m ´as utilizado es el orientado a objetos.
Un paradigma de programaci ´on representa un enfoque particular o filosof´ıa para dise ˜nar soluciones.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on II
Los paradigmas m ´as comunes son: Imperativo.
Funcional. L ´ogico. Declarativo.
Orientado a objetos.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on III
Imperativo
Es un paradigma que describe la programaci ´on en t ´erminos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos se componen de un conjunto de instrucciones que le indican a la m ´aquina c ´omo realizar una tarea. La implementaci ´on de hardware suele ser imperativa.
Esto se debe a que el hardware de las computadoras implementa el paradigma de las M ´aquinas de Turing.
Fortran fue el primer gran lenguaje de programaci ´on imperativo. Ejemplos: BASIC, C/C++, C#, Java, Pascal, Perl, PHP, Python.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on IV
Funcional
Es un paradigma de programaci ´on declarativa basado en la utilizaci ´on de funciones aritm ´eticas que no maneja datos mutables o de estado.
Enfatiza la aplicaci ´on de funciones, en contraste con el estilo de programaci ´on imperativa, que enfatiza los cambios de estado.
La programaci ´on funcional tiene sus ra´ıces en elc ´alculo lambda,
el cual es un sistema formal desarrollado en los a ˜nos 1930 para investigar la definici ´on de funci ´on y la recursi ´on.
Los lenguajes puramente funcionales han sido enfatizados en el ambiente acad ´emico m ´as que en el desarrollo de software. Ejemplos: Scheme, Objective Caml, Haskell, Mathematica y SQL.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on V
L ´ogico
Es un tipo de programaci ´on declarativa.
La programaci ´on l ´ogica gira en torno al concepto de predicado, o relaci ´on entre elementos.
Se basa en la teor´ıa l ´ogica de primer orden e incorpora algunos comportamientos de orden superior como la l ´ogica difusa. Lal ´ogica de primer ordenes un sistema formal dise ˜nado para
estudiar la inferencia en loslenguajes de primer orden.
Son lenguajes formales con cuantificadores, predicados y funciones cuyos argumentos son ctes. o variables de individuo. Ejemplos: Prolog.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on VI
Declarativo
Es un paradigma de programaci ´on basado en el desarrollo de programas especificando un conjunto de condiciones,
proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su sol. La soluci ´on es obtenida mediante mecanismos internos de control, sin especificar exactamente c ´omo encontrarla. No existen asignaciones destructivas.
Existen varios tipos de lenguajes declarativos: Los lenguajes l ´ogicos.
Los lenguajes algebraicos. Los lenguajes funcionales.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on VII
Orientado a objetos
Es un paradigma que usa objetos en sus interacciones para dise ˜nar aplicaciones y programas inform ´aticos.
Se basa en t ´ecnicas como herencia, cohesi ´on, abstracci ´on, polimorfismo, acoplamiento y encapsulamiento.
Losobjetosson entidades que tienen un determinado estado, comportamiento (m ´etodo) e identidad.
Elestadose compone de datos o atributos que lo definen.
Elcomportamientoest ´a definido por los m ´etodos o mensajes a
los que sabe responder dicho objeto, es decir, las operaciones que se pueden realizar con ´el.
Laidentidades una propiedad de un objeto que lo diferencia.
Lenguajes de programaci ´on Paradigmas de programaci ´on
Paradigmas de programaci ´on VIII
Multiparadigma
Un lenguaje de programaci ´on multiparadigma es el que soporta m ´as de un paradigma de programaci ´on.
Seg ´un Bjarne Stroustrup, un lenguaje multiparadigma permite crear programas usando m ´as de un estilo de programaci ´on. El objetivo es permitir a los programadores utilizar el mejor paradigma para cada trabajo.
Un ejemplo es esOz, desarrollado en el laboratorio de
programaci ´on de sistemas en la Universidad de Saarland en Alemania por Gert Smolka y sus estudiantes en 1990.
Oz contiene una forma simple y bien hecha de la mayor´ıa de los conceptos de los principales paradigmas de programaci ´on.
Compilaci ´on de programas
Compilaci ´on de programas
1 Lenguajes de programaci ´on
Compilaci ´on de programas
Compilaci ´on de programas I
Antes de poder ejecutar un programa escrito en alg ´un lenguaje de programaci ´on, primero debe traducirse a un formato en el que la computadora pueda ejecutarlo.
Los sistemas de software que se encargan de dicha traducci ´on son los compiladores.
Uncompiladores un programaprocesador de lenguajeque traduce un programa escrito en un lenguaje de programaci ´on a otro lenguaje de programaci ´on.
El compilador genera un programa equivalente que la m ´aquina ser ´a capaz de interpretar.
Compilaci ´on de programas
Compilaci ´on de programas II
Un compilador generalmente traduce el c ´odigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior.
Unint ´erpretees otro tipo de procesador de lenguaje que en vez de producir un nuevo programa lo ejecuta aparentemente al instante.
Generalmente el programa producido por el compilador es mucho m ´as r ´apido que el ejecutado por un int ´erprete.
Sin embargo, el int ´erprete puede ofrecer mejores diagn ´osticos de error pues ejecuta instrucci ´on por instrucci ´on.
Compilaci ´on de programas
Compilaci ´on de programas III
La estructura de un compilador se divide en dos grandes etapas, una de an ´alisis y una de s´ıntesis.
Elan ´alisisdivide el programa fuente en componentes y define una estructura gramatical sobre ellas.
Las´ıntesisconstruye el programa destino a partir de la representaci ´on intermedia y de una tabla de s´ımbolos.
El proceso de compilaci ´on opera a trav ´es de una secuencia de fases.
Compilaci ´on de programas
Compilaci ´on de programas IV
Proceso de compilaci ´on 1 Analizador l ´exico.
2 Analizador sint ´actico.
3 Analizador sem ´antico.
4 Generador de c ´odigo intermedio.
5 Optimizador de c ´odigo independiente de la m ´aquina.
Compilaci ´on de programas
Compilaci ´on de programas V
Analizador l ´exico
Se lee el flujo de caracteres del programa y se agrupan en
secuencias significativas conocidas comolexemas.
Ellexemaes una parte de una palabra que constituye la unidad m´ınima y que es la ra´ız de esta misma con un significado l ´exico.
Para cada lexema el analizador produce como salida untokende
la forma:
<nombre-token, valor-atributo>
Por ejemplo la instrucci ´on:
a=b+c∗10
genera tres identificadores de variable, tres de operadores y uno de constante.
Compilaci ´on de programas
Compilaci ´on de programas VI
Analizador sint ´actico
Utiliza los tokens generados por el analizador l ´exico para crear una representaci ´on intermedia en forma de ´arbol que describa la estructura gramatical del flujo de los tokens.
A esto se le conoce como ´arbol sint ´actico.
En este ´arbol cada nodo intermedio suele ser una operaci ´on y los hijos de los nodos son los argumentos de la operaci ´on.
En dicho ´arbol la altura de cada nodo representa la precedencia de dicha operaci ´on dentro de una instrucci ´on.
Compilaci ´on de programas
Compilaci ´on de programas VII
Analizador sem ´antico
En esta fase se utiliza el ´arbol sint ´actico y la informaci ´on en la tabla de s´ımbolos para comprobar la consistencia sem ´antica del programa con la definici ´on del lenguaje.
Tambi ´en se lleva a cabo la comprobaci ´on de tipos de las variables. La especificaci ´on del lenguaje puede permitir ciertas
conversiones de tipo conocidas comocoerciones.
Compilaci ´on de programas
Compilaci ´on de programas VIII
Generador de c ´odigo intermedio
El compilador puede convertir el programa fuente a c ´odigo destino a trav ´es de una o varias representaciones intermedias. La representaci ´on intermedia suele ser similar al c ´odigo m ´aquina con la salvedad de que: debe ser f ´acil de producir y f ´acil de traducir a la m ´aquina destino.
Existe una forma intermedia llamadac ´odigo de tres direcciones
que genera instrucciones similares a lenguaje ensamblador es decir con tres operandos por direcci ´on.
Compilaci ´on de programas
Compilaci ´on de programas IX
Optimizador de c ´odigo independiente de la m ´aquina
En esta fase se trata de mejorar el c ´odigo intermedio.
Mejor puede significar m ´as r ´apido aunque igual pueden lograrse otros objetivos como un c ´odigo m ´as corto.
Muchos compiladores invierten gran cantidad de tiempo en esta fase.
Aquellos compiladores que gastan gran parte del tiempo en esta
Compilaci ´on de programas
Compilaci ´on de programas X
Generador de c ´odigo
Este se encarga de recibir el c ´odigo intermedio y traducirlo al lenguaje destino.
Si el lenguaje destino es el m ´aquina entonces se seleccionan registros o localidades de memoria para cada variable que utiliza el programa.