You are on page 1of 121

LENGUAJES DE PROGRAMACIN

Javier Martn Centro Asociado de Mstoles UNED


1

Introduccin

JAVIER MARTIN (jmartin@escet.urjc.es)


TUTORIAS:

JUEVES de 5 a 7

PLAN DE TRABAJO
Exposicin

de los temas y mediante transparencia, abundando en los puntos ms importantes. Resolucin de dudas Propuesta y resolucin de ejercicios y problemas
2

Unidad Didctica 0: Introduccin

Tema 1: El estudio de los lenguajes de programacin

Porqu estudiar lenguajes de programacin?

La pregunta es cul es la ventaja de estudiar una variedad de lenguajes diferentes que es poco probable que uno llegue a utilizar?:
Mejorar

la habilidad para desarrollar algoritmos eficaces. Mejorar el uso del lenguaje de programacin disponible. Acrecentar el propio vocabulario con construcciones tiles sobre programacin. Hacer posible una mejor eleccin del lenguaje de programacin. Facilitar el aprendizaje de un nuevo lenguaje. Facilitar el diseo de un nuevo lenguaje.
4

Breve historia de los lenguajes de programacin:

Desarrollo de los primeros lenguajes:


Lenguajes

basados en el clculo numrico (Ejemplo: FORTRAN). Lenguajes para negocios (Ejemplo: COBOL). Lenguajes para Inteligencia Artificial (Ejemplo: LISP). Lenguajes para sistemas (Ejemplo: C).

Evolucin de los Lenguajes de Programacin

Declarativos

Evolucin de los Lenguajes de Programacin Orientados a Objetos e Imperativos

El papel de los lenguajes de programacin

Inicialmente los lenguajes se proyectaban para ejecutar programas con eficiencia. A mediados de los aos sesenta la programacin cambia:

Las mquinas son menos costosas y aumentan los costos de programacin. Surge la necesidad de trasladar programas de unos sistemas a otros. El mantenimiento del producto consume mayores recursos de cmputo. La tarea del lenguaje de alto nivel es la de facilitar el desarrollo de programas correctos para resolver problemas en alguna rea de aplicacin dada.

Los lenguajes de programacin evolucionan o dejan de usarse. Influencias que obligan a la revisin del los lenguajes:

Capacidad de las computadoras. Aplicaciones: Los requerimientos de nuevas reas de aplicacin afectan los diseos de nuevos lenguajes y las revisiones y ampliaciones de los ms antiguos. Mtodos de programacin. Mtodos de implementacin. Estudios tericos. Estandarizacin.
8

Atributos de un buen lenguaje


Claridad, sencillez y unidad (legibilidad): La sintaxis del lenguaje afecta la facilidad con la que un programa se puede escribir, por a prueba, y ms tarde entender y modificar. Ortogonalidad: Capacidad para combinar varias caractersticas de un lenguaje en todas las combinaciones posibles, de manera que todas ellas tengan significado. Naturalidad para la aplicacin: La sintaxis del programa debe permitir que la estructura del programa refleje la estructura lgica subyacente. Apoyo para la abstraccin: Una parte importante de la tarea del programador es proyectar las abstracciones adecuadas para la solucin del problema y luego implementar esas abstracciones empleando las capacidades ms primitivas que provee el lenguaje de programacin mismo. Facilidad para verificar programas: La sencillez de la estructura semntica y sintctica ayuda a simplificar la verificacin de programas. Entorno de programacin: Facilita el trabajo con un lenguaje tcnicamente dbil en comparacin con un lenguaje ms fuerte con poco apoyo externo. Portabilidad de programas Costo de uso:

1. Costo de ejecucin del programa. 2. Costo de traduccin de programas. 3. Costo de creacin, prueba y uso de programas. 4. Costo de mantenimiento de los programas: costo total del ciclo de vida.
9

Dominios de aplicacin Aplicaciones de los aos sesenta. Durante la dcada de 1960, casi
toda la programacin se poda dividir en cuatro modelos bsicos de programacin:

De procesamiento de negocios (COBOL). Cientficos (FORTRAN). De sistemas (ALGOL, JOVIAL, etc.): Para construir sistemas operativos. De Inteligencia Artificial (LISP).

Aplicaciones de los aos noventa. La situacin actual tiene ms dominios de aplicacin:


De procesamiento de negocios (COBOL). Cientficos (FORTRAN 90). De sistemas: Con el advenimiento de los microprocesadores baratos que gobiernan automviles, hornos de microondas, etc., ha aumentado la necesidad de contar con lenguajes para tiempo real. Edicin: Los sistemas de procesamiento de texto tienen su propia sintaxis para mandatos de entrada y archivos de salida. El traductor TEX produce un programa en el lenguaje PostScript de descripcin de pginas. PostScript se puede compilar por medir de un procesador adecuado. ste suele ser la impresora lser que se utiliza para imprimir el documento. De proceso: Dentro de UNIX, el lenguaje de comandos de usuario se conoce como shell y a los programas se les llama guiones de shell (parecidos a los archivos .bat). Estos guiones se pueden invocar siempre que ocurren ciertas 10 condiciones habilitadoras.

Estandarizacin de los lenguajes

Los estndares son en general de dos clases:

1. Estndares patentados (DE PACTO): Son las definiciones elaboradas por la compaa que desarrollo el lenguaje y que es su propietaria. 2. Estndares de consenso (DE FACTO): Se trata de documentos elaborados por organizaciones con base en un acuerdo entre los participantes pertinentes. Mtodo principal para asegurar la uniformidad entre varias implementaciones de un lenguaje. Ejemplo: ANSI, IEEE, ISO, etc..

Proceso en el desarrollo de normas: Un grupo decide que un lenguaje requiere una definicin estndar. El organismo normativo organiza un grupo de trabajo de voluntarios para desarrollar esa norma. Cuando el grupo de trabajo llega a un acuerdo sobre su norma, se somete a votacin por parte de un bloque ms grande de individuos interesados. Los desacuerdos se resuelven y se produce el estndar del lenguaje.
11

Uso de estndares en forma eficaz

Es necesario ocuparse de tres cuestiones:

Oportunidad (Cundo estandarizar un lenguaje?): Lo deseable sera estandarizar un lenguaje lo suficientemente pronto para que exista suficiente experiencia en el uso del lenguaje, pero no demasiado tarde, para no alentar muchas implementaciones incompatibles. Conformidad (Qu significa que un programa se adhiere a un estndar y que un compilador compila un estndar?): Si existe un estndar para un lenguaje, se suele hablar de conformidad con respecto a ese estndar. Un programa es conforme si slo utiliza caractersticas definidas en el estndar. Un compilador conformable es uno que, cuando se le da un programa conforme, produce un programa ejecutable que genera la salida correcta. Obsolescencia (Cundo envejece un estndar y cmo se modifica?): Los estndares se tienen que revisar cada 5 aos y ya sea renovarse o descartarse. Casi todos los estndares requieren compatibilidad hacia atrs; El nuevo estndar debe incluir versiones ms antiguas del lenguaje. Esto tiene el problema de que el lenguaje se puede hacer difcil de manejar a causa de las numerosas construcciones obsoletas.

Una caracterstica es obsolescente si es candidata a ser descartada en la prxima versin del estndar. Una caracterstica desaprobada se puede volver obsolescente en el prximo estndar, por lo cual puede ser descartada despus de dos revisiones. 12

Efectos de los entornos sobre los lenguajes

