Lenguajes de Programaci´n y sus Paradigmas, 2008-1 o Nota de clase 1, Introducci´n y Preliminares o

Favio E. Miranda Perea Facultad de Ciencias UNAM 15 de agosto de 2007

1.

Objetivos

Reconocer los conceptos b´sicos sobre los cuales se fundamentan los lenguajes de programaa ci´n lo cual nos facilitar´: o a Comparar lenguajes reconociendo sus diferencias y coincidencias. Entender ideas y m´todos de programaci´n. e o Seleccionar el paradigma mas adecuado para una tarea particular. Entender paradigmas y lenguajes en desarrollo.

2.

Enfoque
Fundamentos: introducci´n de conceptos mediante ejemplos as´ como presentaci´n de las o ı o bases rigurosas de los paradigmas imperativo, funcional y orientado a objetos, breve discusi´n del paradigma l´gico (visto con detalle en An´lisis L´gico). Nos centraremos en el o o a o concepto de tipo. Aplicaciones: implementaci´n de diversos conceptos mediante interpretes, nuestro lenguaje o de trabajo ser´ Haskell 98, mediante el int´rprete Hugs. En las primeras clases de ayudant´ a e ıa se dar´ una introducci´n al lenguaje. a o De forma m´s espec´ a ıfica en nuestro enfoque ignoraremos fuertemente t´picos relacionao dos con la sint´xis, gram´ticas y an´lisis sint´ctico, ya que corresponden a un curso de a a a a aut´matas y/o compiladores. o Aislaremos e investigaremos conceptos b´sicos como a • Funciones, procedimientos y variables. • Clases, objetos y m´todos. e • Programaci´n imperativa vs. programaci´n libre de efectos laterales. o o • Tipificaci´n est´tica y din´mica. o a a • Tipos de datos abstractos y concretos. Enfatizaremos el uso de herramientas matem´ticas. a 1

1. gram´ticas libres ıa a de contexto y notaci´n BNF y EBNF. funciones recursivas o c´lculo lambda. por ejemplo con m´quinas de o o a Turing. Lenguaje usado para comunicar instrucciones a una computadora. a o • Puede ser informal o formal. a Legible para computadoras significa que debe existir un algoritmo eficiente de traducci´n. Las instrucciones corresponden a c´mputos que la m´quina debe llevar a cabo (paradigma o a imperativo). Una pregunta ´ inmediata puede ser ¿Por qu´ deben establecerse formalmente la sem´ntica y la sintaxis de un e a lenguaje de programaci´n? o Posibles respuestas son: Para entender los programas.2. sintaxis concreta y sintaxis abstracta. 2 . a • Hay dos niveles. a Pragm´tica: metodolog´ de programaci´n e implementaci´n de estrategias. Legible para humanos significa que debe constar de abstracciones f´ciles de entender. 3. • Existen diversas herramientas para generar analizadores l´xicos y sint´cticos (pare a sers). Introducci´n o ¿Qu´ es un lenguaje de programaci´n? e o Un lenguaje natural sirve para comunicar ideas entre personas. desarrollada por John Backus para Algol58 y o modificada por Peter Naur para Algol 60. An´logamente un lenguaje de programaci´n debe servir para comunicar ideas algor´ a o ıtmicas entre personas y computadoras. basada en t´cnicas matem´ticas y puede ser operacional. Es deseable que los LP sean computacionalmente completos. en particular. a Un lenguaje es computacionalmente completo si puede expresar todas las funciones computables formalmente.3. Sem´ntica: descripci´n del significado de instrucciones y expresiones del lenguaje. Un LP es esencialmente un sistema notacional para representar c´mputos en forma legible o tanto para humanos como para computadoras. o 3. o bien a especificaciones de dichos c´mputos (paradigma declarativo) o Sabemos que la noci´n de c´mputo puede formalizarse. a ıa o o En nuestro curso nos ocuparemos unicamente de los dos primeros aspectos. Definici´n de un lenguaje de programaci´n o o Para definir completamente un LP se deben considerar tres aspectos b´sicos: a Sintaxis: descripci´n del conjunto de cadenas de s´ o ımbolos que ser´n considerados prograa mas v´lidos. • Se fundamenta en la teor´ de lenguajes formales. e a denotacional o axiom´tica.

