aspectos de diseñó de los lenguajes de programación

57
Aspectos de diseñó de Aspectos de diseñó de los lenguajes de los lenguajes de programación programación (Tema 2)

Upload: anika-valencia

Post on 03-Jan-2016

33 views

Category:

Documents


2 download

DESCRIPTION

Aspectos de diseñó de los lenguajes de programación. (Tema 2). Introducción. Los primeros lenguajes al ejecutarse en equipos costosos se proyectaban para producir un código de máquina eficiente, aún cuando la escritura de los programas era difícil . Ejemplos: Fortran y LISP. Introducción. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Aspectos de diseñó de los lenguajes de programación

Aspectos de diseñó de los Aspectos de diseñó de los lenguajes de lenguajes de programaciónprogramación

(Tema 2)

Page 2: Aspectos de diseñó de los lenguajes de programación

IntroducciónIntroducción

Los primeros lenguajes al ejecutarse en equipos Los primeros lenguajes al ejecutarse en equipos costosos se proyectaban para producir un costosos se proyectaban para producir un código de máquina eficiente, aún cuando la código de máquina eficiente, aún cuando la escritura de los programas era escritura de los programas era difícildifícil..

Ejemplos: Fortran y LISPEjemplos: Fortran y LISP

Page 3: Aspectos de diseñó de los lenguajes de programación

IntroducciónIntroducción

En la actualidad los equipos son de bajo costo, En la actualidad los equipos son de bajo costo, por lo que, permiten el desarrollo de por lo que, permiten el desarrollo de programas que son programas que son fácilesfáciles de escribir de escribir correctamente aunque se ejecuten con correctamente aunque se ejecuten con lentitud algo mayor.lentitud algo mayor.

Ejemplos: C++, Java, Ada Ejemplos: C++, Java, Ada

Pero, ¿cómo se diseñan esta clase de Pero, ¿cómo se diseñan esta clase de lenguajes?lenguajes?

Page 4: Aspectos de diseñó de los lenguajes de programación

¿Cómo diseñar un lenguaje?¿Cómo diseñar un lenguaje?

Se tiene que tomar en cuenta tres influencias Se tiene que tomar en cuenta tres influencias principales:principales:

1 La computadora subyacente en donde se van La computadora subyacente en donde se van a ejecutar los programas escritos en el a ejecutar los programas escritos en el lenguaje.lenguaje.

2 El modelo de ejecución, o computadora virtual, El modelo de ejecución, o computadora virtual, que apoya a ese lenguaje en el equipo real.que apoya a ese lenguaje en el equipo real.

3 El modelo de computación que el lenguaje El modelo de computación que el lenguaje implementa.implementa.

Page 5: Aspectos de diseñó de los lenguajes de programación

Organización y operación de una Organización y operación de una computadoracomputadora

La La arquitectura de una computadoraarquitectura de una computadora la la podemos describir como la unión de podemos describir como la unión de microprocesadores, memoria y dispositivos de microprocesadores, memoria y dispositivos de I/O.I/O.

Page 6: Aspectos de diseñó de los lenguajes de programación

Organización y operación de una Organización y operación de una computadoracomputadora

Una Una computadoracomputadora es un conjunto de tipos de es un conjunto de tipos de datos, operaciones y características, capaz de datos, operaciones y características, capaz de almacenar y ejecutar programas.almacenar y ejecutar programas.

A partir de la definición de una computadora A partir de la definición de una computadora siempre es posible construir la computadora siempre es posible construir la computadora en hardware.en hardware.

Page 7: Aspectos de diseñó de los lenguajes de programación

Arquitecturas AlternativasArquitecturas Alternativas•MultiprocesadoresMultiprocesadores

Arquitectura Arquitectura TradicionalTradicional•Von NewmannVon Newmann

Tipos de ArquitecturasTipos de Arquitecturas

Page 8: Aspectos de diseñó de los lenguajes de programación

Archivos externos dispositivos de entrada y salida

Memoria Principal

Memoria Caché

Registros de Datos

Operación PrimitivaIntérprete

UCP

Operación Primitiva

Registro de Direcciones