Cuatro clases generales de entornos objetivo cubre casi todas las aplicaciones de programacin:
de

procesamiento por lotes, interactivo, de sistema empotrado, y de programacin (entorno interactivo).

Cada uno plantea distintos requerimientos sobre los lenguajes adaptados a esos entornos.
13

Entornos de procesamiento por lotes

El ms simple entorno operativo se compone slo de archivos externos de datos. Un programa toma un cierto conjunto de archivos de datos como entrada, procesa los datos y produce un conjunto de archivos de datos de salida. El nombre de procesamiento por lotes viene porque los datos de entrada se renen en lotes de archivos y son procesados en lotes por programas.

Los archivos constituyen la base para casi toda la estructura de E/S. Un error que termine la ejecucin del programa es aceptable aunque costoso. No es posible la ayuda externa por parte del usuario para manejar o corregir errores de inmediato. Carencia de restricciones de regulacin de tiempo. No hay recursos para monitorear o afectar directamente la velocidad de ejecucin del programa.
14

Entornos interactivos

El programa interacta durante su ejecucin directa con un usuario en una consola de visualizacin, enviando alternativamente salidas hacia sta y recibiendo entradas desde el teclado o ratn (procesadores de texto, hojas de clculo, juegos, etc.).

Las caractersticas de E/S interactivas son diferentes de las operaciones ordinarias con archivos. El programa debe ser capaz de gestionar el manejo de errores. La terminacin del programa como respuesta aun error no es ordinariamente aceptable (a diferencia del procesamiento por lotes). Los programas interactivos deben utilizar con frecuencia algn concepto de restricciones de tiempo. El concepto de programa principal suele estar ausente. En su lugar, el programa se compone de un conjunto de subprogramas y el usuario introduce el programa principal como una serie de comandos en el terminal.
15

Entornos de sistemas incrustados (empotrados)

Un sistema de computadora que se usa para controlar parte de un sistema ms grande como una planta industrial, una aeronave, etc., se conoce con el nombre de sistema de computadora incrustado. El fallo de una aplicacin empotrada puede poner en peligro la vida. La seguridad de funcionamiento y correccin son atributos principales.

Suelen operar sin un sistema operativo subyacente y sin archivos de entorno y dispositivos de E/S usuales. El programa debe interactuar directamente con la mquina. El manejo de errores tiene gran importancia. Cada programa debe estar preparado para manejar todos los errores en forma interna, adoptando acciones apropiadas para recuperarse y continuar. La interrupcin del programa no es aceptable y no hay un usuario en el entorno que pueda proporcionar la correccin interactiva del error. Operan en tiempo real, donde la respuesta las entradas debe producirse en intervalos de tiempo restringidos. Suele ser un sistema distribuido, compuesto por ms de una computadora. Una vez iniciadas las tareas, se ejecutan por lo comn de forma 16 simultnea e indefinida.

Entornos de programacin

Es el entorno en el cual los programas se crean y se ponen a prueba. Consiste en un conjunto de herramientas (editor, depurador, verificador, generadores de datos de prueba, etc.) de apoyo y un lenguaje para invocarlas. Al compilar por separado cada subprograma el compilador necesita informacin de:

La especificacin del nmero, orden y tipo de parmetros. La declaracin de tipo de datos. La definicin de un tipo de datos (para la declaracin local de variables).

Un problema comn, es encontrar, durante el ensamblado del programa final completo, que varios subprogramas y otras unidades de programa tienen nombres (de variables) iguales. Mtodos para evitar este problema:
Todo nombre compartido debe ser nico. Se deben usar convenciones para la asignacin de nombres desde un principio. 2. Definir, en el lenguaje, reglas de mbito, para ocultar nombre. 3. Los nombres se pueden conocer agregando explcitamente sus definiciones desde una biblioteca externa (herencia en POO).
1.

Caractersticas que ayudan a poner a prueba y depurar programas.


Caractersticas para rastreo de ejecucin. Puntos de interrupcin. Cuando se alcanza un punto de interrupcin durante la ejecucin del programa, la misma se interrumpe y el control se traslada al programador en un terminal. 3. Asertos: expresan relaciones que deben cumplirse entre los valores de las variables en ese punto del programa.
1. 2.
17

Marcos de ambiente

Un ambiente de apoyo consiste en servicios de infraestructura que se conocen como marco de ambiente. Este marco suministra servicios como un depsito de datos, interfaz grfica de usuario, seguridad y servicios de comunicacin. Los programas se escriben de modo que utilicen estos servicios.

18

Mquinas virtuales

Aunque hay muchos rasgos que se podran destacar como candidatos para formar parte de una definicin del concepto de mquina virtual (a partir de ahora MV), una MV se puede definir sencillamente como una capa de abstraccin que separa el funcionamiento de un ordenador de su hardware. Adems, las MV se dividen en abstractas o tericas, como sera la mquina de Turing (el primer ejemplo de una MV), y concretas o prcticas (a las que se quiere normalmente se hace referencia al hablar de MV). En esta seccin se tratarn las MV concretas que, como se ver, son capas de software que juegan un papel relevante tanto en el funcionamiento de los lenguajes compilados como interpretados.
19

Introduccin al concepto

Las MV se construyeron para simplificar el proceso del control del hardware de un ordenador porque extienden y enmascaran la funcionalidad del hardware a travs de procedimientos y datos abstractos. Se pueden identificar dos tipos de MV concretas:
las

que juegan un papel en la preparacin de un programa para su ejecucin (tiempo de compilacin) y las que permiten la ejecucin de dicho programa. La figura muestra la diferencia entre los dos tipos:
20

El papel de las mquinas virtuales en la compilacin y la ejecucin de un programa.


21

Introduccin al concepto

Las MV suelen aparecer en una jerarqua. Usamos la jerarqua de MV de compilacin, por ejemplo, cada vez que invocamos el compilador de C++. Y dos ejemplos muy comunes del papel de una MV en la jerarqua de MV de ejecucin son PostScript (que define una MV para una impresora) y MSDOS bajo MS Windows (que define una MV que permite que antiguos programas de DOS funcionen bajo Windows).

PostScript es una MV que incluye el estado grfico, la ruta actual, el estado del diccionario y, aunque sea bastante complejo, presenta una visin de alto nivel de muchos tipos distintos de impresoras, aislando las caractersticas de las impresoras de las aplicaciones que las usan.

A la hora de implementar un lenguaje de programacin, las estructuras de datos y algoritmos utilizados en la ejecucin de un programa (es decir, la sintaxis y semntica de cada estructura) definen las MV (implcitamente) para este lenguaje. Y las decisiones que toma el desarrollador afectan tanto a la traduccin como a la ejecucin de los programas escritos en este lenguaje. Las MV se distinguen entre s segn tres criterios:

La concepcin de las MV que tiene el desarrollador basada en la definicin del lenguaje. Las facilidades disponibles en el hardware del ordenador. Las decisiones de implementacin tomadas por los desarrolladores.
22

Introduccin al concepto

Aunque se puede escribir un compilador para traducir (o compilar) un programa escrito en un lenguaje de alto nivel directamente al cdigo mquina (en el sentido de no depender de ninguna otra pieza en el sistema para producirlo), no es nada comn hacerlo hoy en da por varias razones, dos de las cuales son:

Cuando aparezca en el mercado el siguiente procesador (por ejemplo, Pentium IVdespus de Pentium III), habr que modificar el compilador. No tiene sentido repetir el proceso de diseo y desarrollo, que es costoso, cuando ya se ha hecho lo mismo muchas veces antes para otros lenguajes para una mquina concreta.

Un caso lo constituyen los compiladores C, que ya llevan mucho tiempo en funcionamiento y son muy eficientes y estables. Por lo tanto, hay varios lenguajes como C++ (al menos en las primeras versiones) cuyo compilador tradujo el cdigo fuente de C++ a C para poder luego usar el compilador C estndar. En general, slo se suele redisear un compilador nuevo desde cero cuando los ingenieros del lenguaje estn intentando alcanzar nuevos objetivos para ese lenguaje, en caso de que vayan ms all que el modelo funcional de los compiladores ya disponibles como, por ejemplo, es el caso de Java.
23

Jerarquas de mquinas virtuales

La realidad es que el desarrollador de un lenguaje suele implementar las MV (de compilacin y/o ejecucin) de su lenguaje en trminos de otras MV ya existentes. Y en el futuro, un programador de aplicaciones utilizar las MV implementadas por el desarrollador del lenguaje para producir programas que a su vez puedan servir como MV para otras aplicaciones, etc. La conclusin, como puede verse, es que una MV no suele existir aislada, sino como parte de una jerarqua de MV. A continuacin se va a ver el papel de las jerarquas de MV en el tiempo de compilacin y de ejecucin. En primer lugar, se va a considerar el papel de la jerarqua de MV en el tiempo de compilacin. En el caso de C++, como lenguaje de alto nivel que se compila a un lenguaje tan cerca del nivel de mquina como sea posible, se puede ver que el proceso de compilacin de un programa de C++ consiste en la interaccin de la jerarqua de MV mostrada en la figura 2 (aunque puede haber diferencias entre compiladores de C++; por ejemplo, aqu se supone que es un proceso de compilacin que usa C como cdigo intermedio). El pre-procesador acepta el cdigo C++ como fuente y produce otra versin del mismo cdigo C++ con algunas extensiones e incorporaciones resueltas. El traductor convierte el cdigo fuente C++ estndar a cdigo fuente C. El compilador C acepta este cdigo como fuente y lo traduce a cdigo ensamblador (una representacin simblica del cdigo mquina). El ensamblador traduce este cdigo simblico a un cdigo mquina reubicable. Y por fin, el cargador de libreras acepta este cdigo mquina como entrada y produce un programa simple ejecutable, compuesto por el cdigo mquina de entrada y todos los subprogramas necesarios con direcciones de memoria contiguas. Adems del proceso de compilacin, la traduccin completa de los programas de alto nivel (previa a su ejecucin) en una forma que corre sobre la mquina, tambin existe otro proceso, que se llama interpretacin, que tiene ms que ver con el papel de las MV 24 en el tiempo de ejecucin que en el tiempo de compilacin.

Jerarquas de mquinas virtuales

Adems de los lenguajes compilados completamente, hay otros que son compilados parcialmente en el sentido de que terminan el proceso de compilacin en un cdigo (o lenguaje) intermedio, en vez de en cdigo mquina (lenguajes intermedios). En segundo lugar, vamos a considerar el papel de la jerarqua de MV en el tiempo de ejecucin. Se puede ver un ejemplo en la figura 3. Como se puede ver en l, lo que se podra llamar una aplicacin Web (unas pginas Web con elementos interactivos incrustados) est escrita en HTML y funciona sobre una MV dada por el navegador Web, que a su vez est implementado en C o C++. ste corre sobre una MV compuesta por las libreras de tiempo de ejecucin que encapsulan el funcionamiento de los procedimientos (o mtodos) y datos de navegador Web que, a su vez, utilizan las funciones de la MV del sistema operativo implementadas en cdigo mquina. Y los programas que componen esta MV corren sobre el firmware, un conjunto de programas de micro-cdigo que controlan directamente el hardware del ordenador.

25

Jerarquas de mquinas virtuales

Las jerarquas del tipo mostrado en la figura tienen una estructura muy parecida a una jerarqua usa, donde cada capa usa la capa que est directamente debajo. La diferencia es que una MV puede tener una interfaz hacia abajo, adems de la interfaz hacia arriba, que especifica los servicios que requiere de la capa inferior, pero sin especificar exactamente qu implementacin de los servicios es necesario. Un ejemplo sera la jerarqua de MV que compone el sistema de ventanas X, donde hay una capa que define el funcionamiento independientemente de los dispositivos y, directamente debajo, una capa que define el funcionamiento en trminos de los dispositivos. Aqu X depende de la capa que depende de los dispositivos, no de una implementacin en concreto de esta capa (por lo tanto, hay versiones de X para muchos tipos de hardware donde la nica diferencia es la implementacin de la capa relacionada con los dispositivos; las dems capas superiores son idnticas).

26

Lenguajes intermedios

Un lenguaje intermedio se puede definir como una manera de representar procedimientos y estructuras de datos que sirva como entrada para una MV en alguna parte de su jerarqua, entre el lenguaje de entrada (el nivel ms alto) y el cdigo ejecutado en la mquina (el nivel ms bajo) tanto en el tiempo de compilacin como en el de ejecucin.
27

Lenguajes intermedios

Un lenguaje intermedio se puede definir como una manera de representar procedimientos y estructuras de datos que sirva como entrada para una MV en alguna parte de su jerarqua, entre el lenguaje de entrada (el nivel ms alto) y el cdigo ejecutado en la mquina (el nivel ms bajo) tanto en el tiempo de compilacin como en el de ejecucin.
28

Lenguajes intermedios

Para considerar el papel de los lenguajes intermedios y sus ventajas y desventajas, conviene destacar la diferencia entre la traduccin de un lenguaje de alto nivel a cdigo mquina anteriormente a su ejecucin (su compilacin) y su interpretacin, es decir, la conversin de cada instruccin del lenguaje a cdigo mquina y su ejecucin, una por una, al ejecutar el programa. Este proceso se realiza a travs de una MV de interpretacin que simula un ordenador cuyo cdigo mquina es el lenguaje de alto nivel que est siendo interpretado. Y tpicamente, esta MV se construye a travs de un conjunto de programas de cdigo mquina que representa los algoritmos y estructuras de datos necesarios para la ejecucin de las instrucciones del lenguaje de alto nivel. Hay ventajas y desventajas en cada manera de convertir los lenguajes de alto nivel a cdigo mquina, que se pueden resumir as:
29

Lenguajes intermedios

30

Lenguajes intermedios

Estos dos casos representan los dos extremos porque, como ya se ha visto, existe tambin lo que se llama la compilacin parcial, que es una mezcla de los dos enfoques, donde se compila el lenguaje de alto nivel a un lenguaje intermedio (ms cerca de las estructuras presentes en el cdigo mquina que las del cdigo fuente) y luego se interpreta este lenguaje al ejecutar el programa. Como puede imaginarse, esta tcnica combina las ventajas y desventajas de los dos enfoques anteriores. Un ejemplo de esta combinacin existe en el lenguaje de programacin Java y su entorno.
31

Lenguajes intermedios