Para poder implementar y verificar compiladores o traductores. Para poder mostrar la correctud de transformaciones entre programas. a a e a cuyos fundamentos se encuentran en la teor´ de lenguajes libres de contexto. ((g en vacio) inter vacio) (h en (g en vacio)) union (k en vacio) Y los siguientes son inv´lidos: a (a en union).Para poder mostrar la correctud de un programa. B. Para poder verificar an´lisis de programas en traductores ´ptimos. En conclusi´n. Z} a o y definimos la funci´n de significado · para elementos y programas como sigue: o a z vacio (P union Q) (P inter Q) (E en P ) = A . (d en (a en vacio)). = Z = ∅ = P ∪ Q = P ∩ Q = { E }∪ P Como ya mencionamos. . del mismo a a estilo que la sem´ntica de la l´gica de primer orden. a o Veamos un ejemplo muy sencillo de sintaxis y sem´ntica de un LP para operaciones con a conjuntos: Sintaxis: < prog > ::= vacio | (< prog > union < prog >) | (< prog > inter < prog >) | < elem > en < prog > < elem > ::= a | b | c | . | z Por ejemplo los siguientes programas son v´lidos: a (a en vacio). . . o Veamos ahora algunas caracter´ ısticas de los principales paradigmas de programaci´n. . a a a 4. . o 3 . Paradigmas Un paradigma (de programaci´n) es un estilo fundamental de programaci´n definido por la o o forma de dar soluciones a problemas. en este caso una sem´ntica denotacional. Tomamos un conjunto M = {A. los distintos paradigo o mas proporcionan diversas maneras de expresar el concepto de computaci´n. . ıa Veamos ahora la sem´ntica del lenguaje. (a inter d) El verificar si un programa es v´lido o inv´lido es tarea de los analizadores l´xico y sint´ctico. . C. Un paradigma proporciona y determina la visi´n que el o programador tiene acerca de la ejecuci´n de un programa. m´s adelante trataremos temas de sem´ntica con m´s detalle. .

o Elementos de programaci´n: abstracci´n procedimental.. a Ejemplo: % Calcular m^n class Numero | val . clases. La orientaci´n es. Fortran. hacia los objetos. Paradigma Orientado a Objetos Programa: colecci´n de objetos que interact´an intercambiando mensajes que transforman o u estados. Paradigma Imperativo Programa: serie de instrucciones (c´lculos. obviamente. C++ Evaluaci´n: o • C´mputo expresado mediante modificaciones implicitas a la memoria. • Los resultados se pasan como par´metros a mensajes. asignaci´n. herencia.2. o • Objetos se agrupan en clases. C++. end while 4. entradas. • El control se basa en la iteraci´n. o Ejemplo: % Calcular m^n result := 1. C#.| instance method Valor Power(pot) 4 . Java. o Lenguajes: Smalltalk.. salidas) a La orientaci´n es hacia los estados. o o o Lenguajes: Cobol. encapsulamiento. n := n-1. o Elementos de programaci´n: modelado de objetos. while n > 0 do result := result * m. Pascal. o • Resultados intermedios se almacenan en memoria. o • Variables como abstracci´n de celdas de memoria. condicionales.4. ciclos. C. las cuales se agrupan en jerarqu´ ıas.1. Evaluaci´n: o • C´mputo expresado mediante intercambio de mensajes entre objetos. Eiffel.

o • Control basado en recursi´n. o o e La orientaci´n es hacia las pruebas. Miranda1 . o o o o Lenguajes: Lisp.4.1. Evaluaci´n: o • C´mputo expresado mediante b´squeda de pruebas o por definici´n de predicados o u o recursivos. 4.1).RT). Un programa es declarativo: no importa el c´mo sino el qu´. retroceso. prod(M. prod/3 predefinidos pot(M.R). curryficaci´n.return val if pot = 0 then return 1 else return ((send self Valor) * (send self Power (pot-1)) 4.3. • Los resultados intermedios se pasan mediante unificaci´n. • No hay memoria impl´ ıcita.N.R) :.resta(N. pot(M. Paradigma L´gico o Programa: colecci´n de declaraciones l´gicas que especifican las caracter´ o o ısticas que debe tener la soluci´n buscada.Gofer → Haskell 98 (puro y perezoso). 1 Miranda es marca registrada de Research Software Limited 5 .N1.RT. o Elementos de programaci´n: cl´usulas de Horn. Un programa es declarativo: no importa el c´mo o sino el qu´. orden superior. Scheme. Paradigma Funcional Programa: colecci´n de funciones que se combinan mediante composici´n de forma como o pleja para construir nuevas funciones.N1). e La orientaci´n es hacia la evaluaci´n. pot(M. o a o Lenguajes: Prolog. unificaci´n . recursi´n.0. o Ejemplo: % Calcular m^n % resta/3. o o Elementos de programaci´n: composici´n. SOUL. ML (impuros y estrictos).

• Los resultados intermedios se pasan directamente a otras funciones. • Control basado en recursi´n.Calcular m^n pot m 0 = 1 pot m (n+1) = m * (pot m n) 6 .Evaluaci´n: o • C´mputo expresado a trav´s de la aplicaci´n y composici´n de funciones. o Ejemplo: -. o e o o • No hay memoria impl´ ıcita.

Sign up to vote on this title
UsefulNot useful