Organización de una computadora convencionalOrganización de una computadora convencional

Page 9: Aspectos de diseñó de los lenguajes de programación

•DatosDatos

•Operaciones PrimitivasOperaciones Primitivas

•Control de SecuenciaControl de Secuencia

•Acceso a DatosAcceso a Datos

•Gestión de AlmacenamientoGestión de Almacenamiento

•Entorno de Operación.Entorno de Operación.

Componentes Fundamentales de Componentes Fundamentales de una Computadorauna Computadora

Page 10: Aspectos de diseñó de los lenguajes de programación

DatosDatos

Elementos de información integradosElementos de información integrados a la a la computadoracomputadora, , manipulablesmanipulables directamente directamente a travésa travésdede operaciones primitivas de hardware operaciones primitivas de hardware..

Page 11: Aspectos de diseñó de los lenguajes de programación

Operaciones PrimitivasOperaciones Primitivas

Una computadora Una computadora debe contener un debe contener un conjunto conjunto de operacionesde operaciones primitivas primitivas interconstruidas, interconstruidas, útiles para la manipulación de datos.útiles para la manipulación de datos.

Page 12: Aspectos de diseñó de los lenguajes de programación

Control de SecuenciaControl de Secuencia

Una computadora debe proporcionar Una computadora debe proporcionar mecanismos para mecanismos para controlarcontrolar el orden en el el orden en el que se van a ejecutar las Operaciones que se van a ejecutar las Operaciones primitivas.primitivas.

Page 13: Aspectos de diseñó de los lenguajes de programación

Acceso a DatosAcceso a Datos

Una computadora debe incorporar algún medio para Una computadora debe incorporar algún medio para designar operandos y un mecanismo para recuperardesignar operandos y un mecanismo para recuperar operandos de un designador de operandos dado.operandos de un designador de operandos dado.

Page 14: Aspectos de diseñó de los lenguajes de programación

Gestión de AlmacenamientoGestión de Almacenamiento

Una computadora debe proveer Una computadora debe proveer mecanismos para la mecanismos para la asignaciónasignación de de almacenamiento para programas.almacenamiento para programas.

Page 15: Aspectos de diseñó de los lenguajes de programación

Entorno de OperaciónEntorno de Operación

El entorno de operación de una computadora El entorno de operación de una computadora consiste ordinariamente en un conjunto de consiste ordinariamente en un conjunto de dispositivos periféricos de almacenamiento dispositivos periféricos de almacenamiento dede entrada / salida entrada / salida

Page 16: Aspectos de diseñó de los lenguajes de programación

Estados de ComputadorasEstados de Computadoras

Representación dinámica de la computadora Representación dinámica de la computadora durante la ejecución de los programas.durante la ejecución de los programas.

Page 17: Aspectos de diseñó de los lenguajes de programación

Computadoras de FirmwareComputadoras de Firmware

Es la computadora simulada por un Es la computadora simulada por un microprograma que se ejecuta en una microprograma que se ejecuta en una computadora microprogramable de hardware computadora microprogramable de hardware especial.especial.

Su lenguaje de máquina consiste en un Su lenguaje de máquina consiste en un conjunto de microinstrucciones de nivel conjunto de microinstrucciones de nivel extremadamente bajo. extremadamente bajo.

Page 18: Aspectos de diseñó de los lenguajes de programación

Traductores y computadoras Traductores y computadoras simuladas por Softwaresimuladas por Software

I. TraducciónI. Traducción

PreprocesadorPreprocesadorCompiladorCompiladorEnsambladorEnsambladorCargadorCargador

II. Simulación de softwareII. Simulación de software

Page 19: Aspectos de diseñó de los lenguajes de programación

Programa Fuente Preprocesador

Compilador

Ensamblador

Cargador

Programa Fuente estándar

Código Objeto

CódigoMáquina

Ejecutable

Page 20: Aspectos de diseñó de los lenguajes de programación

PreprocesadorPreprocesador

Básicamente es un procesador de texto, Básicamente es un procesador de texto, toma como entrada una forma ampliada de toma como entrada una forma ampliada de un lenguaje fuente y su salida es una forma un lenguaje fuente y su salida es una forma estándar del mismo lenguaje fuente.estándar del mismo lenguaje fuente.