Entre otras cosas, Java empez con la idea de liberar al programador de las dificultades de portar su aplicacin a nuevas plataformas lo cual, si el programa est muy vinculado a algn aspecto del sistema operativo donde fue escrito, podra ser muy difcil. Se compilar el cdigo fuente de Java a un cdigo byte (bytecode) antes de ejecutarlo. Y a la hora de correr el programa, este cdigo, como lenguaje intermedio, sera el lenguaje de entrada para una MV, que con un conjunto de libreras (el entorno de ejecucin de Java, Java Runtime o JRE), la interpretara para su ejecucin. Por lo tanto, este bytecode podra correr en cualquier hardware donde haya una versin del JRE disponible. Como este bytecode est ms cerca del nivel de mquina que de un lenguaje de alto nivel, los programas corrern ms rpidamente que los programas completamente interpretados, aunque ms despacio que los programas previamente compilados al cdigo mquina.
32

Lenguajes intermedios

Como se puede ver en la figura 1, tanto los programas compilados parcialmente a un lenguaje intermedio (como Java) como los programas escritos en lenguajes de alto nivel que se interpretan (como Lisp) requieren una MV para interpretar el programa. La principal ventaja del lenguaje intermedio en este caso es su proximidad al nivel del cdigo mquina, en el sentido de que supone menos trabajo a la hora de ejecutarlo y, por lo tanto, los programas corren ms rpidamente que los puramente interpretados.
33

Lenguajes intermedios

Adems del papel de los lenguajes intermedios en la compilacin parcial, se puede destacar su papel en la compilacin estndar. Como ejemplo se puede considerar C como lenguaje intermedio para un lenguaje compilado nuevo. Si el autor de un nuevo lenguaje decide utilizar C, por ejemplo, como su lenguaje intermedio, slo tendr que implementar una MV para convertir el cdigo fuente de su lenguaje a C, ahorrando mucho trabajo.
34

Lenguajes intermedios

Las ventajas de utilizar un lenguaje tan establecido como C como lenguaje intermedio son:
La

facilidad de portar el lenguaje a una nueva mquina (slo hay que tener un compilador C disponible all). La generacin de cdigo mquina es una tarea muy compleja que requiere un conocimiento profundo de la arquitectura de la mquina en cuestin y de cada mquina en que se quiere una versin del lenguaje. La facilidad de modificar algn rasgo del comportamiento del lenguaje en alguna mquina en concreto (por ejemplo, caractersticas de memoria o rendimiento se pueden aadir libreras C customizadas sin grandes problemas). Las posibilidades disponibles para mapear estructuras intermedias del nuevo lenguaje a estructuras de datos de C.
35

Lenguajes intermedios

Y las desventajas son:


La

depuracin es muy difcil porque, entre otras cosas, los errores que ocurren en el cdigo C no son muy fciles de localizar en lo que ha escrito el programador originalmente en el nuevo lenguaje. Las caractersticas de rendimiento y eficiencia del lenguaje estn determinadas por el compilador C. Habr ocasiones en las que no exista una buena traduccin entre una estructura en el nuevo lenguaje y las estructuras de datos en C, por lo que habr una prdida de eficiencia en el programa resultante (como, por ejemplo, ocurre en la mayora de las ocasiones en que se compilan estructuras de Prolog a C slo se puede expresar iteracin en Prolog utilizando recursin).
36

La mquina virtual de Java como ejemplo de una MV

La MV de Java es una mquina de pila. Las instrucciones interpretadas por ella manipulan datos almacenados como elementos en una pila. El contenido ejecutable de un archivo de bytecodes contiene un vector de instrucciones bytecode para cada mtodo. Los bytecodes son instrucciones para la MV, que tiene algunos registros de variables locales y una pila para la evaluacin de expresiones. Las primeras variables locales son inicializadas con los parmetros actuales. Cada variable local o elemento de la pila es una palabra que corresponde a un entero de 32 bits, a un punto flotante o a una referencia a objeto (puntero). Para puntos flotantes dobles y enteros largos se utilizan dos huecos de la pila.
37

La mquina virtual de Java como ejemplo de una MV

Los huecos de la pila no estn relacionados con un tipo de datos, es decir, en algn punto un hueco podra contener un valor entero y en otro, el mismo hueco podra contener una referencia a un objeto. Sin embargo, no se puede almacenar un entero en un hueco y luego recuperarlo reinterpretndolo como si fuera una referencia a un objeto. An ms, en cualquier punto del programa, el contenido de cada hueco est asociado con un nico tipo de datos que puede ser determinado usando un flujo esttico de datos. El tipo de datos podra ser no asignado, con lo cual no se permite leer el valor del hueco. Estas restricciones son parte del modelo de seguridad de Java y se ven reforzadas por el verificador de bytecodes.
38

La mquina virtual de Java como ejemplo de una MV

El cdigo interpretado es generalmente ms lento que un programa escrito en un lenguaje compilado, y Java no es distinto en este aspecto. Se han sealado muchas posibilidades para mejorar el rendimiento de los intrpretes. Una muy comn hoy en da es incluir un compilador relativamente simple en el tiempo de ejecucin de la MV. Es decir, en vez de interpretar los bytecodes del programa una y otra vez, se compilan una sola vez al instante en el interior de la MV, y la representacin compilada de los mtodos que corresponden al programa es ejecutada al efectuar una llamada. Esto es conocido como un compilador al instante (o JIT, Just In Time). 39

Unidad Didctica 1: Sintaxis y Semntica de los Lenguajes de Programacin

Tema 2: Sintaxis formal de los lenguajes de programacin

40

Ver Sintaxis y Semntica del resumen en Problema de traduccin de lenguajes (Capitulo 2)

41

Unidad Didctica 2: Paradigmas y lenguajes

Tema 4: Descripcin de los paradigmas ms representativos

42

PARADIGMAS DE PROGRAMACIN

La clasificacin de los lenguajes atendiendo a sus caractersticas intrnsecas conduce a los llamados paradigmas de programacin. Un paradigma de programacin es un modelo de programacin que engloba a ciertos lenguajes que comparten:

Elementos estructurales: con qu se confeccionan los programas? Elementos metodolgicos: cmo se confecciona un programa?

43

Programacin Imperativa o Procedural: FORTRAN

Es la primera que se desarrolla porque va determinando las operaciones que hay que realizar sobre una mquina ideal de Von Neumann. Desde este punto de vista un programa es una secuencia de acciones (instrucciones) que se realizan en un cierto orden determinado por el flujo del programa. Las estructuras para el control son generalmente sentencias condicionales y bucles. Como un ejemplo ilustrativo veamos el aspecto de un programa en lenguaje Pascal que calcula el factorial de un nmero positivo x:
44

FORTRAN. Historia
Primer lenguaje de alto nivel (1957). Desarrollado por IBM para el IBM 704. Estaba orientado a la eficiencia en la ejecucin. Definicin estndar del lenguaje en el 66. Otras versiones:

FORTRAN

77 FORTRAN 90
45

FORTRAN. Ejemplo

PROGRAM TRIVIAL INTEGER I I=2 IF(I .GE. 2) CALL PRINTIT STOP END SUBROUTINE PRINTIT PRINT *,Hola Mundo RETURN END

46

FORTRAN. Caractersticas
Tipos de datos:
Numricos

(enteros, reales, complejos y doble

precisin). Booleanos (logical) Arreglos Cadenas de caracteres Archivos

FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Slo dos mbitos para las variables: local y global
47

Ejemplo anotado

48

FORTRAN. Objetos de datos


Variables y constantes

