Você está na página 1de 6

Lenguajes de Programacin y sus Paradigmas, 2008-1 o Nota de clase 1, Introduccin y Preliminares o

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

1.

Objetivos

Reconocer los conceptos bsicos sobre los cuales se fundamentan los lenguajes de programaa cin lo cual nos facilitar: o a Comparar lenguajes reconociendo sus diferencias y coincidencias. Entender ideas y mtodos de programacin. e o Seleccionar el paradigma mas adecuado para una tarea particular. Entender paradigmas y lenguajes en desarrollo.

2.

Enfoque
Fundamentos: introduccin de conceptos mediante ejemplos as como presentacin de las o o bases rigurosas de los paradigmas imperativo, funcional y orientado a objetos, breve discusin del paradigma lgico (visto con detalle en Anlisis Lgico). Nos centraremos en el o o a o concepto de tipo. Aplicaciones: implementacin de diversos conceptos mediante interpretes, nuestro lenguaje o de trabajo ser Haskell 98, mediante el intrprete Hugs. En las primeras clases de ayudant a e a se dar una introduccin al lenguaje. a o De forma ms espec a ca en nuestro enfoque ignoraremos fuertemente tpicos relacionao dos con la sintxis, gramticas y anlisis sintctico, ya que corresponden a un curso de a a a a autmatas y/o compiladores. o Aislaremos e investigaremos conceptos bsicos como a Funciones, procedimientos y variables. Clases, objetos y mtodos. e Programacin imperativa vs. programacin libre de efectos laterales. o o Tipicacin esttica y dinmica. o a a Tipos de datos abstractos y concretos. Enfatizaremos el uso de herramientas matemticas. a 1

3.
3.1.

Introduccin o
Qu es un lenguaje de programacin? e o
Un lenguaje natural sirve para comunicar ideas entre personas. Anlogamente un lenguaje de programacin debe servir para comunicar ideas algor a o tmicas entre personas y computadoras. Lenguaje usado para comunicar instrucciones a una computadora. Las instrucciones corresponden a cmputos que la mquina debe llevar a cabo (paradigma o a imperativo), o bien a especicaciones de dichos cmputos (paradigma declarativo) o Sabemos que la nocin de cmputo puede formalizarse, por ejemplo con mquinas de o o a Turing, funciones recursivas o clculo lambda. a Un lenguaje es computacionalmente completo si puede expresar todas las funciones computables formalmente. Es deseable que los LP sean computacionalmente completos. Un LP es esencialmente un sistema notacional para representar cmputos en forma legible o tanto para humanos como para computadoras. Legible para humanos signica que debe constar de abstracciones fciles de entender. a Legible para computadoras signica que debe existir un algoritmo eciente de traduccin. o

3.2.

Denicin de un lenguaje de programacin o o

Para denir completamente un LP se deben considerar tres aspectos bsicos: a Sintaxis: descripcin del conjunto de cadenas de s o mbolos que sern considerados prograa mas vlidos. a Hay dos niveles, sintaxis concreta y sintaxis abstracta. Se fundamenta en la teor de lenguajes formales, en particular, gramticas libres a a de contexto y notacin BNF y EBNF, desarrollada por John Backus para Algol58 y o modicada por Peter Naur para Algol 60. Existen diversas herramientas para generar analizadores lxicos y sintcticos (pare a sers). Semntica: descripcin del signicado de instrucciones y expresiones del lenguaje. a o Puede ser informal o formal, basada en tcnicas matemticas y puede ser operacional, e a denotacional o axiomtica. a Pragmtica: metodolog de programacin e implementacin de estrategias. a a o o En nuestro curso nos ocuparemos unicamente de los dos primeros aspectos. Una pregunta inmediata puede ser Por qu deben establecerse formalmente la semntica y la sintaxis de un e a lenguaje de programacin? o Posibles respuestas son: Para entender los programas. 2