Page 21: Aspectos de diseñó de los lenguajes de programación

Un compilador es un traductor cuyo lenguaje Un compilador es un traductor cuyo lenguaje fuente fuente es un lenguaje de alto nivel y cuyo lenguaje es un lenguaje de alto nivel y cuyo lenguaje objeto objeto se aproxima al lenguaje máquina de una se aproxima al lenguaje máquina de una computadora real , ya sea que se trate de un computadora real , ya sea que se trate de un lenguaje ensamblador o alguna variedad de lenguaje ensamblador o alguna variedad de lenguaje máquina.lenguaje máquina.

CompiladorCompilador

Page 22: Aspectos de diseñó de los lenguajes de programación

Es un traductor cuyo lenguaje objeto es Es un traductor cuyo lenguaje objeto es también alguna variedad de lenguaje también alguna variedad de lenguaje máquina para una computadora real, pero máquina para una computadora real, pero cuyo lenguaje fuente, un lenguaje cuyo lenguaje fuente, un lenguaje ensamblador, constituye en gran medida una ensamblador, constituye en gran medida una representación simbólica del código de representación simbólica del código de máquina objeto.máquina objeto.

EnsambladEnsambladoror

Page 23: Aspectos de diseñó de los lenguajes de programación

CargadorCargador

Es un traductor cuya entrada es un lenguaje Es un traductor cuya entrada es un lenguaje objeto y la objeto y la salida salida es un programa en lenguaje es un programa en lenguaje máquina remáquina relocalizable.localizable.

Page 24: Aspectos de diseñó de los lenguajes de programación

Máquina VirtualMáquina Virtual

Son las estructuras de datos y algoritmos de Son las estructuras de datos y algoritmos de un lenguaje que se emplean durante el un lenguaje que se emplean durante el tiempo tiempo de ejecuciónde ejecución de un programa. de un programa.

Programa en C

Máquina virtual de C

ADD #1, AXMOV BX, 300

010111011

Oculta las operaciones y Oculta las operaciones y estructuras de bajo nivel estructuras de bajo nivel

Page 25: Aspectos de diseñó de los lenguajes de programación

Relación entre Lenguaje y Relación entre Lenguaje y Máquina Virtual Máquina Virtual

Una máquina define un lenguajeUna máquina define un lenguaje Un lenguaje define una máquinaUn lenguaje define una máquina

Código en C

if (x==n) { var1 = 1; var2 = 0;

} else { var1 = 0; var2 = 1; }var1 = 0;var2 = 0;

Máquina virtual de C

Page 26: Aspectos de diseñó de los lenguajes de programación

Jerarquía de Máquinas VirtualesJerarquía de Máquinas Virtuales

Una computadora con Una computadora con nn niveles puede verse niveles puede verse como como nn máquinas virtualesmáquinas virtuales diferentes, cada diferentes, cada una de las cuales tiene un lenguaje especial.una de las cuales tiene un lenguaje especial.

Nivel de lenguaje orientado a problemas

Nivel de Dispositivo

Nivel de lenguaje ensamblador

Nivel de Microprogramación

Física Estado Sólido

Nivel de Lógica Digital

Nivel del Sistema Operativo

Nivel del Sistema Convencional

Programador

0101 Los RISC no cuentan con Los RISC no cuentan con una descripción de una descripción de microinstruccionesmicroinstrucciones

Page 27: Aspectos de diseñó de los lenguajes de programación

Traductor para la Máquina Traductor para la Máquina VirtualVirtual

Se debe suministrar un Se debe suministrar un traductortraductor para traducir para traducir programas de usuario al lenguaje de máquina programas de usuario al lenguaje de máquina de la computadora virtual definida por el de la computadora virtual definida por el lenguaje.lenguaje.

Programa en C

Computadora virtual de C

traductortraductor

Computadora virtual de Ensamblador

Computadora de Hardware Real

traductortraductor

traductortraductor

......

Page 28: Aspectos de diseñó de los lenguajes de programación