FORTRAN no es sensible a maysculas y minsculas. Los nombre de variables tienen de 6 a 31 caracteres mximo y deben comenzar por una letra. Los blancos son significativos. Declaracin explicita de variables. Enteras (I-N), el resto reales. (se modifica con IMPLICIT). Punteros: en los primeros FORTRAN no hay punteros y todas las variables se almacenan en memoria esttica. En FORTRAN 90 se declaran INTEGER, POINTER::P. Para memoria dinmica ALLOCATE y DEALLOCATE
49

FORTRAN. Objetos de datos


Tipos de datos estructurados

Arrays, pueden tener hasta 7 dimensiones y se guardan por colummnas.

REAL M(20),N(-5:5) DIMENSION I(20,20) (tipo por nomenclatura implcita)

Cadenas de caracteres, el primer carcter es el 1, el operador // permite concatenar cadenas.

CHARACTER S*10, T*25

Almacenamiento de datos. Se usa COMMON para datos compartidos y EQUIVALENCE cuando almacenamos una variable con dos posibles tipos en la misma posicin de memoria (como union en C). Se usa DATA para inicializar datos estticos.

DATA X/1.0/,Y/3.1416/,K/20/

Tipos definidos por el usuario, con TYPE <nombre>... END TYPE <nombre>
50

FORTRAN. Control de secuencia


EL conjunto de estructuras de control es limitado: Expresiones, prioridad de operadores Enunciados
Asignacin,

cuando se hace entre cadenas hay ajuste de tamao con blancos o truncamiento. Condicional. Permite IF <cond> ELSE IF... Para seleccin mltiple SELECT CASE <expr> CASE.....CASE DEFAULT.... END SELECT Iteracin. DO....END DO Nulo, se usa solo para la etiqueta. CONTINUE.

Control de subprogramas. CALL invoca al subprograma y RETURN devuelve un valor al programa llamante. Construcciones propensas a error: GOTO.
51

FORTRAN. Entrada y Salida

Tipos de archivos:
Secuenciales

De

acceso directo

Comandos: READ, WRITE, PRINT, OPEN , CLASE, INQUIRE (propiedades o estado del archivo) REWIND y ENDFILE (para ubicar el puntero del fichero). Para el tratamiento de excepciones en las sentencias READ/WRITE se puede introducir la posicin de la rutina de dicho tratamiento (ERR=90).
52

FORTRAN. Subprogramas

Hay tres tipos de subprogramas:


Function,

devuelven un solo valor de tipo numrico, lgico o cadena de caracteres. Subroutine, devuelve valores a travs de variables no locales COMMON. Funcin de enunciado, permite calcular una sola expresin aritmtica o lgica.

FN(X,Y)=SIN(X)**2-COS(Y)**2

Gestin de almacenamiento.
Las

variables son locales o globales (COMMON) Recursividad: RECURSIVE FUNCTION FACTORIAL(X) Parmetros de subprograma. Paso por referencia.
53

Abstraccin y encapsulamiento FORTRAN. Evaluacin del lenguaje

La abstraccin es posible mediante los subprogramas y el uso de variables COMMON, aunque su uso es propenso a errores. FORTRAN sigue siendo utilizado en el mbito cientfico y es muy eficiente realizando clculos.
La

estructura del programa suele ser dificil de entender. En FORTRAN 90 se incluye la recursividad y la memoria dinmica. Las etiquetas de las sentencias ya no son necesarias, ni el GOTO, pues se ha transformado en un lenguaje estructurado. El aspecto de los programas sigue siendo de procesamiento por lotes
54

Programacin Imperativa o Procedural: C

Desarrollado por Ritchie y Thompson en el 72.


Multiuso (inicialmente Sintaxis compacta

para sistemas)

Historia
60

Thompson desarrolla en Bell Multics, se crea un lenguaje llamado B. 70, el proyecto UNIX avanza y el lenguaje B se queda pequeo, se comienza a desarrollar C 82, C es distribuido con Unix y muy usado en las universidades. ANSI comienza a desarrollar un estndar
55

Perspectiva del lenguaje C

La programacin en C se compone de:


El