Para poder mostrar la correctud de un programa. Para poder mostrar la correctud de transformaciones entre programas. Para poder implementar y vericar compiladores o traductores. Para poder vericar anlisis de programas en traductores ptimos. a o Veamos un ejemplo muy sencillo de sintaxis y semntica 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 vlidos: a (a en vacio), (d en (a en vacio)), ((g en vacio) inter vacio) (h en (g en vacio)) union (k en vacio) Y los siguientes son invlidos: a (a en union), (a inter d) El vericar si un programa es vlido o invlido es tarea de los analizadores lxico y sintctico, a a e a cuyos fundamentos se encuentran en la teor de lenguajes libres de contexto. a Veamos ahora la semntica del lenguaje, en este caso una semntica denotacional, del mismo a a estilo que la semntica de la lgica de primer orden. Tomamos un conjunto M = {A, B, C, . . . , Z} a o y denimos la funcin de signicado para elementos y programas como sigue: o a z vacio (P union Q) (P inter Q) (E en P ) = A . . . = Z = = P Q = P Q = { E } P

Como ya mencionamos, ms adelante trataremos temas de semntica con ms detalle. a a a

4.

Paradigmas

Un paradigma (de programacin) es un estilo fundamental de programacin denido por la o o forma de dar soluciones a problemas. Un paradigma proporciona y determina la visin que el o programador tiene acerca de la ejecucin de un programa. En conclusin, los distintos paradigo o mas proporcionan diversas maneras de expresar el concepto de computacin. o Veamos ahora algunas caracter sticas de los principales paradigmas de programacin. o 3

4.1.

Paradigma Imperativo
Programa: serie de instrucciones (clculos, entradas, salidas) a La orientacin es hacia los estados. o Elementos de programacin: abstraccin procedimental, asignacin, ciclos, condicionales. o o o Lenguajes: Cobol, Fortran, Pascal, C, C++ Evaluacin: o Cmputo expresado mediante modicaciones implicitas a la memoria. o Variables como abstraccin de celdas de memoria. o Resultados intermedios se almacenan en memoria. El control se basa en la iteracin. o Ejemplo: % Calcular m^n result := 1; while n > 0 do result := result * m; n := n-1; end while

4.2.

Paradigma Orientado a Objetos


Programa: coleccin de objetos que interactan intercambiando mensajes que transforman o u estados. La orientacin es, obviamente, hacia los objetos. o Elementos de programacin: modelado de objetos, clases, herencia, encapsulamiento. o Lenguajes: Smalltalk, C++, Java, C#, Eiel. Evaluacin: o Cmputo expresado mediante intercambio de mensajes entre objetos. o Objetos se agrupan en clases, las cuales se agrupan en jerarqu as. Los resultados se pasan como parmetros a mensajes. a Ejemplo: % Calcular m^n class Numero | val ...| instance method Valor Power(pot) 4

return val if pot = 0 then return 1 else return ((send self Valor) * (send self Power (pot-1))

4.3.

Paradigma Lgico o
Programa: coleccin de declaraciones lgicas que especican las caracter o o sticas que debe tener la solucin buscada. Un programa es declarativo: no importa el cmo sino el qu. o o e La orientacin es hacia las pruebas. o Elementos de programacin: clusulas de Horn, unicacin , retroceso. o a o Lenguajes: Prolog, SOUL. Evaluacin: o Cmputo expresado mediante bsqueda de pruebas o por denicin de predicados o u o recursivos. No hay memoria impl cita. Los resultados intermedios se pasan mediante unicacin. o Control basado en recursin. o Ejemplo: % Calcular m^n % resta/3, prod/3 predefinidos pot(M,0,1). pot(M,N,R) :- resta(N,1,N1), pot(M,N1,RT), prod(M,RT,R).

4.4.

Paradigma Funcional
Programa: coleccin de funciones que se combinan mediante composicin de forma como o pleja para construir nuevas funciones. Un programa es declarativo: no importa el cmo o sino el qu. e La orientacin es hacia la evaluacin. o o Elementos de programacin: composicin, orden superior, currycacin, recursin. o o o o Lenguajes: Lisp, Scheme, ML (impuros y estrictos), Miranda1 ,Gofer Haskell 98 (puro y perezoso).

Miranda es marca registrada de Research Software Limited

Evaluacin: o Cmputo expresado a travs de la aplicacin y composicin de funciones. o e o o No hay memoria impl cita. Los resultados intermedios se pasan directamente a otras funciones. Control basado en recursin. o Ejemplo: -- Calcular m^n pot m 0 = 1 pot m (n+1) = m * (pot m n)

Você também pode gostar