Jerarquía de Máquinas VirtualesJerarquía de Máquinas Virtuales

Cada nivel representa una abstracción con objetos y Cada nivel representa una abstracción con objetos y operaciones diferentesoperaciones diferentes

Cada nivel esta construido sobre su predecesorCada nivel esta construido sobre su predecesor Si se quiere escribir programas para la máquina Si se quiere escribir programas para la máquina

virtual del nivel virtual del nivel nn, no se necesita conocer los , no se necesita conocer los interpretes ni los traductores de los niveles de abajo.interpretes ni los traductores de los niveles de abajo.

Las computadoras están diseñadas como una serie Las computadoras están diseñadas como una serie de nivelesde niveles

Para diseñar nuevos niveles, se necesita conocer Para diseñar nuevos niveles, se necesita conocer todos.todos.

Page 29: Aspectos de diseñó de los lenguajes de programación

La Máquina Virtual de JavaLa Máquina Virtual de Java ¿Por qué están de moda los Bytecodes¿Por qué están de moda los Bytecodes

Habrás oído que con el lenguaje de programación Java, puedes "escribir Habrás oído que con el lenguaje de programación Java, puedes "escribir una vez, ejecutar en cualquier parte". Esto significa que cuando se una vez, ejecutar en cualquier parte". Esto significa que cuando se compila un programa, no se generan instrucciones para una compila un programa, no se generan instrucciones para una plataforma específica. En su lugar, se generan bytecodes Java, que plataforma específica. En su lugar, se generan bytecodes Java, que son instrucciones para la Máquina Virtual Java (Java VM). Si tu son instrucciones para la Máquina Virtual Java (Java VM). Si tu plataforma- sea Windows, UNIX, MacOS o un navegador de internet-- plataforma- sea Windows, UNIX, MacOS o un navegador de internet-- tiene la Java VM, podrá entender los bytecodes.tiene la Java VM, podrá entender los bytecodes.

Page 30: Aspectos de diseñó de los lenguajes de programación

Enlaces y tiempo de enlaceEnlaces y tiempo de enlace

Un Un enlaceenlace es la asignación de atributos a una es la asignación de atributos a una celda de memoria para un elemento de celda de memoria para un elemento de programa.programa.

El momento en que el programa hace esta El momento en que el programa hace esta elección se conoce como el elección se conoce como el tiempo de enlacetiempo de enlace..

nombre tipo dirección

a entero •a

MemoriaMemoriaTabla de SímbolosTabla de Símbolos

Page 31: Aspectos de diseñó de los lenguajes de programación

Tipos de tiempos de enlaceTipos de tiempos de enlace

Tiempo de ejecuciónTiempo de ejecución El enlace de parámetros formales a realesEl enlace de parámetros formales a reales A través de la asignación de valores a variablesA través de la asignación de valores a variables

Tiempo de compilaciónTiempo de compilación Tipos para las variablesTipos para las variables Como se guardan las estructuras de datos y sus Como se guardan las estructuras de datos y sus

descriptoresdescriptores Tiempo de cargaTiempo de carga

Fusionar los subprogramas en un ejecutable único Fusionar los subprogramas en un ejecutable único enlazando las variables a direcciones reales de enlazando las variables a direcciones reales de memoria memoria

Page 32: Aspectos de diseñó de los lenguajes de programación

Tipos de tiempos de enlaceTipos de tiempos de enlace

Tiempo de implantación del lenguajeTiempo de implantación del lenguaje Representación de números y operaciones aritméticas Representación de números y operaciones aritméticas

en la computadora de hardware subyacenteen la computadora de hardware subyacente Tiempo de definición del lenguajeTiempo de definición del lenguaje

Todas las posibles formas opcionales de enunciados, Todas las posibles formas opcionales de enunciados, tipos de estructuras de datos, estructuras de tipos de estructuras de datos, estructuras de programa.programa.

Por ejemplo, cuántos tipos de enlace tiene este sencillo Por ejemplo, cuántos tipos de enlace tiene este sencillo enunciado de asignación escrito en un lenguaje L:enunciado de asignación escrito en un lenguaje L:

X X := := X X + 10+ 10