lenguaje C, con un limitado n de estructuras de control. No hay primitivas si no se usan las libreras. El preprocesador de C (#), estos enunciados no forman parte del lenguaje C y son preprocesados antes de la compilacin. Los supuestos de interfaz C (.h), lor archivos header informan al usuario de las funciones incluidad en una biblioteca. Las bibliotecas de C. Archivos obj o lib conteniendo la implementacin de las funciones. 56

Ejemplo anotado

57

Objetos de datos

Tipos de datos primitivos


Los

nombres de variables no pueden comenzar con dgito. Sensible a may-min. Los datos son enteros (char, short, long), enumerados (enum) o float. Los punteros se declaran con el tipo seguido de *. No hay booleanos.

Tipos de datos estructurados


Arrays, comienzan en 0 y se guardan por Tipos definidos por el usuario. Struct { }.

filas.

Union,

es una definicin de tipo si tcticamente con un struct, pero todos los componentes ocupan la misma memoria.
58

Representacin de almacenamiento
Los tipos de C emplean bsicamente la representacin hardware de sus datos. Una variable de tipo array es tambin el puntero al primer elemento del array que comienza con el ndice 0. Es posible inicializar cualquier variable declarada estticamente.

59

Control de secuencia

Expresiones.Se emplea notacin infija.

Coerciones, pueden ser forzadas haciendo una cast unaria antes de un valor.

A + (int)b

Enunciados. Pueden ser bloques de sentencias entre llaves.


Condicional, if...then...else...; Condicinal mltiple, switch...{case....case...default...;} Iterativos: while, do , for. Transferencia del control: brak, continue, goto, return. De preprocesador: #define, #include, #ifdef, #if...#undef...#else

C no tiene enunciados E/S, estn en stdio.h.

60

Subprogramas y Gestin de almacenamiento

main() es la funcin de entrada al programa principal. Cada funcin tiene asociado un registro de activacin, que la invoca cuando es llamada. No hay anidamiento de funciones, por lo que las variables son globales o locales. Las globales deben ser declaradas por extern, para que sea vistas por otros mdulos. extern int i, j, k; Las funciones de C slo toman argumentos por valor. Para simular paso por referencia hay que pasar el puntero por valor.
61

Abstraccin y encapsulamiento
El lenguaje da facilidades para la definicin de tipos, pero no implementa el ocultamiento de la informacin, de manera que si se tiene acceso a un struct, tambien se acceder a todos sus componentes. El uso de bibliotecas con interfaces header tambin permite la abstraccin.

62

Evaluacin del lenguaje

C es muy potente y popular:


Flexible Eficiente

Disponible
Portatil

(se distribuye con Unix)

Pero C tambin permite una programacin descuidada y propensa a errores.


63

Lenguajes funcionales: LISP


60. McCarthy en el MIT Muy usado en IA En LISP la recursin se emplea a menudo como estructura de control, lo que resta eficiencia a las ejecuciones. La ltimas versiones de LISP incluyen un recolector de basura

64

Hola Mundo en LISP

65

Perspectiva del lenguaje


Interactivo (usualmente) Los datos en LISP son muy restringidos:

tomos literales (smbolos) tomos numricos

La estructura de datos bsica es la lista. Incluye primitivas para su manipulacin. Los comentarios comienzan por ; Los parmetros de funcin van todos por valor o por referencia segn la clasificacin de la funcin. LISP es interpretado y usa una estructura de gestin de almacenamiento en montculo con recoleccin de basura como almacenamiento primario para datos y programas.
66

Ejemplo anotado

67

Objetos de datos

Tipos de datos primitivos: tomos. Cada tomo tiene una lista de propiedades asociada, accesible a travs del puntero que almacena el nombre del tomo. Tipos de datos estructurado: listas. Tienen asociado un puntero al primer elemento (car) y otro al elemento siguiente (cdr). Una lista vaca apunta a nil.

No se distinguen may-min para identificadores

Para la asignacin se utiliza setq(x val). Representacin y almacenamiento.


Cada descriptor de un objeto de datos proporciona tipo y atributos. En los datos estructurados (listas) se tienen slo punteros a primero y a siguiente.
68

Control de secuencia

El traductor LISP es una funcin read() que toma el fuente del fichero y lo interpreta. La ejecucin del programa consiste en la evaluacin de las funciones contenidas en el mismo. Expresiones:
Condicional Operaciones

sobre tomos (en preorden): +, -, *, / Operaciones sobre listas: cons, car, cdr, list, replace, null, equal. Operaciones sobre propiedades: put, get. Enunciados: prog() para ejecucin secuencial. Entrada y salida: open(), read(), print(). Definicin de funciones: defun, define.
69

Gestin de subprogramas

Tres clases de funciones:


Funcin

interpretada, en forma de estructura de listas. Primitivas eval y apply. Funcin compilada, compiladas en un bloque de cdigo mquina que puede ser ejecutado por el interprete del hardware. Macro, se declara con define. Es simplemente una funcin ordinaria en LISP. Puede ser interpretada y compilada.
70

Gestin de almacenamiento

La memoria se estructura en forma de montculo, que maneja unidades de una palabra de tamao fijo usando una lista de espacios libres y un recolector de basura. Entorno de referencia:

Local, es el que se da en las listas, como asociaciones de tomos relacionados de una determinada manera. Global o comn, se consigue mediante asociacin de un tomo con una propiedad del mismo que contiene un puntero al datos referenciado. Se usa set y setq.

Paso de parmetros:

Transmisin por valor, consiste en evaluar las expresiones de una lista de parmetros y transmitir los valores resultantes. Transmisin por nombre, transmitir las expresiones de la lista de parmetros sin evaluar, y dejar que la funcin llamada los evalue usando eval. En funciones macro la transmisin por nombre es la norma. Para funciones lambda se puede especificar la transmisin por nombre usando nlambda, en lugar de lambda.
71

Funciones en LISP I

Funciones normales, son las que se suelen incluir en las implementaciones de LISP (ver manual en cada caso). Funciones de lista, para manipulacin de listas:

car L, devuelve el primer elemento de L. cdr L, devuelve la cola (lista - primero). cons x y, devuelve uan lista formada por x e y. list x y z, devuelve la lista (x y z). quote x, no se evala x

Predicados

atom x, devuelve True si x es un tomo. numberp x, devuelve True si x es un nmero greaterp x y, devuelve True si x>y lessp x y, devuelve True si x<y null x, devuelve True si x es nulo and x y, devuelve x and y or x y, devuelve x or y not x, devuelve not x eq x y, devuelve True si x=y

72

Funciones en LISP I

Funciones aritmticas:
+,

-, *, y /. rem x y, devuelve el mdulo x/y (remainder).

Funciones de entrada y salida


load

nombrearchivo, lee el archivo a memoria print x, imprime el elemento x open nombrearchivo, abre un archivo y devuelve una puntero al mismo read, lee del terminal un tomo help, proporciona ayuda trace, traza la funcin bye, termina LISP 73

Abstraccin y encapsulamiento

LISP, en origen, no incluye caractersticas de abstraccin de datos. CLOS fue una ampliacin de LISP con orientacin de objetos. Caractersticas:
Herencia

mltiple Funciones genricas Metaclases y metaobjetos Tcnica de creacin e inicializacin de objetos que permite control del proceso por parte del usuario.

74

Evaluacin del lenguaje


LISP ha evolucionado durante ms de 30 aos y desarrollado para inteligencia artificial, pero no es adecuado para aplicaciones convencionales. Las versiones compiladas son algo ms eficientes.

75

Programacin lgica: PROLOG

PROLOG est orientado a la resolucin de problemas mediante el clculo de predicados, basado en:
Preguntas

a la base de datos Pruebas matemticas

El programa PROLOG especifca cmo debe ser la solucin, en vez de dar el algoritmo para su resolucin. La solucin se obtiene mediante bsqueda aplicando la lgica de predicados.
76

Historia
Coulmerauer (1970) desarroll un lenguaje para hacer deducciones de texto Se aplica un mecanismo de resolucin sobre predicados especiales, clusulas de Horn, llamado unificacin. La difusin del lenguaje se produce en los 80, pero de forma muy limitada debido a la falta de aplicaciones en dicho lenguaje.

77

Hola mundo, en PROLOG

78

Perspectiva del lenguaje


El programa prolog se compone de unos hechos (datos) y un conjunto de reglas, es decir, relaciones entre objetos de la base de datos. La ejecucin del programa cargado en memoria consiste en realizar una pregunta de forma interactiva: el interprete generar por inferencia los resultados que se deducen a partir del contenido de la base de datos. PROLOG tiene una sintaxis y semntica simples. Slo busca relaciones entre los objetos creados, las variables y las listas, que son sus estructuras bsicas. Comentarios entre /* */
79

Ejemplo anotado

80

Objetos de datos

Tipos de datos primitivos: variables y constantes:


Enteros

Reales
Caracteres

Los identificadores con minscula representan hechos, los que van con mayscula variables. El alcance de una variable es la regla donde aparece.

Tipos de datos estructurados:


tomos:

constantes y variables de cadena Listas, representadas entre [ ]

Tipos definidos por el usuario. Las reglas para definir relaciones pueden actuar como tipos de usuario.

81

Representacin de almacenamiento
Las reglas y hechos son almacenadas en memoria como listas enlazadas. La ejecucin de prolog consiste en una bsqueda en profundidad de un rbol conteniendo todas las posibles soluciones. Para cada una de ellas se evaluar su correccin. La bsqueda se puede hacer ms eficiente mediante la poda del rbol de bsqueda (corte).

82

Control de secuencia
El orden de evaluacin es secuencial Expresiones, operaciones aritmticas y operadores relacionales. Not(). Enunciados

Hechos, relaciones que se expresan en una consulta. Son tuplas con un nombre de predicado y unos argumentos. Reglas, implicaiones que se expresan en una operacin consult Preguntas, sucesin de trminos que finalizan con un punto. Cortes, (!), fuerza el retroceso en la bsqueda. Esto puede impedir que se encuentren ciertas soluciones, pero puede hacer ms eficiente la bsqueda.

Entrada y salida, nl y write.

83

Subprogramas y gestin de almacenamiento

PROLOG tiene dos modos:

Modo consulta, se introducen nuevas relaciones (hechos) en el almacenamiento dinmico de la base de datos. Modos pregunta, se ejecuta un intrprete basado en pilas para evaluar las preguntas del usuario.

Alcance de las variables:

Ambiente local de referencia, todas las variables son locales a la regla en que estn definidas. La unificacin hace interaccionar nombres locales de una regla con los de otras reglas. Ambiente comn de referencia, todos los datos son compartidos. Paso de parmetros, la unificacin proporciona el paso de parmetros entre reglas.

Funciones normales, van integradas en el lenguaje:


Consult(nommbrearchivo) Fail, siempre fracasa See(nombrearchivo), lee las entradas de un archivo y las incorpora al conjunto de reglas. Write(trmino) Tell(trmino), reorienta la salida del write al archivo Told, cierra el archivo anterior Nl, salto de lnea Atom(X), devuleve cierto si X es un tomo Var(X), devuelve cierto si X es una variable Integer(X), devuelve cierto si X es un entero 84 Trace, activa la depuracin del programa

Abstraccin y encapsulamiento

PROLOG no proporciona estas capacidades.

85

Evaluacin del lenguaje

PROLOG va bien para problemas de relaciones, p.e. Tratamiento del lenguaje natural, y consulta de bases de datos. A pesar de que es posible desarrollar programas sin especificar el algoritmo de resolucin a veces hay que echar mano de otro tipo de programacin para hacer los programas ms eficientes, y a menudo se emplea el corte para limitar el espacio de bsqueda.

86

Unidad Didctica 2: Paradigmas y lenguajes

Tema 5: El paradigma de la programacin orientada a objetos (POO)

87

PROG. ORIENTADA A OBJETO

Ver Apuntes sobre la POO

88

HERENCIA

Con frecuencia la informacin se pasa entre componentes de programa de manera implcita, a este traspaso de informacin le llamamos herencia. La herencia consiste en la recepcin en un componente de programa de propiedades o caractersticas de otro componente de acuerdo con la relacin especial que existe entre ambos componentes. Las reglas de alcance de variables son una forma de herencia. La herencia mltiple se da cuando una clase tienen varias superclases de las que hereda.
89

Clases derivadas

La herencia se implementa en los lenguajes orientados a objetos a travs de clases derivadas, que heredan propiedades y mtodos de sus superclases. La visibilidad de los objetos heredados depende de la forma en que se declaran:

PRIVATE PUBLIC PROTECTED

Implementacin: En la clase derivada los nombre derivados de la superclase se agregan al espacio.

Si en la definicin hay una funcin constructora, hay que incluir en la declaracin una llamada a dicha funcin. El objeto guarda la referencia de los apuntadores a todas las propiedades y mtodos, a esto se llama enfoque con base en copia de la herencia (usado en C++).
90

Mtodos

La herencia de mtodos para crear objetos nuevos proporciona un poder adicional que va ms all del simple encapsulamiento. En las clases derivadas, cuando se quiere cambiar uno de los mtodos hay dos posibilidades:
Redefinir el mtodo en la clase derivada Usar una funcin virtual, que se enlaza

dinmicamente en el momento de llamada del subprograma.

91

Clases abstractas

Se usa cuando la superclase define una especie de plantilla para las subclases, aunque no permite que se declaren objetos en esta definicin. Esto requiere que todos los objetos que requieren esta clase se definan de una subclase derivada. No se puede crear ningn objeto que tenga funciones virtuales nulas, del tipo:

Virtual void NombreDeTipo()=0;

HERENCIA MIXIN. Tambin se llama herencia de incorporacin, en la que solo se define la diferencia entre la clase base y la clase derivada. Las diferencia se define en una clase delta:
Deltaclass ModPila {} Class PilaNueva = class PilaElem + deltaclass ModPila La ventaja es que las clase delta se pueden adicionar a cualquier clase.

92

Objetos y mensajes

El lenguaje Smalltalk presenta 3 caractersticas:


Definicin

de clase. Define la estructura interna y los mtodos que se pueden usar para crear y manipular objetos. Ejemplarizacin de objetos. Se crean objetos especficos para cada definicin de clase. Paso de mensajes. Los mtodos se pasan como mensajes a un objeto para llevar a cabo una accin. Tipos:

Un mensaje unario es un mtodo sin parmetros. El mensaje binario se usa, principalmente, para operadores aritmticos. Los mensajes de palabra clave se usan para hacer asignaciones de valor, por ejemplo, en un array:

X_Array new: 10 X at:3 put:42


93

Herencia de clases
Si se enva un mensaje a un objeto con un mtodo que no est definido en su clase se pasa a la clase progenitora, y as sucesivamente. En los mtodos de palabra clave el parmetro se nombra de forma explcita en la declaracin del mtodo

94

Conceptos de abstraccin

El encapsulamiento es un mecanismo divide y vencers para proporcionar control sobre el programa en desarrollo. La abstraccin y la herencia puede ser usada para impedir al programador ver el contenido de los objetos de datos que no convenga. La herencia, fundamentalmente, es un mecanismo para pasar informacin entre objetos en clases relacionadas. Permite:

Especializacin, para que los objetos derivados contengan caractersiticas de otros objetos. Descomposicin, permite separar una abstraccin en sus componentes. Lo contrario es la agregacin. Ejemplarizacin, es el proceso de crear ocurrencias de una clase (se trata de un proceso de copia). Individualizacin, objetos similares se agrupan con otros para propsitos comunes. Es lo contrario de agrupamiento.
95

POLIMORFISMO

El polimorfismo es la capacidad de un solo operador o nombre de subprograma para referirse a varias definiciones en funcin del contexto, es decir, de los tipos de daos de los argumentos y del resultado.

96

Unidad Didctica 2: Paradigmas y lenguajes

Tema 6: La programacin centrada en la red

97

Ver Apuntes sobre la PCR

98

Unidad Didctica 3: Mecanismos de los LP

Tema 7: Tipos, declaraciones y control

99

Control de secuencia

Las estructuras para el control de la secuencia son de 3 tipos:


Estructuras

que se usan en expresiones: precedencia y parntesis. Estructuras que se usan en enunciados: condicionales e iterativos. Estructuras que se usan en subprogramas: llamadas a subprogramas.

Estructuras de control explcitas, son las que el programador usa de forma optativa; mientras que las implcitas son las que el lenguaje define.
100

Secuenciamiento en expresiones

La evaluacin de expresiones depende de las prioridades y de los parntesis. Se puede representar la evaluacin en una estructura de rbol. Tres rdenes:
Prefijo

(polaca prefija), el operador antecede a los n operandos.


Se puede evaluar en un solo examen de la expresin Se puede usar para cualquier nmero de operandos Traduccin a cdigo fcil y almacenamiento en pila

Postfija,

el operador sigue a sus operandos. Ventajas parecidas a la prefija. Infija, slo es adecuada para dos operandos. Requiere reglas de precedencia y parntesis. La evaluacin suele ser de izquierda a derecha, pero en la potenciacin es al revs.
101

Representacin de expresiones en tiempo de ejecucin

Es necesario traducir las expresiones a una forma ejecutable:


Secuencias

de cdigo mquina, que deben hacer uso de localizaciones absolutas de los datos y registros para guardar datos intermedios. Estructuras de rbol, luego se ejecutan usando intrpretes software. Formas prefija y postfija, pueden ser ejecutadas almacenndolas en la pila de forma fcil.

102

Evaluacin de expresiones en rbol

Se pueden presentar algunos problemas:


Reglas de validacin uniforme. Impaciente. Consiste en evaluar todos los operandos que cuelgan de un operador para luego realizar la operacin. Frecuente y conceptualmente sencilla. Perezosa. No evaluar la operacin, sino pasar los operandos sin evaluar hasta que no quede otro remedio. Se pueden ahorrar operaciones, pero es difcil de implementar. Efectos colaterales, si un operando aparece varias

veces en una expresin, pero del momento dela primera evaluacin a la segunda cambia su valor por un efecto colateral, no se puede ahorrar su clculo. Condiciones de error, determinadas operaciones en la secuencia de clculo pueden fallar (divisin por 0). Expresiones booleanas en cortocircuito. Una evaluacin impaciente de expresiones booleanas puede conducir a un error no previsto por el programador. 103

Secuenciamiento con expresiones no aritmticas

Este tipo de operaciones son muy utilizadas en lenguajes lgicos:

Concordancia de patrones Reescritura de trminos (reglas de produccin) Unificacin, que consiste, ante una consulta (predicado conteniendo variables), en la sustitucin de variables para concordar patrones congruentes con las reglas y hechos de la base de datos.

En la implementacion de la unificacin en PROLOG las pilas desempean un papel importante. Adems, para el recorrido del rbol de bsqueda se emplea el RETROCESO, salvo que se encuentre la funcin ! (corte), que hace que se produzca siempre fracaso al retroceder a la ltima solucin plausible.
104

Control de secuencia mediante enunciados

Asignaciones a objetos de datos. El valor de los datos puede variar la secuencia.


Enunciado de asignacin. Suele ser un operador binario que asigna a la variable izquierda el resultado de evaluar la derecha. Enunciado de entrada. Leer datos desde un terminal u otro perifrico. Otras operaciones de asignacin. La ms usada es la transmisin de parmetros. Composicin o secuencia Alternancia Iteracin Otras sentencias (ya estructuradas): BRAK y CONTINUE.
105

Formas de control de secuencia:

Control explcito de secuencia: GOTO

Control de secuencia estructurado


Enunciados compuestos. Serie de enunciados que se pueden tratar como un solo enunciado (bloques). Enunciados condicionales, expresan alternancia de dos o ms enunciados:
If Case

Enunciados de iteracin, es le mecanismo bsico para la repeticin de un proceso:


Repeticin

simple: perform (FORTRAN) Repeticin mientras: while. Repeticin mientras con contador: for Repeticin indefinida: loop
106

El problema del control de secuencia estructurado.

La estructura puede ir complicndose por:


Enunciado de iteracin con salidas mltiples. Condiciones excepcionales (errores y su tratamiento)

Programas primos, tienen:

Un solo arco de entrada Un solo arco de salida Unas sola ruta del arco de entrada a cada nodo, y de cada nodo al arco de salida

El teorema de la estructura (Jacobini) establece que todos los programas se pueden reescribir usando los enunciados de la programacin estructurada.
107

Control de secuencia en los subprogramas: Llamada/Regreso simple

Tienen el mismo efecto que si se copia el cdigo del subprograma en la llamada call (regla de copia):
Los

subprogramas no pueden ser recursivos Se requieren enunciados call explcitos Los subprogramas se deben ejecutar por completo en cada llamada Transferencia inmediata del control en el punto de llamada Secuencia nica de ejecucin
108

Control de secuencia en los subprogramas: Subprograma simple Llamada/Regreso

Es posible el control sobre los datos:


Transmisin de parmetros Variables locales Variables globales

Para la implementacin es necesario:


La definicin del subprograma, esttica e invariable. Un registro de activacin, cambiante, que almacena: Datos locales Parmetros Otros elementos de datos:

Apuntador a la instruccin presente (CIP) Apuntador del ambiente presente (CEP). El ambiente de referencia es el registro de activacin. Direccin de retorno

109

Control de secuencia en los subprogramas: Subprogramas recursivos

La recursividad es un procedimiento para el control de secuencia consistente en que un programa se llama a s mismo, de manera que se crea una segunda activacin del subprograma durante el tiempo de vida de la primera activacin. Implementacin:
No

es conceptualmente distinto del caso anterior, slo es necesario disponer de espacio para los registros de activacin de las llamadas recursivas (pila).
110

Atributos del control de datos


Es necesario, durante la ejecucin, conocer el significado o valor de cada identificador que aparece en el programa. Nombres, sirven para asociar un identificador a un dato. Clases:

De variables De parmetros formales De subprogramas Para tipos definidos Para constantes definidas De enunciados De excepciones Para operaciones primitas Para constantes de literales

Un nombre compuesto corresponde a una estructura de datos. Segn el ambiente de referencia, cada ASOCIACIN representa la pareja de un identificador y su objeto de datos.

111

Ambientes de referencia

Ambiente local de referencia:


Parmetros formales Variables locales Subprogramas definidos

Ambiente no local de referencia, son identificadores que se pueden usar desde el subprograma, pero no se crean en l. Ambiente global de referencia, es la parte del ambiente no local. Una variable local oculta a la global del mismo nombre. Ambiente predefinido de referencia. Algunos identificadores son predefinidos por el lenguaje
112

Alcance esttico y dinmico


El alcance esttico de un identificador para una asociacin es el conjunto de activaciones de subprograma en las cuales la asociacin es visible. Una regla de alcance dinmico define las asociaciones en el curso dinmico de activaciones de subprogramas.

113

Datos compartidos en subprogramas

Los objetos de daots suelen ser compartidos para la comunicacin con y entre los distintos subprogramas. Enfoques:
Ambientes

comunes explcitos Ambientes no explcitos con base a alcance dinmico Alcances esttico herencia
114

Parmetros y transmisin de parmetros

Los parmetros y resultados transmitidos de manera explcita son el mtodo principal para compartir datos entre subprogramas. Parmetro real, es una clase de objeto de datos dentro de un subprograma que aparece declarado en el encabezamiento. El parmetro real es el objeto de datos que se comparte con el subprograma llamado. El establecimiento de correspondencia entre el parmetro real y el formal puede ser:
Correspondencia Correspondencia

de posicin (lo ms frecuente) por nombre explcito, ambos parmetros se aparean en la llamada:
Sub(Y => B, X => 27)
115

Mtodos para transmitir parmetros

Llamada por nombre, se copia. Llamada por referencia, se pasa el puntero al parmetro real. Llamada por valor resultado, se copia y caundo finaliza se escribe el valor resultado sobre el parmetro real. Llamada por valor constante, el parmetro real se pasa al formal como valor constante, no se puede modificar. Llamada por resultado, se usa slo para transferir un resultado de regreso al programa. No importa su valor inicial.
116

Semntica de la transmisin

Independientemente de la la implementacin los parmetros pueden ser:


De

entrada (IN) De salida (OUT) De entrada/salida (IN/OUT)

Lo normal es que los parmetros con tipos elementales de datos admitan las 3 posibilidades, y que los tipos de datos compuestos (arrays y registros) se pasen por referencia.
117

Subprogramas como parmetros

Para transmitir un subprograma como parmetro al subprograma que se llama hay que tener en cuenta que:
El

parmetro real es el nombre del subprograma que se transmite El parmetro formal especifica el tipo de subprograma Procedure Q(x:integer, function R(y,z:integer):integer) Problemas asociados con los parmetros de subprograma:

Verificacin esttica de tipos, pues en la llamada se debe hacer esta comprobacin. Referencias no locales (variables libres), es decir variables que no tienen enlaces dentro de la definicin del subprograma. Son necesarias reglas de asociacin ms reciente para referencias no locales.
118

Ambientes comunes explcitos

Un ambiente comn para compartir objetos de datos es la forma ms sencilla de compartir datos entre subprogramas.
Bloque

COMMON, de fortran Paquetes en ADA. Clases en C++ y SmallTalk, aunque no es su principal objetivo

Es necesario definir el alcance y la proteccin para los ambientes comunes explcitos


119

Unidad Didctica 3: Mecanismos de los LP

Tema 8: Mecanismos de abstraccin

120

121

You might also like