LENGUAJES DE PROGRAMACIÓN.ppt

121
1 LENGUAJES DE PROGRAMACIÓN Javier Martín Centro Asociado de Móstoles UNED

Transcript of LENGUAJES DE PROGRAMACIÓN.ppt

  • LENGUAJES DE PROGRAMACINJavier MartnCentro Asociado de MstolesUNED

  • IntroduccinJAVIER MARTIN ([email protected])TUTORIAS: JUEVES de 5 a 7PLAN DE TRABAJOExposicin de los temas y mediante transparencia, abundando en los puntos ms importantes.Resolucin de dudasPropuesta y resolucin de ejercicios y problemas

  • Unidad Didctica 0: IntroduccinTema 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.

  • 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 ProgramacinDeclarativos

  • Evolucin de los Lenguajes de ProgramacinOrientados a Objetos eImperativos

  • El papel de los lenguajes de programacinInicialmente 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.

  • Atributos de un buen lenguajeClaridad, 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.

  • Dominios de aplicacinAplicaciones 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 condiciones habilitadoras.

  • Estandarizacin de los lenguajesLos 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.

  • Uso de estndares en forma eficazEs 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.

  • Efectos de los entornos sobre los lenguajesCuatro 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.

  • Entornos de procesamiento por lotesEl 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.

  • Entornos interactivosEl 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.

  • 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 simultnea e indefinida.

  • Entornos de programacinEs 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.Definir, en el lenguaje, reglas de mbito, para ocultar nombre.Los nombres se pueden conocer agregando explcitamente sus definiciones desde una biblioteca externa (herencia en POO).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.Asertos: expresan relaciones que deben cumplirse entre los valores de las variables en ese punto del programa.

  • Marcos de ambienteUn 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.

  • Mquinas virtualesAunque 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.

  • Introduccin al conceptoLas 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:

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

  • Introduccin al conceptoLas 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.

  • Introduccin al conceptoAunque 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.

  • Jerarquas de mquinas virtualesLa 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 en el tiempo de ejecucin que en el tiempo de compilacin.

  • Jerarquas de mquinas virtualesAdems 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.

  • Jerarquas de mquinas virtualesLas 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).

  • Lenguajes intermediosUn 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.

  • Lenguajes intermediosUn 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.

  • Lenguajes intermediosPara 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:

  • Lenguajes intermedios

  • Lenguajes intermediosEstos 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.

  • Lenguajes intermediosEntre 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.

  • Lenguajes intermediosComo 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.

  • Lenguajes intermediosAdems 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.

  • Lenguajes intermediosLas 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.

  • Lenguajes intermediosY 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 elcompilador 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).

  • La mquina virtual de Java como ejemplo de una MVLa 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.

  • La mquina virtual de Java como ejemplo de una MVLos 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.

  • La mquina virtual de Java como ejemplo de una MVEl 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).

  • Unidad Didctica 1: Sintaxis y Semntica de los Lenguajes de ProgramacinTema 2:Sintaxis formal de los lenguajes de programacin

  • Ver Sintaxis y Semntica del resumen enProblema de traduccin de lenguajes(Capitulo 2)

  • Unidad Didctica 2: Paradigmas y lenguajes Tema 4:Descripcin de los paradigmas ms representativos

  • PARADIGMAS DE PROGRAMACINLa 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?

  • Programacin Imperativa o Procedural: FORTRANEs 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:

  • FORTRAN. HistoriaPrimer 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 77FORTRAN 90

  • FORTRAN. EjemploPROGRAM TRIVIALINTEGER II=2IF(I .GE. 2) CALL PRINTITSTOPENDSUBROUTINE PRINTITPRINT *,Hola MundoRETURNEND

  • FORTRAN. CaractersticasTipos de datos: Numricos (enteros, reales, complejos y doble precisin).Booleanos (logical)ArreglosCadenas de caracteresArchivosFORTRAN 90 ya es estructurado, y no requiere sentencias GOTO.Slo dos mbitos para las variables: local y global

  • Ejemplo anotado

  • FORTRAN. Objetos de datosVariables y constantesFORTRAN 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

  • FORTRAN. Objetos de datosTipos de datos estructuradosArrays, 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*25Almacenamiento 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 ... END TYPE

  • FORTRAN. Control de secuenciaEL conjunto de estructuras de control es limitado:Expresiones, prioridad de operadoresEnunciadosAsignacin, cuando se hace entre cadenas hay ajuste de tamao con blancos o truncamiento.Condicional. Permite IF ELSE IF... Para seleccin mltiple SELECT CASE CASE.....CASE DEFAULT.... END SELECTIteracin. DO....END DONulo, 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.

  • FORTRAN. Entrada y SalidaTipos de archivos:SecuencialesDe acceso directoComandos: 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).

  • FORTRAN. SubprogramasHay 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)**2Gestin de almacenamiento.Las variables son locales o globales (COMMON)Recursividad: RECURSIVE FUNCTION FACTORIAL(X)Parmetros de subprograma. Paso por referencia.

  • Abstraccin y encapsulamiento FORTRAN. Evaluacin del lenguajeLa 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

  • Programacin Imperativa o Procedural: CDesarrollado por Ritchie y Thompson en el 72.Multiuso (inicialmente para sistemas)Sintaxis compactaHistoria60 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 C82, C es distribuido con Unix y muy usado en las universidades. ANSI comienza a desarrollar un estndar

  • Perspectiva del lenguaje CLa 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.

  • Ejemplo anotado

  • Objetos de datosTipos de datos primitivosLos 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 estructuradosArrays, comienzan en 0 y se guardan por filas.Tipos definidos por el usuario. Struct { }.Union, es una definicin de tipo si tcticamente con un struct, pero todos los componentes ocupan la misma memoria.

  • Representacin de almacenamientoLos 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.

  • Control de secuenciaExpresiones.Se emplea notacin infija.Coerciones, pueden ser forzadas haciendo una cast unaria antes de un valor.A + (int)bEnunciados. 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...#elseC no tiene enunciados E/S, estn en stdio.h.

  • Subprogramas y Gestin de almacenamientomain() 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.

  • Abstraccin y encapsulamientoEl 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.

  • Evaluacin del lenguajeC es muy potente y popular:FlexibleEficienteDisponible (se distribuye con Unix)PortatilPero C tambin permite una programacin descuidada y propensa a errores.

  • Lenguajes funcionales: LISP60. McCarthy en el MITMuy usado en IAEn 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

  • Hola Mundo en LISP

  • Perspectiva del lenguajeInteractivo (usualmente)Los datos en LISP son muy restringidos:tomos literales (smbolos)tomos numricosLa 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.

  • Ejemplo anotado

  • Objetos de datosTipos de datos primitivos: tomos. Cada tomo tiene una lista de propiedades asociada, accesible a travs del puntero que almacena el nombre del tomo.No se distinguen may-min para identificadoresTipos de datos estructurado: listas. Tienen asociado un puntero al primer elemento (car) y otro al elemento siguiente (cdr). Una lista vaca apunta a nil.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.

  • Control de secuenciaEl 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:CondicionalOperaciones 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.

  • Gestin de subprogramasTres 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.

  • Gestin de almacenamientoLa 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.

  • Funciones en LISP IFunciones 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 xPredicadosatom x, devuelve True si x es un tomo.numberp x, devuelve True si x es un nmerogreaterp x y, devuelve True si x>ylessp x y, devuelve True si x
  • Funciones en LISP IFunciones aritmticas:+, -, *, y /. rem x y, devuelve el mdulo x/y (remainder).Funciones de entrada y salidaload nombrearchivo, lee el archivo a memoriaprint x, imprime el elemento xopen nombrearchivo, abre un archivo y devuelve una puntero al mismoread, lee del terminal un tomohelp, proporciona ayudatrace, traza la funcinbye, termina LISP

  • Abstraccin y encapsulamientoLISP, en origen, no incluye caractersticas de abstraccin de datos.CLOS fue una ampliacin de LISP con orientacin de objetos. Caractersticas:Herencia mltipleFunciones genricasMetaclases y metaobjetosTcnica de creacin e inicializacin de objetos que permite control del proceso por parte del usuario.

  • Evaluacin del lenguajeLISP 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.

  • Programacin lgica: PROLOGPROLOG est orientado a la resolucin de problemas mediante el clculo de predicados, basado en:Preguntas a la base de datosPruebas matemticasEl 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.

  • HistoriaCoulmerauer (1970) desarroll un lenguaje para hacer deducciones de textoSe 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.

  • Hola mundo, en PROLOG

  • Perspectiva del lenguajeEl 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 /* */

  • Ejemplo anotado

  • Objetos de datosTipos de datos primitivos: variables y constantes:EnterosRealesCaracteresLos 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 cadenaListas, representadas entre [ ]Tipos definidos por el usuario. Las reglas para definir relaciones pueden actuar como tipos de usuario.

  • Representacin de almacenamientoLas 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).

  • Control de secuenciaEl orden de evaluacin es secuencialExpresiones, operaciones aritmticas y operadores relacionales. Not().EnunciadosHechos, 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 consultPreguntas, 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.

  • Subprogramas y gestin de almacenamientoPROLOG 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 fracasaSee(nombrearchivo), lee las entradas de un archivo y las incorpora al conjunto de reglas.Write(trmino)Tell(trmino), reorienta la salida del write al archivoTold, cierra el archivo anteriorNl, salto de lneaAtom(X), devuleve cierto si X es un tomoVar(X), devuelve cierto si X es una variableInteger(X), devuelve cierto si X es un enteroTrace, activa la depuracin del programa

  • Abstraccin y encapsulamientoPROLOG no proporciona estas capacidades.

  • Evaluacin del lenguajePROLOG 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.

  • Unidad Didctica 2: Paradigmas y lenguajes Tema 5:El paradigma de la programacin orientada a objetos (POO)

  • PROG. ORIENTADA A OBJETOVer Apuntes sobre la POO

  • HERENCIACon 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.

  • Clases derivadasLa 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:PRIVATEPUBLICPROTECTEDImplementacin: 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++).

  • MtodosLa 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 derivadaUsar una funcin virtual, que se enlaza dinmicamente en el momento de llamada del subprograma.

  • Clases abstractasSe 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 ModPilaLa ventaja es que las clase delta se pueden adicionar a cualquier clase.

  • Objetos y mensajesEl 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: 10X at:3 put:42

  • Herencia de clasesSi 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

  • Conceptos de abstraccinEl 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.

  • POLIMORFISMOEl 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.

  • Unidad Didctica 2: Paradigmas y lenguajes Tema 6:La programacin centrada en la red

  • Ver Apuntes sobre la PCR

  • Unidad Didctica 3: Mecanismos de los LPTema 7:Tipos, declaraciones y control

  • Control de secuenciaLas 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.

  • Secuenciamiento en expresionesLa 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 expresinSe puede usar para cualquier nmero de operandosTraduccin a cdigo fcil y almacenamiento en pilaPostfija, 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.

  • Representacin de expresiones en tiempo de ejecucinEs 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.

  • Evaluacin de expresiones en rbolSe 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.

  • Secuenciamiento con expresiones no aritmticasEste tipo de operaciones son muy utilizadas en lenguajes lgicos:Concordancia de patronesReescritura 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.

  • Control de secuencia mediante enunciadosAsignaciones 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.Formas de control de secuencia:Composicin o secuenciaAlternanciaIteracinControl explcito de secuencia: GOTOOtras sentencias (ya estructuradas): BRAK y CONTINUE.

  • Control de secuencia estructuradoEnunciados compuestos. Serie de enunciados que se pueden tratar como un solo enunciado (bloques).Enunciados condicionales, expresan alternancia de dos o ms enunciados:IfCaseEnunciados de iteracin, es le mecanismo bsico para la repeticin de un proceso:Repeticin simple: perform (FORTRAN)Repeticin mientras: while.Repeticin mientras con contador: forRepeticin indefinida: loop

  • 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 entradaUn solo arco de salidaUnas sola ruta del arco de entrada a cada nodo, y de cada nodo al arco de salidaEl teorema de la estructura (Jacobini) establece que todos los programas se pueden reescribir usando los enunciados de la programacin estructurada.

  • Control de secuencia en los subprogramas: Llamada/Regreso simpleTienen el mismo efecto que si se copia el cdigo del subprograma en la llamada call (regla de copia):Los subprogramas no pueden ser recursivosSe requieren enunciados call explcitosLos subprogramas se deben ejecutar por completo en cada llamadaTransferencia inmediata del control en el punto de llamadaSecuencia nica de ejecucin

  • Control de secuencia en los subprogramas: Subprograma simple Llamada/RegresoEs posible el control sobre los datos:Transmisin de parmetrosVariables localesVariables globalesPara la implementacin es necesario:La definicin del subprograma, esttica e invariable.Un registro de activacin, cambiante, que almacena:Datos localesParmetrosOtros 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

  • Control de secuencia en los subprogramas: Subprogramas recursivosLa 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).

  • Atributos del control de datosEs 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 variablesDe parmetros formalesDe subprogramasPara tipos definidosPara constantes definidasDe enunciadosDe excepcionesPara operaciones primitasPara constantes de literalesUn 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.

  • Ambientes de referenciaAmbiente local de referencia:Parmetros formalesVariables localesSubprogramas definidosAmbiente 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

  • Alcance esttico y dinmicoEl 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.

  • Datos compartidos en subprogramasLos objetos de daots suelen ser compartidos para la comunicacin con y entre los distintos subprogramas. Enfoques:Ambientes comunes explcitosAmbientes no explcitos con base a alcance dinmicoAlcances estticoherencia

  • Parmetros y transmisin de parmetrosLos 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 de posicin (lo ms frecuente)Correspondencia por nombre explcito, ambos parmetros se aparean en la llamada:Sub(Y => B, X => 27)

  • Mtodos para transmitir parmetrosLlamada 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.

  • Semntica de la transmisinIndependientemente 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.

  • Subprogramas como parmetrosPara 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 transmiteEl parmetro formal especifica el tipo de subprogramaProcedure 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.

  • Ambientes comunes explcitosUn ambiente comn para compartir objetos de datos es la forma ms sencilla de compartir datos entre subprogramas.Bloque COMMON, de fortranPaquetes en ADA.Clases en C++ y SmallTalk, aunque no es su principal objetivoEs necesario definir el alcance y la proteccin para los ambientes comunes explcitos

  • Unidad Didctica 3: Mecanismos de los LPTema 8:Mecanismos de abstraccin