Page 33: Aspectos de diseñó de los lenguajes de programación

Tipos de tiempos de enlaceTipos de tiempos de enlace

Cuando un enlace se efectúa durante el Cuando un enlace se efectúa durante el tiempo de ejecución, se dice que es de tipo tiempo de ejecución, se dice que es de tipo dinámicodinámico.. Ejemplos: Prolog, LISP y MLEjemplos: Prolog, LISP y ML

El enlace que ocurre durante el tiempo de El enlace que ocurre durante el tiempo de compilación es de tipo compilación es de tipo estáticoestático.. Ejemplos: C, Pascal y FortranEjemplos: C, Pascal y Fortran

Page 34: Aspectos de diseñó de los lenguajes de programación

Alcance de una variableAlcance de una variable

Es el conjunto de enunciados en el que el Es el conjunto de enunciados en el que el identificador de la variable es válido.identificador de la variable es válido.

Alcance estáticoAlcance estático: El alcance se determina de : El alcance se determina de acuerdo al lugar donde el identificador es acuerdo al lugar donde el identificador es definido. Se le llama también alcance definido. Se le llama también alcance lexicográfico.lexicográfico.

El alcance estático se determina fácilmente El alcance estático se determina fácilmente utilizando utilizando diagramas de contornodiagramas de contorno..

Page 35: Aspectos de diseñó de los lenguajes de programación

Alcance estáticoAlcance estático

Programa Avar x,l,m : enterocomienza Proc B var l : entero comienza . . . termina Proc C var m, r : entero comienza Proc D var x,y,z : entero comienza . . . termina terminatermina

x,l,m A

l B Cm,r

Dx,y,z

Diagrama de ContornoDiagrama de Contorno

Page 36: Aspectos de diseñó de los lenguajes de programación

Alcance DinámicoAlcance Dinámico

El alcance se determina de acuerdo al lugar El alcance se determina de acuerdo al lugar donde se hizo la última definición del donde se hizo la última definición del identificador. Se puede decir que va siguiendo identificador. Se puede decir que va siguiendo “la historia del programa”.“la historia del programa”.

El alcance dinámico se determina utilizando El alcance dinámico se determina utilizando los los registros de activaciónregistros de activación..Enlace dinámico

Enlace estático

Dir. de retorno

Valor de retorno

Variables Locales

Parámetros

Quien lo llamóQuien lo llamó

Page 37: Aspectos de diseñó de los lenguajes de programación

Diferencias entre Alcance Diferencias entre Alcance Estático y Alcance DinámicoEstático y Alcance Dinámico

Programa Bvar a : entero

Proc P1 comienza Imprime(a); Termina

Proc P2 var a : entero comienza a = 0; P1; termina

comienza a = 7; P2;termina

a = 7 B

P1 P2a = 0

Diagrama de ContornoDiagrama de Contorno

Alcance estáticoImprime 7

Page 38: Aspectos de diseñó de los lenguajes de programación

Diferencias entre Alcance Diferencias entre Alcance Estático y Alcance DinámicoEstático y Alcance Dinámico

Programa Bvar a : entero

Proc P1 comienza Imprime(a); Termina

Proc P2 var a : entero comienza a = 0; P1; termina

comienza a = 7; P2;termina

Registros de ActivaciónRegistros de Activación

Alcance dinámicoImprime 0

Enlace dinámico

Enlace estático

Dir. de retorno

Valor de retornoEnlace dinámico

Enlace estático

Dir. de retorno

Valor de retorno

a = 0

a = 7

BP2

P1

Page 39: Aspectos de diseñó de los lenguajes de programación

Funciones Virtuales en C++Funciones Virtuales en C++// Archivo descrip1.hpp class description { protected: char * information public: description(char *info): information(info){} void print(){ printf("%s\n", information); } }; // Archivo descrip2.hpp class sphere: public description { private: float radius; public: sphere(char * info, float rad): (info),radius(rad){} void print(){ printf("%s\n", information); printf("radio=%g\n", radius); } };

// Archivo descrip.cpp sphere small_ball("mini",1.0), beach_ball("plastico", 24.0), planetoid("luna", 1e24); description *shapes[] = { &small_ball, &beach_ball, &planetoid } main() { double tam; tam = sizeof(shapes)/sizeof(shapes[0]); small_ball.print(); beach_ball.print(); planetoid.print(); for(int=0;i<tam; i++) shapes[i]->print(); }

miniradio=1.0plasticoradio=24.0lunaradio=1e+024miniplasticoluna

Page 40: Aspectos de diseñó de los lenguajes de programación

Funciones Virtuales en C++Funciones Virtuales en C++// Archivo descrip1.hpp class description { protected: char * information public: description(char *info): information(info){} virtual void print(){ printf("%s\n", information); } }; // Archivo descrip2.hpp class sphere: public description { private: float radius; public: sphere(char * info, float rad): (info),radius(rad){} virtual void print(){ printf("%s\n", information); printf("radio=%g\n", radius); } };

// Archivo descrip.cpp sphere small_ball("mini",1.0), beach_ball("plastico", 24.0), planetoid("luna", 1e24); description *shapes[] = { &small_ball, &beach_ball, &planetoid } main() { double tam; tam = sizeof(shapes)/sizeof(shapes[0]); small_ball.print(); beach_ball.print(); planetoid.print(); for(int=0;i<tam; i++) shapes[i]->print(); }

miniradio=1.0plasticoradio=24.0lunaradio=1e+024miniradio=1.0plasticoradio=24.0lunaradio=1e+024

Page 41: Aspectos de diseñó de los lenguajes de programación

Consecuencias del tiempo de Consecuencias del tiempo de enlaceenlace

Dependiendo del tipo de enlace un programa Dependiendo del tipo de enlace un programa puede ser más eficiente o más flexiblepuede ser más eficiente o más flexible

Tipo Eficiencia Flexibilidad

Dinámico - +

Estático + -

Page 42: Aspectos de diseñó de los lenguajes de programación

Paradigmas de los lenguajes de Paradigmas de los lenguajes de programaciónprogramación

En ciencias de la computación un En ciencias de la computación un paradigmaparadigma se puede definir como un conjunto de se puede definir como un conjunto de conceptos que permiten modelar el mundo.conceptos que permiten modelar el mundo.

Un paradigma es usado para formular una Un paradigma es usado para formular una solución de cómputo a un problema.solución de cómputo a un problema.

Page 43: Aspectos de diseñó de los lenguajes de programación

Paradigmas de los lenguajes de Paradigmas de los lenguajes de programaciónprogramación

Existen 5 modelos que describen los Existen 5 modelos que describen los lenguajes de programaciónlenguajes de programación

Lenguajes imperativos o de procedimientosLenguajes imperativos o de procedimientos Lenguajes aplicativos o funcionalesLenguajes aplicativos o funcionales Lenguajes con base en reglas o lógicosLenguajes con base en reglas o lógicos Lenguajes orientados a objetosLenguajes orientados a objetos Lenguajes concurrentesLenguajes concurrentes

Page 44: Aspectos de diseñó de los lenguajes de programación

1. Lenguajes imperativos o de 1. Lenguajes imperativos o de procedimientosprocedimientos

Se caracterizan por ser claros, formales y Se caracterizan por ser claros, formales y elegantes.elegantes.

Son controlados por enunciados imperativosSon controlados por enunciados imperativos

enunciado 1;enunciado 1;

enunciado 2;enunciado 2;

......

La ejecución de un enunciado hace que el interprete La ejecución de un enunciado hace que el interprete

cambie el valor de una o mas localidades en memoriacambie el valor de una o mas localidades en memoria Ejemplos: Fortran, Pascal, C, Algol, Ada, PL/1Ejemplos: Fortran, Pascal, C, Algol, Ada, PL/1

Page 45: Aspectos de diseñó de los lenguajes de programación

INTEGER I REAL X(10), SUM SUM = 0.0 DO 100 I=1,10100 SUM=SUM+ X(I)**2 IF (SUM .GT. 1E+5) STOP WRITE(6,200) I,SUM200 FORMAT ('SUMA', I, 'VALORES E',E15.7) END

FORTRANFORTRAN

Page 46: Aspectos de diseñó de los lenguajes de programación

2. Lenguajes aplicativos o 2. Lenguajes aplicativos o funcionalesfuncionales

Se caracterizan por ser muy eficientes, Se caracterizan por ser muy eficientes, expresivos y semanticamente elegantes.expresivos y semanticamente elegantes.

Los lenguajes aplicativos hacen uso de las funciones Los lenguajes aplicativos hacen uso de las funciones puras con composición funcional, recursión y puras con composición funcional, recursión y expresiones condicionalesexpresiones condicionales

Tienen 4 componentes:Tienen 4 componentes:• un conjunto de funciones primitivasun conjunto de funciones primitivas• un conjunto de formas funcionalesun conjunto de formas funcionales• la operación de aplicaciónla operación de aplicación• un conjunto de objetos de datosun conjunto de objetos de datos

Ejemplos: LISP, MLEjemplos: LISP, ML

Page 47: Aspectos de diseñó de los lenguajes de programación

; Factorial (defun fact (n) (if (= n 1) ; caso de terminación -> 1! = 1 1 (* n (fact (- n 1))) ; relación recursiva: n! = n * (n-1)! ) )

LISPLISP

Page 48: Aspectos de diseñó de los lenguajes de programación

3. Lenguajes con base en reglas 3. Lenguajes con base en reglas o lógicoso lógicos

Se caracterizan por ser eficaces y velocesSe caracterizan por ser eficaces y veloces Se ejecutan verificando una condición, que cuando se Se ejecutan verificando una condición, que cuando se

satisface ejecutan una acciónsatisface ejecutan una acción

condición 1 condición 1 entoncesentonces acción 1 acción 1

condicion 2 condicion 2 entonces entonces accion 2accion 2

...... Ejemplo: PrologEjemplo: Prolog

Page 49: Aspectos de diseñó de los lenguajes de programación

/* Esta linea es un comentario *//* BASE DE HECHOS */padre(pam, bob).padre(tom, bob).padre(tom, liz).padre(bob, ann).padre(bob, pat).padre(pat, jim).femenino(pam).femenino(liz).femenino(ann).femenino(pat).masculino(bob).masculino(tom).masculino(jim).

/* REGLAS */es_hijo(X,Y):- padre(Y,X), masculino(X).tia(X,Y):- padre(PY,Y), hermanos(X,PY), femenino(X).hermanos(X,Y):- padre(PX,X), padre(PX,Y), no_es_igual(X,Y).abuelo(X,Y):- padre(PY,Y), padre(X,PY), masculino(X).no_es_igual(X,X):- !,fail.no_es_igual(X,Y):- true.

/* PREGUNTA */?- abuelo(tom,liz).

PROLOGPROLOG

Pam

Liz

Ann

Tom

Bob

Jim

Pat

Page 50: Aspectos de diseñó de los lenguajes de programación

4. Lenguajes orientados a 4. Lenguajes orientados a objetosobjetos

Se caracterizan por trabajar con entes abstractos Se caracterizan por trabajar con entes abstractos (objetos) que reflejan las propiedades y (objetos) que reflejan las propiedades y características de objetos o entes realescaracterísticas de objetos o entes reales

Las actividades a realizarse se tornan alrededor de los Las actividades a realizarse se tornan alrededor de los objetos mediante métodos (funciones)objetos mediante métodos (funciones)

La comunicación con el objeto se da a través de La comunicación con el objeto se da a través de mensajesmensajes

Un aspecto fundamental es el concepto de herencia que Un aspecto fundamental es el concepto de herencia que se da cuando los objetos pertenecen a la misma clasese da cuando los objetos pertenecen a la misma clase

Ejemplos: Simula, Smalltalk, JavaEjemplos: Simula, Smalltalk, Java

Page 51: Aspectos de diseñó de los lenguajes de programación

class TestTh extends Thread { private String nombre; private int retardo; // Constructor para almacenar nuestro nombre // y el retardo public TestTh( String s,int d ) { nombre = s; retardo = d; } // El metodo run() es similar al main(), pero para // threads. Cuando run() termina el thread muere public void run() { // Retasamos la ejecución el tiempo especificado try { sleep( retardo ); } catch( InterruptedException e ) { ; } // Ahora imprimimos el nombre System.out.println( "Hola Mundo! "+nombre+" "+retardo ); }}

JavaJava

Page 52: Aspectos de diseñó de los lenguajes de programación

public class MultiHola { public static void main( String args[] ) { TestTh t1,t2,t3; // Creamos los threads t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) ); t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) ); t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) ); // Arrancamos los threads t1.start(); t2.start(); t3.start(); } }

JavaJava

Page 53: Aspectos de diseñó de los lenguajes de programación

5. Lenguajes Concurrentes5. Lenguajes Concurrentes

Su principal objetivo es mejorar la velocidad de Su principal objetivo es mejorar la velocidad de computo, compartir recursos y distribuir la carga computo, compartir recursos y distribuir la carga de trabajode trabajo

Diferentes tipos de arquitecturas:Diferentes tipos de arquitecturas:– Redes de cobertura ampliaRedes de cobertura amplia– Redes LocalesRedes Locales– Multiprocesadores (Multiprocesadores (ClustersClusters))

Comunicación y cooperación entre aplicaciones a través de :Comunicación y cooperación entre aplicaciones a través de :– Envío y recepción de mensajesEnvío y recepción de mensajes– Llamado a procedimiento remotoLlamado a procedimiento remoto– Comunicación de grupoComunicación de grupo– Memoria Virtual DistribuidaMemoria Virtual Distribuida

Ejemplos: PVM, CSP, AdaEjemplos: PVM, CSP, Ada

Page 54: Aspectos de diseñó de los lenguajes de programación

procedure DECOD_MENSAJEtask GENERAR_CODIGOS;task DECODIFICAR is

entry ENVIAR_CODIGO (C: in CHARACTER);entry RECIBIR_CAR (C: out CHARACTER);

end;task IMPR_MENSAJES;task body GENERAR_CODIGOS is

CODIGO_SIGUIENTE: CHARACTER; begin loop

--setencias para recibir datos--y generar un valor para CODIGO_SIGUIENTEDECODIFICAR.ENVIAR_CODIGO (CODIGO_SIGUIENTE);

end;

AdaAda

Page 55: Aspectos de diseñó de los lenguajes de programación

task body DECODIFICAR isCODIGO, CAR : CHARACTER;

beginloop

accept ENVIAR_CODIGO (C: in CHARACTER) do CODIGO := C;

end; --setencias para decodificar el valor de CODIGO

--y presentar el valor decodificado en CARaccept RECIBIR_CAR (C: out CHARACTER) do

C:= CAR;end;

end loop;end;

task body IMPR_MENSAJE is TAM_LINEA := 1;

CAR_SIGUIENTE: CHARACTER;POSICION_LINEA: INTEGER;LINEA: STRING (1..TAM_LINEA);

beginPOSICION_LINEA := 1;

loopDECODIFICAR.RECIBIR_CAR (CAR_SIGUIENTE);

LINEA(POSICION_LINEA):=CAR_SIGUIENTE;if POSICION_LINEA < TAM_LINEA then

POSICION_LINEA := POSICION_LINEA + 1;else

IMPRIMIR(LINEA);POSICION_LINEA := 1;

end if;end loop;

end;

beginPUT (“SE HAN ACTIVADO LAS TAREAS PARA DECODIFICAR MENSAJES”)

end;

Page 56: Aspectos de diseñó de los lenguajes de programación

Pratt, Terrence W.Pratt, Terrence W. Programming languages: design and Programming languages: design and implementation.implementation.

4th Ed.4th Ed. Prentice Hall. Prentice Hall.

ISBN 0130276782ISBN 0130276782

Bruce EckelBruce Eckel Aplique C++ / Madrid ; México : Aplique C++ / Madrid ; México : Osborne McGraw-Hill, c1991Osborne McGraw-Hill, c1991 ISBN 84-7615-567-0ISBN 84-7615-567-0

BibliografíaBibliografía

Page 57: Aspectos de diseñó de los lenguajes de programación

FinFin