84
7/23/2019 Conceptos Lenguajes de programacion http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 1/84 1 CONCEPTOS Y PARADIGMAS DE LENGUAJES DE PROGRAMACION CONTENIDOS MINIMOS:  Sintaxis y semántica.  Semántica operacional.  Entidades y ligaduras.  Sistemas de tipos.  Encapsulamiento y abstracción.  Intérpretes y Compiladores.  Paradigmas de lenguajes (imperativo, orientado a objetos, funcional, lógico). Programa 1- Lenguajes de Programación como herramientas para producir software. Objetivo del estudio de sus conceptos. Distintos puntos de vista. Capacidad de comunicación. Relación e integración de los lenguajes de programación respecto a otros conceptos. 2- Evaluación de los lenguajes de programación a través de las características del software que producen. Principios de diseño de los lenguajes. Perspectiva histórica de los lenguajes de programación motivación, herencia, características, evolución. Desde Fortran hasta Java. Lenguajes funcionales. Lenguajes Orientados a objetos.  Abstracción: qué papel juega. Necesidad de estandarizar: ¿cuándo y cómo hacerlo? 3- Estructura de un lenguaje: sintaxis y semántica. Sintaxis: Características de las sintaxis. Elementos de las sintaxis. Estructuras sintácticas. Reglas léxicas y sintácticas. Tipos de sintaxis. Sintaxis abstracta y concreta. Formas de definir la sintaxis. Gramáticas. (Backus Naum Form).Árboles sintácticos y de derivación. Gramáticas recursivas. Subgramáticas. Gramáticas ambiguas. EBNF. Diagramas sintácticos (CONWAY) Semántica estática. 4- Semántica. Tipos de semánticas. Formas de definir la semántica de un lenguaje de programación. Procesamiento de un lenguaje interpretación y traducción. Tipos de traductores. Comparación entre Traductor e Intérprete. Combinación de ambas técnicas. Compiladores. Etapas de Análisis y Síntesis. Optimización.

Conceptos Lenguajes de programacion

  • Upload
    neri

  • View
    220

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 1/84

1

CONCEPTOS Y PARADIGMAS DE LENGUAJES DEPROGRAMACION

CONTENIDOS MINIMOS:

  Sintaxis y semántica.  Semántica operacional.  Entidades y ligaduras.  Sistemas de tipos.  Encapsulamiento y abstracción.  Intérpretes y Compiladores.  Paradigmas de lenguajes (imperativo, orientado a objetos, funcional, lógico).

Programa

1- Lenguajes de Programación como herramientas para producir software. Objetivo del estudio de susconceptos. Distintos puntos de vista. Capacidad de comunicación. Relación e integración de loslenguajes de programación respecto a otros conceptos.

2- Evaluación de los lenguajes de programación a través de las características del software queproducen. Principios de diseño de los lenguajes.Perspectiva histórica de los lenguajes de programación motivación, herencia, características,evolución. Desde Fortran hasta Java. Lenguajes funcionales. Lenguajes Orientados a objetos. Abstracción: qué papel juega.

Necesidad de estandarizar: ¿cuándo y cómo hacerlo?

3- Estructura de un lenguaje: sintaxis y semántica.Sintaxis: Características de las sintaxis. Elementos de las sintaxis. Estructuras sintácticas. Reglasléxicas y sintácticas. Tipos de sintaxis. Sintaxis abstracta y concreta.Formas de definir la sintaxis. Gramáticas. (Backus Naum Form).Árboles sintácticos y de derivación.Gramáticas recursivas. Subgramáticas. Gramáticas ambiguas. EBNF. Diagramas sintácticos(CONWAY)Semántica estática.

4- Semántica. Tipos de semánticas. Formas de definir la semántica de un lenguaje de programación.Procesamiento de un lenguaje interpretación y traducción. Tipos de traductores. Comparación entreTraductor e Intérprete. Combinación de ambas técnicas. Compiladores. Etapas de Análisis y Síntesis.Optimización.

Page 2: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 2/84

2

5- Semántica Operacional.Ligadura. Descriptores. Momentos de ligadura. Estabilidad.Variables. Arquitectura Von Newman. Atributos. Momentos y estabilidad. Nombre: características. Alcance: visibilidad, reglas. Tipo: definición, clasificación. L-valor: tiempo de vida, alocación. R-valor:constantes, inicialización. Alias

6- Unidades. Atributos. Representación en ejecución. Elementos. Unidades recursivas. Unidadesgenéricas. Alias y sobrecarga. Procesador abstracto: elementos, instrucciones.

Procesamiento de un lenguaje: clasificación. Lenguaje estático. Entidades locales. Rutinas internas.Compilación separada. Lenguajes basados en pila. Unidades recursivas, implementación. Estructurade bloque. Datos semidinámicos y dinámicos. Lenguajes dinámicos.

7- Compartir Datos. Ambiente común. Acceso al ambiente no-local. Parámetros. Ventajas. Evaluación delos parámetros reales y ligadura con los parámetros formales. Clase de parámetros: Datos ySubprogramas. Modos de pasaje de parámetros datos. Pasaje de Rutinas como parámetros.

8- Sistema de tipos. Tipos predefinidos, tipos definidos por el usuario, tipos estructurados, tiposabstractos. Implementación de datos, su representación.Sistema de tipos: lenguajes seguros y fuertemente tipados.Encapsulamiento y abstracción. Evolución de los tipos. Tipos abstractos. Equivalencias de tipos.

9- Abstracción de Control. Estructuras de control: Definición de estructuras de control a nivel de sentenciay a nivel de unidad. Tipos de estructuras de control a nivel de sentencia. Diferencia entre sentencia deasignación y expresión. Evolución de las sentencias de selección e iteración en diferentes lenguajes,desde PL/1 a Java.

10- Abstracción de control a nivel de unidad. Excepciones: Definición. Modelos de Terminación yReasunción. Distintos modelos de manejo de excepciones. Comparación.

11- Paradigma funcional. Características. Comparación lenguaje imperativo con lenguaje funcional.Definiciones de funciones. Script. Expresión y valor. Transparencia referencial. Evaluación de lasexpresiones, mecanismo de reducción o simplificación. Orden aplicativo, orden normal (lazy

evaluation).Tipos de datos básicos y derivados. Tipos de funciones. Expresiones polimórficas.Currificación. Cálculo Lambda. Dominios de aplicación.

12- Paradigma Orientado a Objetos. Características. Elementos básicos de la programación orientada aobjetos: objetos, mensajes, métodos, clases. Conceptos de generalización, especificación y herencia.Diferentes tipos de herencia. Lenguajes híbridos, características principales. Dominios de aplicación

13- Paradigma lógico. Características. Elementos de la programación lógica: variables, constantes,términos compuestos, listas. Cláusulas y predicados. Reglas y hechos. Dominios de aplicación

Page 3: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 3/84

3

RESUMEN

  INTRO

“El valor de un lenguaje o de un concepto se debe juzgar según la forma en que afecta la producción de Software y ala facilidad con la que puede integrarse a otras herramientas” 

¿PARA QUÉ ESTUDIAR CONCEPTOS DE LENGUAJES?

1.  Para aumentar la capacidad para producir software

Conocer profundamente las características de los lenguajes permite aprovechar su potencia y evitarerrores, minimizando esfuerzo

2.  Para mejorar el uso del lenguaje que ya se esta utilizando

Si se entiende como se implementa cada característica se mejora la capacidad para escribir programaseficientes.

3.  Para incrementar el vocabulario• El lenguaje

 –  equivale a comunicación. –  es una ayuda y una limitación al pensamiento. –  permite expresar y estructurar el pensamiento

• Incrementamos la capacidad para expresar ideas

4.  Para elegir mejor un lenguaje

Si se conocen más a lenguajes, se facilita la elección del más adecuada de acuerdo al área del problema y por lo tanto se reduce el esfuerzo de codificación.

5.  Para facilitar el aprendizaje de nuevos lenguajes

Un lingüista que conoce profundamente la estructura subyacente del lenguaje natural aprendemuchísimo mas rápido un nuevo lenguaje (idioma) que una persona que no sabe nada del tema

6.  Para facilitar el diseño e implementación de lenguajes

El programador puede convertirse en diseñador o implementador de un lenguaje.

LENGUAJE DE PROGRAMACION Y METODO DE DISEÑO

• Paradigmas de lenguajes 

• Procedural: descomposición en pasos - rutinas• Funcional: expresiones y funciones - composición.• Con TADs: reconocimientos de Tads• basada en módulos: grupo de entidades-interfaces• OO: clases –  instancias - jerarquías• Programación genérica: módulos genéricos –  instanciados en compilación o ejecución• Programación declarativa: no algorítmico, declaración del problema (especificación)  

Page 4: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 4/84

4

CRITERIOS PARA EVALUAR LOS LENGUAJES DE PROGRAMACION

1.  FACILIDAD DE ESCRITURA

• La facilidad de escritura es la medida de cuan fácil resulta usar un lenguaje para construir soluciones.

Elementos que favorecen a la facilidad de escritura:

1.  SIMPLICIDAD

Las características del lenguaje deben ser fáciles de capturar: entender y recordar

2.  EXPRESIVIDAD

Un lenguaje es expresivo si sus herramientas permiten expresar la naturaleza del problema.

3.  ORTOGONALIDAD

Permite que los elementos del lenguaje puedan componerse conforme un conjunto determinado de reglas. Estoes, que los efectos de la composición puedan entenderse y predecirse. El usuario comprende mejor si tiene un

 pequeño número de primitivas y un conjunto consistente de reglas de combinación.

4.  SOPORTE DE ABSTRACCIÓN

• Concepto clave para manejar la complejidad• Abstracción de procesos y de datos • Principio de diseño: Ocultamiento de la Información 

2.  LEGIBILIDAD

• Fácil de leer por las personas (equipo)

Es una propiedad que favorece la modificabilidad y la mantenibilidad de los programas. Los elementos quecaracterizan la legibilidad de un lenguaje son:

1.  Semántica/Sintaxis

• Restricciones semánticas • If -then-else anidados• Separación de sentencias • indentación 

2.  Sintaxis

• Documentación y comentarios • Elección de nombres • Uso de constantes• Convenciones léxicas 

Page 5: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 5/84

5

3.  Definición del lenguaje

• Precisión en la definición de la sintaxis y de la semántica • Ambigüedad• Portabilidad • Definiciones formales 

4.  Estructuras de control

• Programación estructurada 

5.  Estructuras de datos

• Facilidades para expresar los datos del problema 

3.  CONFIABILIDAD

El lenguaje aporta mecanismos para comprobar que los programas sean correctos. El objetivo es comprobarestáticamente la mayor cantidad de aspectos, pues las comprobaciones dinámicas no certifican el estado correcto de un

 programa.

De esta manera se tiene mas probabilidades que el programa sea correcto y más eficiente. El lenguaje es robusto si escapaz de prevenir situaciones.

 –  Correcto: cumple con las especificaciones –  Certificación: –  Verificación de programas: probar su Corrección

Chequeo de tipos• Chequeos estáticos y dinámicos 

RobustoCapacidad de prevenir situaciones

• Manejo de excepciones Restricción de alias

• Dos nombres que referencian la misma posición de memoria  

4.  MANTENIBILIDAD

• Modificabiliad: facilidad de introducir cambios • Factoreo: una sola vez y luego reusar  • Localidad: el efecto de una característica se restringirse a una porción local del programa  

5.  EFICIENCIA

•Tiempo y Espacio •Esfuerzo humano •Optimizable

Page 6: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 6/84

6

Evolución de los lenguajes

Primera Etapa

Las primeras máquinas estaban proyectadas para resolver problemas numéricos y se pensaba en ellas como calculadoraselectrónicas. Los cálculos numéricos han sido la forma dominante de su aplicación.

1. ASSEMBLER

Año de aparición. 1950Objetivo. Resolver problemas numéricosCaracterísticas. Código similar al de máquina, introduce símbolos para su uso, además del código hexadecimalAportes. Introduce el uso de subprogramas y estructuras de datos lineales

2. FORTRAN

Año de aparición. 1954Objetivo. Demostrar que a pesar de que es un lenguaje de más alto nivel, es tan eficiente como ASSEMBLER. Sus creadores

 buscaban trasladar fórmulas matemáticas al código de máquinaCaracterísticas. La meta era conseguir un lenguaje de programación que incluyera estructuras de control, condicionales yenunciados de entrada salida. No es flexible en cuanto a su sintaxis pero si eficienteAportes. Se incorpora la posibilidad de escribir expresiones científicas casi literalmente

3. ALGOL-60

Año de aparición. 1958Objetivo. Es un lenguaje diseñado para describir algoritmos. Tiene una notación aproximada a las matemáticas normales. Los

 programas escritos en ALGOL debían ser compilados en lenguaje de máquina y no ligarse a una arquitectura.Características. Fue diseñado por un comité, por lo que es más denso que los lenguajes que existían hasta entonces.Originalmente fue pensado para que manejara la interacción de entrada y salida en mayor escala que el cálculo. Backus fue eleditor del informe que definió el lenguaje. Usó una notación sintáctica que aplicaba el concepto de lenguaje libre de contexto, y deesta manera introdujo la teoría formal de la gramática al mundo de los lenguajes.Aportes. Introdujo las estructuras de bloques anidados y su implementación como una pila de ejecución. Utilizando la escritura

 prefija o polaca para expresiones se implementó un proceso más eficiente de evaluación con base en pilas

4. COBOL

Año de aparición. 1960Objetivo. El COBOL (Common Busisness Oriented Languaje) se ha usado ampliamente desde principios de los años setenta paraaplicaciones de negocios. Muchos aspectos del lenguaje están planteados para permitir el uso de estructuras relativamenteeficientes en tiempo de ejecución, aunque este objetivo es menos importante que el de la independencia del hardware ytransportabilidad del programa. El desarrollo de COBOL fue organizado por el Departamento de Defensa de EE.UU. bajo ladirección de Grace Hopper. Un objetivo que se perseguía era desarrollar un lenguaje en “ingles natural” Características. Si bien el lenguaje es bastante legible, tiene una sintaxis formal y, sin capacitación adecuada, no se puede

 programar con facilidad.La traducción de COBOL a código ejecutable eficiente es compleja a causa del número de diferentes representaciones de datos yla gran cantidad de opciones para la mayoría a de los enunciadosAportes. COBOL brinda las herramientas sintácticas para separar los elementos del programa dependientes de los independientesde la máquina. El resultado es una división del programa en DATA (datos) conteniendo descripciones de datos, ENVIRONMENT(entorno) con especificaciones del programa dependientes de la máquina, y PROCEDURE (procedimiento) conteniendo losalgoritmos. Puede agregarse una división IDENTIFICATION (identificación) que sirve para dar nombre al programa y

 proporcionar documentación adicional

Segunda Etapa

Se desarrollan lenguajes específicos que consumen muchos recursos de máquina y terminales. Estos lenguajes no tuvieron tantadistribución.

1. LISP

Año de aparición. 1960Objetivo. Proyectado por John McCarthy, el lenguaje se ha llegado a usar ampliamente para investigación en ciencias de lacomputación, en forma destacada en el ´área de inteligencia artificial (prueba de teoremas, sistemas inteligentes, etc.).

Page 7: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 7/84

7

Características. Desde el punto de vista de su diseño, está destinado a la programación en forma aplicativa. La ejecución de unaexpresión es el concepto principal que se necesita para la secuenciación de programas. Por esta razón el almacenamiento enestructuras de begindescription se convierte en un proceso para la gestión de almacenamiento en lugar del mecanismo tradicionalde registros de activación de los lenguajes de procedimiento.Aportes. Sus objetos básicos son átomos y listas de átomos, y la llamada y recursión de funciones constituyen los mecanismos

 básicos de ejecución. LISP es diferente en muchos aspectos, y el más notable es la equivalencia de forma entre programas y datos,lo que permite ejecutar estructuras de datos como programas y modificar programas como datos. Se destaca la fuerte dependenciade la recursión como estructura de control, en vez de la iteración.

2. APL

Año de aparición. 1966Objetivo. Se crea para conseguir un eficiente manejo de arreglos.Características. Define el uso de símbolos especiales para cálculos matemáticos específicos.Aportes. Se codifica en los mismos terminales IBM/360 en lugar de la utilización de tarjetas.

3. SNOBOL

Año de aparición. 1965Objetivo. El desarrollo fue iniciado en 1972 en los laboratorios Bell. La meta era desarrollar un lenguaje de procesamiento decadenas para manipulación de fórmulas y análisis de gráficos. Su nombre proviene de StriNg Oriented symBOlic Language.Características. Implementa la concordancia de patrones con base en gramáticas BNF. Es totalmente dinámico, incluyendo sus

declaraciones, tipos, asignación de almacenamiento, hasta puntos de entrada y salida de procedimientosAportes. Procesamiento de Strings. La implementación emplea macros virtuales de procesamiento de cadenas (rescritura demacros para cualquier computadora existente.

Tercera Etapa

En cuanto a hardware se percibe una evolución hacia un tamaño y velocidad creciente y costo decreciente. Surgen lasminicomputadoras, la micro-programación y los circuitos integrados.

1. BASIC

Año de aparición. Principio de los 60Objetivo. El BASIC (Begginer’s All-purpose Symbolic Instruction code) fue desarrollado con el objetivo de suministrar un

entorno sencillo de computación. En especial para estudiantes no científicos. Además, para aumentar la eficiencia, el BASIC se proyectó como un lenguaje interactivo antes de que el tiempo compartido estuviera presente en todas las arquitecturas.Características. Se trata de un lenguaje con sintaxis y semántica extremadamente simples, posee enunciados numerados y losnombres de variables se definen con una letra sola más un digito. Sus estructuras de decisión (IF), iteración (FOR) e invocación asubrutinas (GOSUB) tienen vinculación simple.Aportes. BASIC es un ejemplo contradictorio de la programación. Mientras que la sintaxis es extremadamente fácil de aprender,la complejidad de armar un programa hace que el código sea ilegible en una cantidad mayor de sentencias. Las versiones masrecientes incluyen mayor flexibilidad, asemejándolo a lenguajes como Pascal ó FORTRAN.

2. PL/1

Año de aparición. 1965Objetivo. Con la introducción de su nueva línea de computadoras 360, IBM desarrolló un lenguaje que fusionara los atributos

numéricos de FORTRAN con las características de programación para negocios de COBOL. Buscó reunir todos los conceptosimportantes de los lenguajes predecesores. Un subconjunto logró un éxito moderado en los años setenta como compiladoreducativo (PL/C)Características.Aportes. Incorpora el manejo de situaciones excepcionales, la posibilidad del manejo de concurrencia y el uso explícito de

 punteros

Cuarta Etapa

1. Simula

Año de aparición. 1967Objetivo. Desarrolla un esquema de clases para comunicación de procesos y lo introduce como mecanismo de modularización,

 para lo que dispone de nuevas herramientas sintácticasCaracterísticas. Es un derivado de ALGOL que introdujo clases como objetos de datos.Aportes.

Page 8: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 8/84

8

2. ALGOL-68

Año de aparición. 1968Objetivo. Tuvo como principal objetivo el de ser un lenguaje ortogonalCaracterísticas. Define pocos elementos y permite su libre combinaciónAportes. Introduce arreglos flexibles y tipos definidos por el usuario

3. Pascal

Año de aparición. 1968Objetivo. Fue proyectado por Niklaus Wirth para superar muchas deficiencias del lenguaje ALGOL más antiguo. Su creador teníacomo objetivo diseñar un lenguaje que se pudiera compilar en un solo paso y utilizó un algoritmo de análisis sintáctico paradesarrollar el intérprete de ”código P”. Por mucho tiempo fue el lenguaje que se utilizó como herramienta de enseñanza en lainiciación a la programación.Características. Es un lenguaje muy simple y expresivo. Permite declarar procedimientos locales internos y crear una jerarquíacompleta de nombres anidados de objetos de datos. Un programa Pascal siempre está formado por un solo bloque de programaque contiene definiciones de los subprogramas que se usan. Tiene un conjunto bastante grande de tipos de datos primitivos yestructurados; permite, mediante la sentencia type, definir tipos nuevos, aunque no proporciona encapsulamiento de susoperaciones.Aportes. El compilador de Pascal traducía primero el programa fuente en Pascal a un lenguaje de máquina hipotético para unamáquina que tenía como base una arquitectura de pilas. El compilador de Pascal estaba escrito en el mismo Pascal. A causa deesta estructura, el Pascal era fácil de transportar a otros sistemas. Para pasar a una máquina nueva requiere solamente rehacer el

intérprete de código P.Permite el uso de un tipo apuntador y una operación para crear nuevos objetos de datos que permiten construir una secuencia dedatos de tamaño dinámico (listas enlazadas)

Quinta Etapa

1. C

Año de aparición. 1972 - Laboratorios BellObjetivo. Aunque es un lenguaje de programación para usos generales, se le ha asociado con la programación de sistemasoperativos. Se uso por primera vez para escribir el núcleo de UNIX, y conforme este sistema se comercializó en los años 80, C sehizo cada vez más popularCaracterísticas. Está relacionado con ALGOL y Pascal en cuanto a estilo, y con la inclusión de atributos de PL/I. Su sintaxis es

compacta y clara, y tiene características de ejecución eficientes. La gran biblioteca de funciones normales proporciona a C unaforma fácil de administrar los recursos del sistema con un alto nivel de abstracción. La relación entre arreglos y apuntadores, aligual que la visión transparente de las cadenas como arreglos de caracteres o apuntadores a series de caracteres, da lugar aoperaciones eficientes de procesamiento de cadenas.Aportes. Es el primer lenguaje de alto nivel que se uso para la implementación de sistemas, dado que los sistemas operativosanteriores estaban implementados en ASSEMBLER. Muchas de sus ideas provienen del lenguaje BCPL, en su subconjunto B, quefue proyectado para la programación de sistemas. Estos antecesores carecían de tipos, por lo que C fue innovador al incluir unavariedad de tipos de datos. El estándar ANSI contribuye con la definición de una biblioteca de funciones de acceso al sistemaoperativo y otras actividades semejantes. C no es un lenguaje fuertemente tipado, sino que al evolucionar, su verificación de tiposha sido reforzada.

Sexta Etapa

Se introduce el concepto de ambiente de desarrollo de software y el paradigma Orientado a Objetos. El costo de dicho desarrolloinvolucra desde entonces el costo humano además del tecnológico.

1. Ada

Año de aparición. 1983Objetivo. Originalmente fue diseñado para aplicaciones militares. La meta era proyectar un lenguaje y estandarizarlo antes de queexistieran variantes incompatibles. Este estándar se concretó antes de que existieran traductores funcionales para el lenguaje.Características. Pascal fue el punto de partida para el diseñó de Ada, pero difieren en muchos aspectos importantes. Ada está

 pensado para permitir la construcción de programas grandes por equipos de programadores, ya que un programa se proyecta comouna colección de componentes de software llamados paquetes, donde cada uno representa un tipo de datos abstracto que secomparten entre subprogramasAportes. A través del uso de paquetes suministra los conceptos de abstracción y encapsulamiento de tipos de datos y operaciones

definidos por el programador. Introduce un extenso conjunto de características para el manejo de excepciones. El aspecto masnotable de las características de control de Ada es la provisión de tareas (tasks) capaces de ejecutarse concurrentemente. En susversiones posteriores al Standard ANSI introduce herramientas de definición de objetos de datos y código genéricos.

Page 9: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 9/84

9

2. Smalltalk

Año de aparición. 1972Objetivo. Fue proyectado como un sistema total y no simplemente como una notación para desarrollar programasCaracterísticas. Smalltalk tiene una definición nuclear pequeña, ya que toda su funcionalidad se basa en desarrollar subclases deotras ya existentes y anexar métodos a cada una de ellas. Sus sentencias básicas definen asignación y ejecución secuencial, ya queel resto de las estructuras de control necesarias están implementadas por clases y pasaje de mensajes. Conforme se construye unconjunto de clases y métodos, es simple ampliar el programa para manejar problemas mayores.Aportes. Se basa por completo en encapsulamiento y abstracción. La herencia es una característica básica del proceso de

invocación de métodos.

3. C++

Año de aparición. 1986Objetivo. A partir del lenguaje C, Bjarne Stroustrup buscó desarrollar un lenguaje eficaz que conservara la eficiencia de C y queincorpore la herencia de objetos, percibiendo que el concepto de clase que fue introducido por Simula era un mecanismo eficientede tipificaciónCaracterísticas. El uso de clases no hace que los programas se ejecuten más lentamente. C++ tiene tipificación más fuerte que lade C, pero casi todos los programas escritos en C deben poder ser compilados por un compilador de C++. No es lenguaje muysimple de aprender, pero para programadores experimentados, C++ permite desarrollar programas muy eficientes.Aportes. C++ da cabida a clases y definiciones de métodos para hacer extensivo el proceso de encapsulamiento de tipos de datosabstractos a funciones polimórficas. Mientras que el desarrollo de clases es una ampliación relativamente menor a la sintaxis de C,

el uso apropiado de métodos y funciones modifica en grado considerable la manera como se construyen los programas en C++La implementación subyacente de características del lenguaje es bastante transparente, lo que produce programas que se ejecutancon eficiencia

4. Java

Año de aparición.Objetivo. Fue diseñado para desarrollar software de redes.Características. El código Java se compila a un nivel intermedio, generando "bytecodes” que son posibles de interpretar por unamaquina virtual Java. Existe un maquina virtual para cada plataforma.Aportes. Introduce más movilidad, de manera que el software producido sea portable e independiente de la plataforma.

Page 10: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 10/84

10

  SINTAXIS Y SEMÁNTICA

Sintaxis

La sintaxis es un conjunto de reglas que definen como componer letras, dígitos y otros caracteres para formar los programas.Estas reglas se dividen en dos grupos: reglas léxicas y reglas sintácticas.

Características

-  Ayuda al programador a escribir programas sintácticamente correctos.-  Establece reglas que sirven para que el programador se comunique con el procesador.

-  Favorece a:-  Legibilidad

-  Verificabilidad y Traducción

-  Falta de ambigüedad

Elementos de la sintaxis

  Alfabetos o conjuntos de caracteres, donde el orden de los caracteres es lo que se utiliza en las comparaciones.

La secuencia de bits que compone cada carácter la determina la implementación.

  Identificadores: cadena de letras y dígitos, que deben comenzar con una letra.  Si se restringe la longitud se pierde legibilidad

  Operadores: uniformidad de las operaciones aritméticas (estándares)

  Comentarios y uso de blancos (hacen los programas más legibles)

Page 11: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 11/84

11

  Palabra clave y palabra reservada

-  Palabra clave o keyword : tiene un significado dentro de un contexto, puede ser usada por el programador como identificador deotra entidad.

-  Palabra reservada : palabra clave que no puede ser usada por el programador como identificador de otra entidad.

• Ventajas de su uso

 –  favorece expresividad y legibilidad.

• Desambiguar:

 –  Usar palabras reservadas –  Diferenciarlas –  Libre uso y determinar de acuerdo al contexto.

sintaxis y la semántica de un lenguaje? ¿Quiénes se benefician?

sintaxis y la semántica de un lenguaje de programación proporcionan mecanismos para que unapersona o una computadora pueda decir:

lo es, qué significa

• Estructura sintáctica 

 – Vocabulario o words

• Conjunto de caracteres y palabras para construir expresiones, sentencias y programas.  • Las words no son elementales sino que se construyen a partir del alfabeto

 – Expresiones

• Son funciones que devuelven un resultado. • Son bloques sintácticos básicos

 – Sentencias

• Componente sintáctico más importante. • Tiene un fuerte impacto en la facilidad de escritura y legibilidad  • Hay sentencias simples, estructuradas y anidadas. 

Page 12: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 12/84

12

• Reglas léxicas y sintácticas. 

 – Reglas léxicas: Conjunto de reglas para formar las palabras, a partir de los caracteres del alfabeto. – Reglas sintácticas: Conjunto de reglas que definen como formar las “expresiones” y “sentencias”  

• Tipos de Sintaxis

 – ABSTRACTA

• Se refiere a la estructura 

 – CONCRETA

• Se refiere a la parte léxica 

 – PRAGMÁTICA

• Se refiere al uso práctico 

• Cómo definir la sintaxis

 – Se necesita una descripción finita para definir un conjunto infinitoFormas para definir la sintaxis:

• Lenguaje natural (método no formal). Ej.: Fortran• Utilizando la gramática libre de contexto, definida por Backus y Naun: BNF  (método formal). Ej.: Algol• Diagramas sintácticos (son equivalentes a BNF pero mucho más intuitivos)

• Árboles sintácticos 

“Juan el un manta” 

 – No todas las oraciones que se pueden armar con los terminales son válidas –  Se necesita de un Método de análisis (reconocimiento): Parsing. –  El parse, para cada sentencia constr uye un “árbol sintáctico o árbol de derivación” 

Page 13: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 13/84

13

 – Dos maneras de construirlo:• Método botton-up

 – De izquierda a derecha – De derecha a izquierda

• Método top-dow – De izquierda a derecha – De derecha a izquierda

Ejemplo: árbol sintáctico de “oración”. Top-down de izquierda a derecha

• Árbol de derivación: 

 – Ejemplo top-down de izquierda a derecha

• Producciones recursivas: 

 – Regla recursiva por la izquierda

• La asociatividad es por la izquierda • El símbolo no terminal de la par te izquierda de una regla de producción aparece al comienzo de la partederecha

 – Regla recursiva por la derecha

• La asociatividad es por la derecha • El símbolo no terminal de la parte izquierda de una regla de producción aparece al final de la partederecha

Page 14: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 14/84

14

Page 15: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 15/84

15

  SEMÁNTICA

Conjunto de reglas para dar significado a los programas sintácticamente válidos. Este significado puede ser expresado mediante elmapeo de cada construcción del lenguaje en un dominio cuya semántica es conocida. Para proveer una descripción formalcompleta de la semántica del lenguaje, los programas sintácticamente validos son mapeados en dominios matemáticos. Hay otramanera de expresar la semántica de un lenguaje, llamada semántica operacional, que se basa en mostrar los cambios de estado enuna maquina abstracta que ejecuta las construcciones del lenguaje.

La semántica define el significado de los programas sintácticamente válidos en el lenguaje. No todos los programassintácticamente validos tienen significado, por esto la semántica separa los programas que tienen significado de los que no lotienen, estas reglas definen la semántica estática (se chequea antes de la ejecución); al contrario de la semántica dinámica quedescribe el efecto de usar diferentes construcciones del lenguaje. En esos casos los programas pueden ser ejecutados solo si soncorrectos para la sintaxis y para la semántica estática.

Semántica axiomática: ve al programa como una máquina de estados. Las construcciones del lenguaje de programación sonformalizadas describiendo como su ejecución causa un cambio de estado. Un estado es descrito por un predicado lógico de primerorden que define las propiedades de los valores de las variables de programas en este estado. El significado de la construcción dellenguaje es definido por una regla que relaciona el estado anterior y el posterior a la ejecución. Establece precondiciones y poscondiciones para la ejecución de cada sentencia.

Semántica denotacional: asocia cada sentencia del lenguaje con una función que va desde el estado del programa antes de laejecución al estado después de la ejecución. El estado es representado por una función que va desde el conjunto de nombres devariables a los valores.

La diferencia entre estas semánticas está en la forma de definir el estado (predicados contra funciones).

Compare la gramática BNF con el lenguaje natural como mecanismo de definición de la sintaxis de un lenguaje.

El lenguaje natural es un método informal y en consecuencia es no preciso, incompleto; aquí es el implementador el que decidecosas por su cuenta. Se generan dialectos.

En cambio BNF es un método formal, lo que da una implementación más precisa de la sintaxis de un lenguaje. Es una notaciónformal para describir la sintaxis. Es un metalenguaje. Utiliza meta símbolos. Define las reglas por medio de producciones.

Ejemplo:<digito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9..............terminales

meta símbolo

no terminal

La semántica describe el significado de los símbolos, palabras y frases de un lenguaje ya sea lenguaje natural o lenguajeinformático

• Tipos de semántica:

 – Semántica estática – Semántica dinámica

• Semántica estática 

 – está relacionado con las formas validas.

almente sirven las denominadas gramáticas de atributos,inventadas por Knuth en 1968.

• Semántica dinámica. 

de ejecutar las diferentes construcciones en el lenguaje de programación.

sintaxis y para la semántica estática.

Page 16: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 16/84

16

• ¿Cómo se describe la semántica? 

 – No existen herramientas estándar como en el caso de la sintaxis (diagramas sintácticos y BNF) – Soluciones formales:

• Semántica axiomática • Semántica denotacional • Semántica operacional 

• Semántica axiomática

 – La notación empleada es el “cálculo de predicados”.  – Se desarrolló para probar la corrección de los programas. –  Ve al programa como una máquina de estados. –  Los constructores de un lenguajes de programación se formalizan describiendo como su ejecución provoca un

cambio de estado. – Un estado se describe con un predicado que describe los valores de las variables en ese estado – Existe un estado anterior y un estado posterior a la ejecución del constructor. – Cada sentencia se precede y se continúa con una expresión lógica que describe las restricciones y relaciones

entre los datos.

• Precondición • Pos condición

• Semántica denotacional 

 – Se basa en la teoría de funciones recursivas – Se diferencia de la axiomática por la forma que describe los estados, la axiomática lo describe a través de los

predicados, la denotacional a través de funciones. – Se define una correspondencia entre los constructores sintácticos y sus significados

• Semántica Operacional 

 – Describe el significado de un programa ejecutando sus sentencias sobre una máquina abstracta. – Es un intérprete.

 – Los cambios que se producen en el estado de la máquina cuando se ejecuta una sentencia del lenguaje deprogramación definen su significado

 – Es un método informal – Es el más utilizado en los libros de texto – PL/1 fue el primero que la utilizó

Page 17: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 17/84

17

Procesamiento de un lenguaje - Interpretación y traducción

• Las computadoras ejecutan lenguajes de bajo nivel• ¿Cómo los programas escritos en lenguajes de alto nivel pueden ser ejecutados sobre una computadoracuyo lenguaje es de muy bajo nivel?

• Alternativas:  – Interpretación – Traducción

Interpretación

• “Intérprete” programa capaz de leer, analizar, decodificar y ejecutar una a una las sentencias de un programaescrito en un lenguaje de programación.

• Por cada posible acción hay un subprograma que ejecuta esa acción.  • La interpretación se realiza llamando a estos subprogr amas en la secuencia adecuada.

• Un intérprete ejecuta repetidamente la siguiente secuencia de acciones:  

 – Obtiene la próxima sentencia – Determina la acción a ejecutar – Ejecuta la acción

Traducción

Los programas escritos en un lenguaje de alto nivel se traducen a una versión en lenguaje de máquina antes de ser ejecutados.

La traducción lleva varios pasos.Ej.: Pasos que se realizan para traducir un programa escrito en Fortran:

Tipos de traductores:

• Compilador  • Assembler  • Link-editor• Loader

Preprocesador o macro-procesador:

-Procesador o Procesador” 

mplazado por su código cuando se procesen las macros

• Comparación entre Traductor e Intérprete: 

 – Forma de ejecución – Orden ejecución

 – Tiempo de ejecución – Eficiencia – Espacio ocupado – Detección de errores

Page 18: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 18/84

18

• Combinación de ambas técnicas: 

 –  Los compiladores y los interpretes se diferencian en la forma que ellos reportan los errores de ejecución. – Algunos ambientes de programación contienen las dos versiones interpretación y compilación.

• Utilizan el intérprete en la etapa de desarrollo, facilitando el diagnóstico de errores.• Luego que el programa ha sido validado se compila para generar código mas eficiente. 

 – Un programa puede traducirse en un código intermedio que luego se interpretará. – Diferentes soluciones:

• Más cerca de la interpretación• Más cerca de la traducción 

Compiladores

, etc. un solo paso o en dos pasos y en ambos casos cumplen con distintas etapas:

Etapas de compilación:

1- Análisis

 – Hace el análisis a nivel de palabra – Divide el programa en: identificadores, delimitadores, símbolos especiales, números, palabras

clave, delimitadores, comentarios, etc. – Analiza el tipo de cada token – Convierte a representación interna los números en punto fijo o punto flotante – Poner los identificadores en la tabla de símbolos – Remplaza cada símbolo por su entrada en la tabla – ítems léxicos o tokens.

 –  Se identifican las estructuras; sentencias, declaraciones, expresiones, etc. ayudándose con lostokens.

 – El analizador sintáctico se alterna con el análisis semántico. Usualmente se utilizan técnicas

basadas en gramáticas formales. –  Aplica una gramática para construir el árbol sintáctico del programa.

 – Es la más importante – Las estructuras sintácticas reconocidas por el analizador sintáctico son procesadas y la estructura

del código ejecutable toma forma. – Se realiza la comprobación de tipos – Se agrega la información implícita – Se agrega a la tabla de símbolos los descriptores de tipos, etc. a la vez que se hacen consultas

para realizar comprobaciones. – Se hacen las comprobaciones de nombres. Es el nexo entre el análisis y la síntesis

2- Síntesis

• Se construye el programa ejecutable.• Genera el código necesario y se optimiza el programa generado.• Si hay traducción separada de módulos, es en esta etapa cuando se linkedita.• Se realiza el proceso de optimización. Optativo 

(ejemplo)

Posibles optimizaciones locales:Cuando hay dos saltos seguidos se puede quedar uno solo P/E El ejemplo anterior quedaría así:

Page 19: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 19/84

19

  Generación de código intermedio

 – Debe ser fácil de producir – Debe ser fácil de traducir al programa objeto

Ejemplo: Un formato de código intermedio es el código de tres direcciones.Forma: A:= B op C, donde A, B, C son operandos y op es un operador binarioSe permiten condicionales simples y saltos.

Page 20: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 20/84

20

SEMANTICA OPERACIONAL

1. CONCEPTO DE LIGADURA2. VARIABLES3. UNIDADES4. MODELOS DE EJECUCION5. PARAMETROS

1- CONCEPTO DE LIGADURA (binding)

Los programas trabajan con entidadesLas entidades tienen atributosLIGADURA: especificación exacta de la naturaleza de un atributo

DESCRIPTOR: lugar donde se almacenan los Atributos

Momento de Ligadura

Momento y estabilidad

• Una ligadura es estática si se establece antes de la ejecución y no se puede cambiar.• Una ligadura es dinámica si se establece en el momento de la ejecución y puede cambiarse de acuerdo aalguna regla específica del lenguaje.

2- VARIABLES - Concepto

• memoria principal: celdas elementales, identificadas por una dirección.• contenido de una celda: representación codificada de un valor  

<nombre,alcance,tipo,l-value,r-value>

• nombre: string de caracteres que se usa para referenciar a la variable.• alcance: rango de instrucciones en el que se conoce el nombre• tipo: valores y operaciones• l-value: lugar de memoria asociado con la variable (tiempo de vida)• r -value: valor codificado almacenado en la ubicación de la variable

nombre

• Se define en una sentencia llamada declaración.

• Aspectos de diseño: 

 – longitud máxima – conectores – sensitivos – palabra reservada - palabra clave

Page 21: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 21/84

21

Alcance

• rango de instrucciones en el que se conoce el nombre. (visibilidad)  

alcance - momentos

• alcance estático – define el alcance en términos de la estructura léxica del programa.

• alcance dinámico – define el alcance del nombre de la variable en términos de la ejecución del programa.

tipo

• conjunto de valores • conjunto de las operaciones 

Protege a las variables de operaciones no Permitidas

tipos- definición del lenguaje

• Predefinidos • Definidos por el usuario • TADs 

tipos – momentos

L-VALUE

• Área de memoria ligada a la variable • Tiempo de vida (lifetime) o extensión: periodo de tiempo que existe la ligadura por l-valor• Alocación: reservar memoria y ligar ese lugar al l-value

Momentos del l_valor

• Estática: sensible a la historia • Dinámica 

 – Automática – Explícita

• Persistente: 

R-VALUE

• Valor almacenado en el l-valor de la variable• Objeto: (l-valor, r-valor)

momento

• Dinámico: por naturaleza • Constantes: se congela el valor  

r-valor: inicialización

¿Cuál es el r-valor luego de crearse la variable?

 – ignorar el problema – estrategia de inicialización – control de acceso

Page 22: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 22/84

22

Variables anónimas y Referencias

• Algunos lenguajes permiten que el r -valor de una variable sea una referencia al r-valor de otra variable

Alias

• Dos nombres comparten un objeto si sus caminos de acceso conducen al objeto. Un objeto compart ido modificado vía un camino, se modifica para todos los caminos

Durante su tiempo de vida un objeto puede tener más de un nombre, por ejemplo, puede haber varias asociaciones en diferentes ambientes dereferencia, donde cada uno proporciona un nombre distinto para el objeto de datos. Por ejemplo, cuando un objeto de datos se transmite porreferencia como parámetro a una rutina, se puede hacer referencia a él a través de un nombre de parámetro formal en la rutina y tambiénconserva su nombre original en el programa que llama a esa rutina.Alternativamente, un objeto de datos puede convertirse en componente de varios objetos de datos a través de punteros y tener así nombrescompuestos a través de los cuales se puede tener acceso a él. Los nombres múltiples para un mismo objeto de datos son posibles de diversasmaneras en casi todos los lenguajes de programación.Cuando un objeto de datos es visible a través de más de un nombre en un solo ambiente de referencia, cada un de los nombres se conoce comoun alias del objeto. Cuando un objeto tiene más de un nombre pero se utilizan en diferentes ambientes de referencia, no se ocasionan problemas.

Inconvenientes en su uso

Hacer referencia a un mismo dato usando nombres distintos dentro del mismo ambiente plantea problemas tanto para el programador, porquedificulta la comprensión del código y puede introducir errores difíciles de detectar, como para el implementador del lenguaje. La optimizacióndel código puede buscar reordenar los pasos de un cómputo, pero cuando es posible el uso de alias, se debe hacer un análisis adicional paraasegurar que los pasos de cómputo sean independientes.

Ejemplos de alias

  Puede establecerse el alias durante la ejecución de un procedimiento cuando los parámetros se pasan por referencia. Supongamos elsiguiente procedimiento en Pascal, que intercambia los valores de dos variables enteras sin usar variables locales. 

Procedure intercambio (var x, y: integer)Begin

x:=x+y;y:=x-y;x:=x-y

End

Este procedimiento funciona correctamente para aquellos casos en que x es distinto de y, en caso contrario como por ejemplo si loinvocamos así  – > intercambio(a,a), en este caso, el procedimiento pone a cero a a ya que x e y se convierten en alias y así cualquierasignación a x y a y en el mismo procedimiento afecta a la misma posición de memoria. El mismo problema puede derivarse de la llamadaintercambio (b[i], b[j]) cuando i = j.

  Los punteros son generadores de alias: 

var p, q: ^t;.

.new(p);q := p;

Los punteros p y q apuntan al mismo objeto, de esta forma es posible cambiar el valor de p^ con una asignación a q^ y viceversa.

Formas de evitarlo

Hay dos caminos para eliminar el alias, uno consiste en acabar por completo con las características que hacen posible el alias, como punteros, parámetros por referencia, datos globales y matrices. Sin embargo, esto nos llevaría a un lenguaje muy pobre. El otro camino consiste en ponerrestricciones al uso de tales características para excluir la posibilidad de alias.

-  En el caso de los parámetros por referencia el problema solo surgen si los parámetros reales se solapan, entonces si dichos parámetros sonvariables simples, es necesario asegurarse que sean distintas, de esta manera la llamada intercambio(a,a) sería ilegal.Estas formas de alias ilegales pueden detectarse en compilación, sin embargo la llamada intercambio(b[i], b[j]) genera alias solo si i = j, porlo tanto se podrían prohibir tales llamadas, pero el resultado sería un lenguaje torpe y difícil de usar. Sería conveniente que en tal caso elcompilador genere la condición i distinto de j.

-  El manejo de alias en presencia de punteros es más complejo. La detección de alias ilegal entre dos punteros, causados por llamadas a

 procedimientos, es similar al caso de las matrices o vectores. La referenciación que exactamente igual que la indexación de una matriz. Porejemplo, si p y q apuntan a la misma colección y p^ y q^ se pasan ambos como parámetros, para que no haya solapamiento es necesario quese compruebe que p sea distinto de q.

Page 23: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 23/84

23

3- UNIDADES DE PROGRAMA

<nombre,alcance,tipo,l-value,r-value>

nombre: string de caracteres que se usa para invocar a la rutina.alcance: es el rango de instrucciones donde se conoce su nombre.

• Activación: dentro del alcance de la rutina • Ambiente de referencia

 –  local –  no local

• global 

EJEMPLO

Tipo

tipo: tipo de los parámetros

• Signatura: permite especificar el tipo de una rutinaUna rutina fun que tiene como entrada parámetros e tipo T1, T2, Tn y devuelve un valor de tipo R, puede especificarse con lasiguiente signatura

• un llamado a una rutina es correcto si esta de acuerdo al tipo de la rutina.

• la conformidad requiere la correspondencia de tipos entre parámetros formales y reales.  

l-valor / r-valor

• l-value: es el lugar en el que se almacena el cuerpo de la rutina.• r -value: es el código de la rutina que se ejecuta en la invocación

 –  estático –  dinámica

Definición-Declaración

Si el lenguaje distingue entre la declaración y la definición de una rutina permite manejar esquemas de rutinas mutuamente recursivas.

Page 24: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 24/84

24

4- REPRESENTACION EN EJECUCION

• instancia de la unidad: es la representación de la rutina en ejecución. 

Elementos en ejecución

• punto de retorno • ambiente de referencia 

 –  ambiente local –  ambiente no local –  Alias –  Efecto lateral

Rutinas recursivas• Segmento de código: el mismo para todas las instancias de la unidad• Registro de activación: uno nuevo para cada activación

Comunicación entre rutinas

• Ambiente no local • Parámetros 

Rutinas genéricas• las rutinas factorean un segmento de código, que se ejecutará customizada a través de los parámetros.

• rutina genérica: se puede parametrizar  el tipo (C++, Ada)• Una rutina genérica es un molde. 

Alias y sobrecarga

Sobrecarga: un nombre está sobrecargado si:• en un momento, referencia mas de una entidad y

• hay suficiente información para permitir establecer la ligadura univocamente. 

Alias: dos nombres que denotan la misma entidad en el mismo ambiente.

PROCESADOR ABSTRACTO

Memoria de Código: C(y) valor almacenado en la y-ésima celda de la memoria de código. Comienza en ceroMemoria de Datos: D(y) valor almacenado en la y-ésima celda de la memoria de datos. Comienza en cero

Ip: puntero a la instrucción que se esta ejecutando.

Ejecución:• obtener la instrucción actual para ser ejecutada (C[ip])  • incrementar ip • ejecutar la instrucción actual 

PROCESADOR ABSTRACTO-Instrucciones

SET: setea valores en la memoria de datos

set target,sourcecopia el valor representado por source en la dirección representada por target

JUMP: bifurcación incondicionalJUMPT: bifurcación condicional, bifurca si la expresión se evalúa como verdadera

direccionamiento indirecto: set D[10],D[20]

procesador

Page 25: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 25/84

25

Estructuras de ejecución de los lenguajes de programación

Def 3.13 (Lenguaje de modelo estático). El espacio requerido en memoria de datos puede precisarse en tiempo decompilación. Por lo tanto, es posible alocar la memoria necesaria antes de la ejecución. Claramente, un lenguaje estáticono puede permitir la recursión, pues se requiere un número arbitrario de instancias de unidad. Ver lenguajes C1, C2 yC2’. 

ESTATICO: espacio fijo

 –  El espacio necesario para la ejecución se deduce del código –  La alocación puede hacerse estáticamente –  No puede haber recursión

C1: lenguaje simple

Page 26: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 26/84

26

Def 3.14 (Lenguaje de modelo basado en pila). La memoria de datos requerida no puede precisarse en compilación, pero espredecible y respeta un comportamiento LIFO. Las variables declaradas en cierto ´ámbito se alocan en memoria cuandodicho ámbito es alcanzado en ejecución, y se las desaloca cuando se sale de ´el (variables denominadas automáticas). Engeneral, la implementación de estos lenguajes utiliza una pila, pero no es estrictamente parte de la semántica del lenguaje.Ver lenguajes C3 y C4.

BASADO EN PILA: espacio predecible

• el espacio se deduce del código.

• el espacio es predecible 

C3: C2 + recursión y valor de retorno

• rutinas con capacidad de recursión• rutinas con ca pacidad de devolver valores.

• no se sabe cuantas instancias de cada unidad se necesitarán• el compilador puede ligar cada variable con su desplazamiento

• cada nueva invocación aloca un nuevo registro de activación y nuevas ligaduras 

Page 27: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 27/84

27

nuevos elementos:

• current: dirección base del registro de activación de la unidad que se este ejecutando actualmente • free: próxima dirección libre en la pila • link dinámico puntero a la dirección base del registro de activación de la rutina llamadora  • valor de retorno

C3: moldes

Page 28: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 28/84

28

C4: estructura de bloque

• controla el alcance de las variables,• define el tiempo de vida de las variables 

• divide el programa en unidades mas pequeñas. 

C4’: anidamiento vía sentencias compuestas

• bloque: {<lista de declaraciones>;<lista de sentencias>}• las variables tienen alcance local • si hay una nueva declaración de un nombre, la declaración interna enmascara la externa 

C4’: sentencias Compuestas

Page 29: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 29/84

29

C4’’: rutinas anidadas

C4’’ rutinas anidadas acceso al ambiente no-local

C4’’ acceso al ambiente no local 

• link estático: apunta al registro de activación de la unidad que estáticamente la contiene 

Page 30: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 30/84

30

C4’’ acceso al ambiente no local 

Def 3.15 (Lenguaje de modelo dinámico). Estos lenguajes tienen un uso de memoria impredecible. Las variables se alocandinámicamente cuando se lo requiere durante la ejecución (variables dinámicas). Para manejar la memoria libre no existeuna política predefinida (como la LIFO), usualmente se utiliza el termino heap para referirse a la memoria de datos. Ver

lenguaje C5.

DINAMICO: espacio impredecible

• El espacio es impredecible.

• Los datos se alocan dinámicamente durante la ejecución. 

C5: datos más dinámicos

C5’: datos semidinámicos 

• Arreglos dinámicos

type VECTOR is array (INTEGER range <>);

A: VECTOR (0..N);

B: VECTOR(1..M); N y M conocidos cuando se invoca la unidad

implementación: arreglos dinámicos

• COMPILACION: descriptores 

Todos los accesos al arreglo son traducidos como referencias indirectas

Page 31: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 31/84

31

A: VECTOR (0..N);B: VECTOR(1..M);

C5’’: datos dinámicos 

• se alocan explícitamente durante la ejecución

C5’’ 

el tiempo de vida no depende de la sentencia de alocación, vivirá mientras este apuntada

Page 32: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 32/84

32

C6: LENGUAJES dinámicos

• Se trata de aquellos lenguajes que adoptan más reglas dinámicas que estáticas.• Una propiedad dinámica significa que las ligaduras correspondientes se llevan a cabo en ejecución y no en compilación.  

C6: tipado dinámico

• el tipo de una variable no pueden determinarse en compilación.• en el descriptor debe mantenerse

• el descriptor debe almacenarse en la heap • para cada variable se reserva en el registro de activación un puntero  

C6: alcance dinámico

Un programa

• n rutinas  –  variables locales sin definición de tipo

• un main 

• regla de alcance: depende de la cadena dinámica

Page 33: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 33/84

33

RUTINAS

il presente desde los primeros lenguajes ensambladores son las subprogramas, unidades de programacon llamada explicita, que responden al esquema de call/return.

raciones primarias integradas en el

lenguaje

digo.

una instancia de la unidad.

esultados los produce en variables no locales o en parámetros que cambian su valor.

olo producen un valor y no producen efectos laterales.

remplaza a la invocación dentro de la expresión

dor se concentra en cómo trabaja dicho subprograma.

 permanece oculta.definición de un subprograma es un patrón para crear

activaciones durante la ejecución.

incorporado una nueva sentencia a nuestro lenguaje.

Page 34: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 34/84

34

Parámetros

uetes de ADA

 –  ventajas del uso de parámetros

saje de parámetros es el más flexible y permite la transferencia de diferentes datos en cada llamada.

mente lo que se comparte

de ella o un dato no local pero visibleen dicha unidad o una expresión

les locales

Si es una función debe darse el tipo de lo que ser retorna

ego se hace la ligadura antes detransferir el control a la unidad llamada.

stintamente en la lista.En Ada pueden mezclarse ambos métodos.En C++ y en Ada los parámetros formales pueden tener valores por defecto, con lo cual a veces no es necesario listarlos

todos en la invocación.

ama

Hay diferentes formas de transmitir los parámetros hacia y desde el programa llamado.Desde el punto de vista semántico los parámetros formales pueden ser:

al

real

Page 35: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 35/84

35

Por Valor:

inicializar el correspondiente parámetro real al invocar la unidad.

Desventaja: consume el tiempo para hacer la copia y el almacenamiento para duplicar el dato.

Ventaja: protege los datos de la unidad llamadora, el parámetro real no se modifica.

Por valor constante:

al no seamodificado.

Desventaja: requiere realizar mas trabajo para implementar los controles.

Ventaja: protege los datos de la unidad llamadora, el parámetro real no se modifica

Por Resultado:

arámetro formal se copia al parámetro real al terminar de ejecutarse la unidad llamada.

ser diferentes.

Por resultado de funciones:

o de una función puede devolverse con el return como en PL1, C, etc., o como en Pascal en el nombre de la función(ultimo valor asignado) que se considera como una variable local.

Page 36: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 36/84

36

Por Valor/Resultado:

vación de la unidad llamadora.da el

 parámetro real recibe una copia de lo que tiene el parámetro formal.

ámetro formal es una referencia local.

Por Referencia:

iene la dirección en el ambiente no local. parámetro

formal dentro del cuerpo del subprograma quedará registrado en el parámetro real.

Desventajas:

tanto la confiabilidad, hacen muy difícil la verificación de programas.

Ventaja:

Por Nombre:

lece la ligadura entre parámetro formal y parámetro real en el momento de la invocación pero la ligadura de valor se difiere hasta el momento en que se lo utiliza.

Si el dato a compartir es:

una expresión se evalúa cada vez

Page 37: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 37/84

37

Por Nombre (continuación):

a enel cuerpo de la unidad llamado por un invocación a un thunks que en el momento de la ejecución activara al procedimiento queevaluará el parámetro real en el ambiente apropiado.

onfusas para el lector y el escritor.

) solo producir un resultado.

deberían ser siempre modo IN. (no Pascal y C, si ADA)

Ejemplo: AdaPascal y Modula solo permiten escalares

esultado, por referencia

valor (por defecto)

Pero como las variables de tipos no primitivos son todas referencias a variables anónimas en el Heap, el paso por valor deuna de estas variables constituye en realidad un paso por referencia de la variable.

variable no local de tipo primitivo (a través de los parámetros formales), a no ser que dicha variable forme parte de unaestructura mayor (una instancia de una clase) que se pasa por referencia.

Por resultado OUTIN OUT.

-resultado,

arcialmente la posibilidad de efectoslaterales.

Ejemplo: supongamos un subprograma que acepta como parámetro una referencia o puntero a un arreglo de enteros, y cuyo efecto seaordenarlo según un criterio de ordenación, que no siempre es el mismo.Sería natural que el nombre del procedimiento que ordena sea un parámetro.

Ada no contempla los subprogramas como valores. Utiliza unidades genéricas.

Pascal permite que una referencia a un procedimiento sea pasada a un subpograma

C permite pasaje de funciones como parámetros.

Page 38: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 38/84

38

Ambiente de referencia para las referencias no locales dentro del cuerpo del subprograma pasado como parámetro.

 pasadocomo parámetro.

subprograma que tiene el parámetro formalsubprograma.Ejemplo: SNOBOL.

 parámetro real. Se utiliza en los lenguajes con alcance estático y estructura de bloque.

natural.

.

entes queestáticamente no le eran visibles.

en el momento de la invocación a la unidad con parámetro

subprograma además del puntero al código, se indique cual debe ser su ambiente de referencia, es decir un puntero al lugar de la cadena estáticacorrespondiente.

genérica es una unidad que puede instanciarse con parámetros formales de distinto tipo.Como todas las unidades instanciadas tienen el mismo nombre, da la sensación que una unidad pudiera ejecutarse con parámetros dedistinto tipo.

d genérica que ordena elementos de un arreglo, podrá instanciarse para elementos enteros, flotantes, etc.

Page 39: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 39/84

39

  Ejemplos sobre pasaje de parámetros  Ejemplo donde se pone de manifiesto la diferencia entre el pasaje por referencia y por nombre.

Procedure inter (x, y: integer)Var

Temp: integer;Begin

temp:=x;x:= yy:=temp;

End;Si en inter los parámetros se pasan por referencia se realiza un intercambio de variables correctamente ya que se intercambian los valores de lasreferencias de x e y.En cambio si los parámetros son pasados por nombre ante la invocación a inter (i, a(i)) la ejecución quedaría:

Temp:=i;1)  i := a(i);2)  a(i) ;= temp;

 pero aquí a(i) de 1) no será el mismo que a(i) de 2), pues como el valor de i ya fue modificado queda la posición del arreglo sin modificar y semodifica otra. Luego entonces no se intercambian los valores. Esto se da pues los parámetros pasados son un índice y un elemento de un arreglo.

  Ejemplo de pasaje de parámetro por valor-resultado.

 proc (f1, f2)

{ f1 := f1 + 1;f2 := f2 +11;

}

-  Con igual efecto que por referencia.

Call proc (a,b)

En este caso ya sea por valor-resultado o por referencia a a se le va a sumar 1 y a b se le sumará 11. En el pasaje por valor-resultado losvalores se modificarán al terminar el procedimiento y en el caso del pasaje por referencia se modifica en el momento ya que se pasan lasdirecciones de las variables.

-  Con distinto efecto que por referencia.

Call proc(a,a)

Si el pasaje es por valor-resultado. En este caso si a= 0, entonces al entrar a proc en f1 y en f2 se copiarán los valores de a. Luego f1 = 1 yf2 = 12. Al salir de proc a tendrá el valor de 1 u 11 (ver en que orden se copian los parámetros).

Si el pasaje es por referencia a al terminar el procedimiento tendría el valor 12.

  Ejemplo donde se manifiesta la necesidad de tener toda la información que debe ligarse en el caso deparámetros subrutina.

Esto se refiere a la consistencia de tipos, por eso tenemos:

Proc ejemplo (i, j: int; proc f)Var

k:boolean;Begin

K := j < iIf k -> f(k) else f(j)

End;

Así se pueden tener una o dos llamadas incorrectas al parámetro formal f, debido a la inconsistencia de tipos y/o diferencia en el número de parámetros.

En ALGOL 68 en los procedimientos que se pasan por parámetro, se requiere que se especifiquen los tipos (llamados modos) de sus parámetrosy sus valores devueltos. De esta manera puede verificarse la consistencia de tipos estáticamente.

Proc ejemplo (i, j:int; proc f (bool) void f ) voidBegin

If i < j then f (k)else f (j) ---- daría error

end

Page 40: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 40/84

40

  Ejemplo en el que se pone de manifiesto la necesidad de enganchar el ambiente de referencia de unparámetro procedimiento.

El envío de subprogramas como parámetros requiere pasar al menos una referencia al segmento de código del parámetro real. Sin embargo elsubprograma pasado puede acceder también a variables no locales siendo necesario entonces pasar información acerca del entorno no local delsubprograma parámetro real. Hay tres opciones para saber cual es el ambiente correcto de referencia para ejecutar el subprograma pasado como parámetro:

1)  El ambiente del subprograma que llama al subprograma pasado.2)  El ambiente del subprograma en el cual el subprograma pasado está declarado.3)  El ambiente del subprograma que incluye la sentencia de llamado que pasa al subprograma como un parámetro actual.

Procedure sub1;Var X: integer;Procedure sub2;Begin

Write (‘x=’, x); End;Procedure sub3;Var x: integer;Begin

X := 3;sub4 (sub2);

End;

Procedure sub4;Var x: integer;

BeginX := 4;subx;

End;

BeginX := 1;Sub3;

End;

-  Considerando la opción 1) el ambiente de referencia de sub2 es el de sub4.-  Considerando la opción 2) el ambiente de referencia de sub2 es el de sub1.

-  Considerando la opción 3) el ambiente de referencia de sub2 es el de sub3.En los casos en que el subprograma declara un subprograma y además lo paso como parámetros las opciones 2 y 3 son las mismas.

Diferencias y puntos de contacto entre el pasaje de parámetros por nombre y el de procedimientos.

Diferencias

1)  Momento de ligadura: en el pasaje de parámetro por nombre la ligadura se difiere hasta el momento en que se la utiliza. En el pasaje por procedimiento, la ligadura se realiza en el momento de la invocación.

2)  Modo: el pasaje de parámetro por nombre es modo IN/OUT. En parámetro rutina depende del tipo de la rutina (procedimiento o función) yde los tipos de parámetros que estos tienen.

3)  Utilización de procedimientos adicionales: los parámetros por nombre utilizan los thunks y los parámetros rutina no.4)  Información requerida: en el pasaje por nombre se pasa la dirección de memoria del parámetro. En cambio en el caso de parámetros rutina

se pasan los parámetros de la rutina, el ambiente de referencia y el encabezamiento de la rutina y una referencia al segmento de código del

 parámetro real.

Puntos de contacto

En ambos casos se necesitan referencias a otras zonas de memoria, debido al uso de thunks y por las referencias al registro de activación y alsegmento de código. Los dos realizan una llamada a un subprograma.

Comparación entre el llamado a una rutina con una referencia a un elemento del un arreglo.

Supongamos que tenemos la siguiente sintaxis: A(i)

-  Si interpretamos A(i) como la llamada a una rutina, i representaría el parámetro de la misma y A el nombre de la rutina.-  También se puede tomar como que A(i) es la referencia del elemento en la posición i del arreglo A.

El problema de utilizar indistintamente paréntesis para los parámetros de una rutina y la posición de un elemento de un arreglo hace quetengamos una misma sintaxis con diferente semántica y esto atento contra la simplicidad de los lenguajes.Por esta razón algunos lenguajes utilizan el uso de [] para referirse a posiciones de arreglos y () para los parámetros de los módulos.

Page 41: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 41/84

41

  SISTEMAS DE TIPOS

• conjunto de reglas para estructurar y organizar los tipos  • componente semántica fundamental

• captura la naturaleza de los datos de los programas.• un tipo es conjunto de valores y un conjunto de operaciones

• Operaciones: única forma de manipular los objetos instanciados • Un error de tipo se produce cuando se intenta manipular a un objeto con operaciones ilegales• Un programa es seguro en el manejo de tipos si garantiza no tener errores de tipo 

Clasificación de los errores

Chequeo estático de errores

• Es el que se realiza antes de la ejecución: en compilación o en linkedición 

Consistencia entre declaración y llamado de una rutina

• El chequeo estático es preferible al dinámico pero nunca pueden realizarse todos los chequeos estáticos  

a := b/c

Chequeo dinámicos de errores

• el compilador generara el llamado a una rutina que chequeará • hay que ejecutar con datos de entrada• el chequeo dinámico hace mas lenta la ejecución.

• el chequeo dinámico gana en flexibilidad • mantenimiento y manejo de los descriptores 

Tipado fuerte y chequeo de tipos

• El sistema de tipos de un lenguaje se define como el conjunto de reglas

• Las reglas restringen el conjunto de programas legales que se pueden escribir en un lenguaje. • El objetivo de un sistema de tipos es escribir programas seguros. • Un sistema de tipos es fuerte si garantiza la seguridad en el uso de tipos.

Tipado fuerte / débil

• Un lenguaje se dice fuertemente tipado si su sistema de tipos es fuerte. • Si el lenguaje es fuertemente tipado el compilador puede garantizar la ausencia de errores de tipo del programa.

• Un sistema de tipos débil (no fuerte) genera un lenguaje débilmente tipado

Page 42: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 42/84

42

No fuertemente tipados

• Pascal: parámetro procedimiento

No fuertemente tipados

• Pascal: los limites de una dimensión son parte de la definición de la matriz. Sin embar go el acceso a un elementorequiere una comprobación dinámica para saber si correcto.

Algol-68 y Ada los limites no pertenecen al tipo del arreglo, son parte de su valor, por lo tanto los subíndices se ignoran

en traducción y esto no afecta la verificación estática.

COMPATIBILIDAD DE TIPOS

• Ligadura de tipo: antes de poder referenciar un objeto debe tener ligado un tipo  • Chequeo de tipos: El chequeo de tipos es lo que asegura que los operandos y los operadores son de tipo correcto 

• Tipo compatible: reglas semánticas que determinan si el tipo de un objeto es valido en un contexto particular• Un lenguaje debe definir en que contexto el tipo Q es compatible con el tipo T.

• Si el sistema de tipos define la compatibilidad se puede realizar el chequeo de tipos

compatible –  confomable - equivalente

Tipos compatibles

• Equivalencia por nombre: dos variables son del mismo tipo si y solo si están declaradas juntas (no para ADA) o si están

declaradas con el mismo nombre de tipo.

• Equivalencia por estructura: dos variables son del mismo tipo si i los componentes de su tipo son iguales

• Las dos equivalencias son sintácticas y no semánticas, no se da la noción de comportamiento idéntico (TADS) 

• La equivalencia por nombre extiende naturalmente los tipos predefinidos

Page 43: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 43/84

43

• Ada tiene equivalencia por nombre • C tiene equivalencia por salvo para los registros • C++ tiene equivalencia por nombre • Pascal: por estructura salvo los parámetros formales que son por nombre. 

CONVERSIÓN DE TIPO

• un tipo es compatible con otro si –  es equivalente –  se puede convertir

• el compilador genera el código necesario 

• Coerción: significa convertir un valor de un tipo a otro. 

Clasificación de conversiones

Widening (ensanchar): cada valor del dominio tiene su correspondiente valor en el rango

entero a real

 Narrowing (estrechar): cada valor del dominio puede no tener su correspondiente valor en el rango

real a entero

En este caso algunos lenguajes producen un mensaje avisando la pérdida de información

TIPOS DE DATOS• SISTEMA DE TIPOS: conjunto de reglas usadas por un lenguaje para estructurar y organizar sus tipos.

• Componente semántica importante. 

• capturan la naturaleza de los datos del problema que serán manipulados por los programas.  

• los lenguajes de programación se diferencian en la definición y comportamiento de los tipos.

• Operaciones: única forma de manipular los objetos instanciados  • las operaciones protegen a los objetos de usos ilegales  • Tipo: comportamiento abstracto de un conjunto de objetos y un conjunto de operaciones.• Programas: funciones que mapean datos de entrada en datos de salida.  

• Los lenguajes proveen los tipos predefinidos y los constructores.• permiten instanciar o crear objetos de datos. • Constructor es: pueden crearse tipos nuevos• definidos por el usuario: predefinidos y Constructores

Page 44: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 44/84

44

Dominio de un tipoDOMINIO DE UN TIPO: conjunto de valores posibles

• Un literal es una constante cuyo valor esta dado por una secuencia de símbolos. 

• dominio son solamente valores atómicos entonces el tipo es escalar, elemental o primitivo.

• Si los valores del dominio están compuestos por un conjunto de datos entonces el tipo es estructurado o

compuesto

TIPOS PREDEFINIDOS

hard subyacente y son una abstracción de él.

acuerdo al tipo al que pertenezcan.

Propiedades de los tipos predefinidos

• mecanismo de clasificación de los datos manejados por un lenguaje

• son la forma de proteger a los datos contra usos indebidos• instanciar un tipo para crear un dato indica cuales son las operaciones que legalmente pueden aplicársele. 

• Las ventajas de los tipos predefinidos son:

 –  Invisibilidad de la representación –  Verificación estática –  Desambiaguar operadores –  Control de precisión

Invisibilidad de la representación

• El programador no tiene acceso al string de bits subyacente que representa un valor de un cierto tipo.

• Los cambios no se ven como un nuevo string, sino como un nuevo valor  

• Estilo de programación:

• Modificabilidad 

Verificación estática

• Si el lenguaje exige la declaración de variables, entonces las operaciones ilegales sobre una variable pueden serdetectadas por el traductor

Desambiguar operadores

• Operadores polimórficos - genéricos -o sobrecargados• uso moderado de la sobrecarga puede contribuir a la simplicidad de unLenguaje de Programación.• uso excesivo de la sobrecarga puede generar programas que sean difíciles de entender

Control de precisión

algunos lenguajes permiten controlar la precisión de los datos numéricos.

• ADA. Enteros: shortinteger,integer ,large integer  • optimización de espacio para el traductor• insertar chequeos en tiempo de ejecución para monitorear los valores de las variables.  

Page 45: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 45/84

45

TIPOS PREDEFINIDOS ELEMENTALES

NUMEROS: CONVERSIONES

Capacidad de adecuar los tipos cuando están mezclados.* Por tabla* Por el tipo del resultado: examinar la expresión determinando el tipo del resultado y convirtiendo todo a ese tipo.* Prefijo de tipo: se convierte al tipo indicado. Pedido de conversión explícito

BOOLEANOS

CARACTERES- STRING

Es el tipo que mas ha evolucionado

• Fortran y Algol.60 apenas considerados• PL/1: tipo string de caracteres y operaciones de manipulación • Pascal: char y string como vectores de char con un máximo de longitud fija.

SNOBOL4 es un lenguaje especializado en el manejo de texto.• Modula y C los str ing son arreglos de char

Page 46: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 46/84

46

TIPOS DEFINIDOS POR EL USUARIO

MECANISMOS DE TIPADO

• es la facilidad de definir nuevos tipos e instanciarlos

• separa la especificación de la implementación.

• se definen los tipos que el problema necesita. 

* Legibilidad* Modificabilidad* Factorización

La instanciación de los objetos en un tipo dado implica una descripción abstracta de sus valores. Los detalles de laimplementación solo quedan en la definición del tipo

ELEMENTALES: ENUMERADOS

• DOMINIO: lista de constantes simbólicas• OPERACIONES: comparación, asignación y posición en la lista

ENUMERDOS - SUBRANGOS

• Dominio: subconjunto de un tipo enter o o de un enumerado• Operaciones: hereda las operaciones del tipo original. 

• Chequeo dinámico 

COMPUESTOS –  CONSTRUCTORES

• Constructores: mecanismo que proveen los lenguajes para agrupar datos denominados compuestos 

• Dato compuesto:  –   nombre único –  componente accesible a través de un mecanismo de selección. –  posibilidad de manipular conjunto completo.

• Tipo compuesto: nuevos tipos definidos por el usuario usando los constructores • Rutinas: constructores que permiten combinar instrucciones elementales para formar un nuevo operador.

• Definición de Constructores como modelos matemáticos (abstracta)

 –  definición –  método de acceso –  operaciones de campos –  operaciones de tipo –  inicialización de los campos

• PRODUCTO CARTESIANO • CORRESPO NDENCIA FINITA• UNION • RECURSION 

PRODUCTO CARTESIANO

Page 47: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 47/84

47

• distintos tipos agrupados que se tratan como una unidad.  

REGISTROS

los tipos elementales ocultan su representación al usuario del objeto.• los tipos estructurados no la ocultan completamente• el nuevo tipo tiene acceso a las operaciones asociadas con los tipos constitutivos.

• son nuevos tipos con descripción de estructura sin operaciones asociadas.  

CORRESPONDENCIA FINITA

•Rutina: su definición es la regla de asociación de valores del tipo DT en valores del tipo RT.definición intencional: queespecifica una regla (la intención) en lugar de una asociación individual

•Arreglos: definición extensional, los valores de la función son explícitamente enumerados 

Características a tener en cuenta:

1.  Sintaxis para nombrar los elementos2.  Dominio posible3.  Limites de cada índice4.  Rango posible5.  Formas de slicing6.  Inicialización7.  Operaciones de tipo

1. Sintaxis para nombrar los elementos

Los subíndices pueden ir entre () o []*elemento de la fila 3 columna 5de una matriz ?

• A(3,5)• A[3,5] 

Page 48: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 48/84

48

2. Dominio posible

• Fortran: constantes enteras

DIMENSION A(100), B(10,10)SUBROUTINE SORT (A,N)DIMENSION A(N)

• Pascal: enumerado o subrango

var x: array [2..5] of integertype colores = (rojo,verde,azul,amarillo)

type vec_color = array(colores) of integervar v_color:vec_color

• ADA: subconjunto de enteros 

X: array (INTEGER rango 2..6) of INTEGER := (0,2,0,5,-33);Arreglos no rectangulares

• SNOBOL4: tipos dinámicos -los elementos del dominio o el rango no tienen que ser del mismo tipo.

-el dominio y el rango pueden verse como la unión de todos los tipos

• Algol-68

3. Límites de cada índice

Como ligar el dominio un subconjunto específico de un tipo dado?

• ligadura en compilación

• ligadura en la creación del objeto:

• ligadura en la manipulación del objeto 

4. Rango posible

• En general el rango puede ser cualquier tipo permitido en el lenguaje 

5.  Formas de slicing

Slicing: los índices pueden seleccionar tajadas del arreglo

PL/1,. APL, Algol.68 y ADA.

X: array (INTEGER rango 1..6) of INTEGER

X(3..5) referencia los elementos, 3,4 y 5 slicing de X

6.  Inicialización

Los lenguajes pueden permitir inicializaciones, lo proveyendo un mecanismo para construir valores constantesde un tipo compuesto.

• ADA

LIST array (1..5) of INTEGER := (1,3,4,5,6)LIST2 array (1..5) of INTEGER:=(1=>,3,2=>4,others=>0)

• C 

char digits[5] = {‘a’,’b’,’c’,’c’,’e’} 

Page 49: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 49/84

49

7.  Operaciones de tipo

UNION y UNION DISCRIMINADA

diferentes tipos en distinto momento de la ejecución

• FORTRAN 

EQUIVALENCE A,B

• COBOL y PL/1 REDEFINES

• Cunion - union discriminada

• Pascal: registro con variante

• ADA: variantes restringidas

• ALGOL: unión discriminada seguraunión discriminada agrega un discriminante para indicar la opción elegida.

Si tenemos la unión discriminada de dos conjuntos S y T, y aplicamos el discriminante a unelemento e perteneciente a la unión discriminada devolverá S o T.

RECURSION

define datos agrupados: –  cuyo tamaño puede crecer arbitrariamente –  cuya estructura puede ser arbitrariamente compleja.

IMPLEMENTACIÓN

• Los lenguajes de programación convencionales soportan la implementación de los tipos de datos

recursivos a través de los punteros.• Los lenguajes funcionales proveen mecanismos mas abstractos que enmascaran a los punteros  

Page 50: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 50/84

50

PUNTEROS

• Un puntero es una referencia a un objeto. • Una variable puntero es una variable cuyo r -valor es una referencia a un objeto.

VALORES:- direcciones de memoria- valor nulo (no asignado) dirección no valida

OPERACIONES (l-valor r-valor r-valor de la variable apuntada)

asignación de valor: generalmente asociado a la alocación de la variable apuntada

referencias

-a su valor (dirección) operaciones entre punteros-al valor de la variable apuntada: dereferenciación implícita

INSEGURIDAD DE LOS PUNTEROS

1. violación de tipos2. referencias sueltas - referencias dangling3. liberación de memoria: objetos perdidos4. punteros no inicializados5. punteros y uniones discriminadas6. alias

1 - Violación de tipos

2- Punteros sueltos

• Si este objeto no esta alocado se dice que el puntero es peligroso (dangling).  

• Una referencia suelta o dangling es un puntero que contiene una dirección de una variable dinámica que fuedesalocada. Si luego se usa el puntero producirá error.

Page 51: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 51/84

51

3. Liberación de memoria: objetos perdidos

• los objetos (apuntados) que se alocan a través de la primitiva new son alocados en la heap• La memoria disponible (heap) puede agotarse• si los objetos en el heap dejan de ser accesibles (objeto perdido) esa memoria podria liberarse 

Implícita: garbage collector

• El sistema, dinámicamente, tomará la decisión de descubrir la basura por medio de una algoritmo derecolección de basura. garbage collector.• LISP

• En Algol-68 y Simula 67• Eiffel y Java • ADA 

4. Punteros no inicializados

• Peligro de acceso descontrolado a posiciones de memoria

• Verificación dinámica de la inicialización

Solución:

• valor especial nulo: nil en Pascal 

void en C/C++null en ADA

5 - Punteros y unión discriminada: C

En el caso de C, este es el mismo efecto que causa la aritmética de punteros.Para resolver este problema asociado con los punteros Java elimina la noción de puntero explicito

completamente.

6 –  Alias

Page 52: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 52/84

52

TADS

EL ROL DE LA ABSTRACCION

• mecanismo para manejar la complejidad • descubrir características esenciales y suprimir las que no lo son.

• principio básico de la abstracción: información oculta.

Evolución hacia el concepto de TAD

• lenguajes de máquina: datos como cadenas de bits

• primeros lenguajes de alto nivel: entero, real, lógico• PL/1 muchas abstracciones predefinidas.• Algol-68, Pascal y Simula-67 se puede definir nuevas abstracciones.

Con que definirlos?

los tipos de datos predefinidos son abstracciones de datos.

• mecanismo para crear  • mecanismo para manipular• Tipo abstracto de dato (TAD) es el que satisface:  

1- Encapsulamiento2- Ocultamiento de la información

ESPECIFICACION

IMPLEMENTACION

Page 53: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 53/84

53

Instanciacion de una pila

with PILAprocedure USAR

pil:PILAy: INTEGER……….. pil.PUSH (pil,y)

End USAR

Ventajas de tads

• legibilidad • modificabilidad • portabilidad • integridad de los objetos

• OBJETIVO: escribir programas dependiendo solo de las propiedades abstractas de los bjetos de dato.  

ABSTRACCIONES DE DATOS GENERICAS

• tipo abstracto genérico atributo de tipo como un parámetro.

 –  tipos especializados derivados del mismo tipo.

Page 54: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 54/84

54

Compatibilidad de tipos

• Tipo compatible: reglas semánticas que determinan si el tipo de un objeto es valido en un contexto particular  • Un lenguaje debe definir en que contexto el tipo Q es compatible con el tipo T.

• Si el sistema de tipos define la compatibilidad

Tipos compatibles

• Equivalencia por nombre: dos variables son del mismo tipo si y solo si están declaradas juntas (no para ADA)

o si están declaradas con el mismo nombre de tipo.

• Equivalencia por estructura: dos variables son del mismo tipo si i los componentes de su tipo son iguales

CONVERSIÓN DE TIPO

• un tipo es compatible con otro si   –  es equivalente –  se puede convertir

• Coerción: significa convertir un valor de un tipo a otro.  

Clasificación de conversiones

• Widening (ensanchar): cada valor del dominio tiene su correspondiente valor en el rango

• Narrowing (estrechar): cada valor del dominio puede no tener su correspondiente valor en el rango  

Page 55: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 55/84

55

Sentencias de Control

Estructuras de control

Son el medio por el cual los programadores pueden determinar el flujo de ejecución entre los componentes de unprograma

Hay dos tipos de niveles:o   A NIVEL DE SENTENCIAS:

Cuando el flujo de control se pasa entre unidades.Intervienen los pasajes de parámetros.

o   A NIVEL DE UNIDADSECUENCIASELECCIÓNITERACION

Secuencia

Es el flujo de control más simple.Indica la ejecución de una sentencia a continuación de otra.

Delimitadores

  Pascal tiene como delimitador al punto y coma (;).  Smalltalk tiene por delimitados al punto ( . ).  Fortran permite solo una instrucción por línea. En consecuencia el delimitador seria el retorno de

carro o enter.

Sentencias compuestas

La sentencia compuesta es una abstracción en una sentencia de una colección desentencias. Generalmente están compuestas por un par de delimitadores y una secuencia,

y no todos los lenguajes la implementan de la misma manera.  Pascal, Algol : <instrucción _ compuesta>= Begin <secuencia -instrucción> end  C, C++: <instrucción _ compuesta>= {secuencias _ instrucción}   Ada (bloque): <instrucción _ compuesta> = declare <sec_declaracion> Begin

<secuencia_instrucción> end;

Distinción entre sentencia de asignación y expresión

• En cualquier lenguaje convencional, ej. Pascal, existe diferencia entre sentencia de asignación yexpresión• En otros lenguajes tales como C definen la sentencia de asignación, como una expresión con efectoslaterales.

• Las sentencias de asignación devuelven valores.• Evalúa de derecha a izquierda 

Ejemplo a=b=c=0;• La mayoría de los lenguajes de programación requieren que sobre el lado izquierdo de la asignaciónaparezca unl-valor. C permite cualquier expresión que denote un l-valor. Ej.: ++ p = *q;En Pascal:

 A:=BLa evaluación seria:

1-  Se resuelve la ecuación de la derecha (en este caso es el valor contenido en b)2-  Se guarda el valor resultado en la posición de memoria correspondiente a la

variable a.

Page 56: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 56/84

56

En C

 A=BLa evaluación seria:

1-  Se resuelve la ecuación de la derecha(en este caso es el valor contenido en b)2-  Se guarda el valor resultado en la posición de memoria correspondiente a la

variable a.3-  Se retorna el resultado de la asignación, que es el valor de b. En este caso no

ocurre nada, pero si tuviéramos “x=a=b” esto asignaría también el valor de b a x

Selección

Esta estructura de control permite que el programador pueda expresar una elección entre un cierto númeroposible de sentencias alternativa.

Evolución de IF

  FORTRAM:If  (condición lógica) sentenciaSi la condición es verdadera ejecuta la sentencia

   ALGOL:If  (condición lógica) then sentencia1

else sentencia2Este permite tomar dos caminos posibles. El problema que tiene es que es ambiguo, ya que no seestablece a quien corresponde el ultimo else, con los if abierto.

  PASCAL, C , PL/IIF THEN ELSE

 No es ambiguo pues el lenguaje establece que el ultimo else corresponde al ultimo if abierto.Tiene el problema que pude ser ilegible cuando posee muchos if anidados.

Utiliza Begin y End.

   ADA Y ALGOL 68 IF THEN ELSE FI. Incorporo la cláusula que cierra los if, la cual es el fi.

 Ambos lenguajes permiten el ELIF que reemplaza al ELSE IF.

Selección múltiples

  PASCAL: Incorpora que los valores de la expresión sean Ordinales y ramas con etiquetas. No importan el orden en que aparecen las ramas.Es inseguro porque no establece qué sucede cuando un valor no cae dentro de lasalternativas puestas.

   ADA: Combina los aspectos positivos del Pascal y de Algol68.

Las expresiones pueden ser de tipo entero o enumeración.Se debe estipular en las selecciones todos los valores posibles que puede tomar laexpresión.Tiene la cláusula Others que se puede utilizar para representar a aquellos valores que no seespecificaron explícitamente.

Si en la sentencia no se coloca la rama para un posible valor y no aparece la opción Others, no pasará la compilación.

Case Operador iswhen ´+´ => result:= a + b;when ´-´ => result:= a - b;when others => result:= a * b;

end; 

  PL/I: incorpora la sentencia de selección entre dos o más opciones

Page 57: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 57/84

57

Select

when(A) sentencia1;

when(B) sentencia2;............

Otherwise sentencia n;End;

Reemplazaría a los If anidados

   ALGOL 68: La expresión debe ser de tipo enteraLa rama i-ésima corresponde se ejecuta cuando la expresión da el valor i.Tiene una cláusula opcional Out que se ejecuta cuando el valor dado por la expresión noestá expresado en el conjunto de valores.Si no se coloca se ejecuta por defecto Out y Skip. La sentencia Skip es una sentencia nula. 

  C , C++: Para múltiple selección provee el constructor Switch.Cada rama es etiquetada por uno o más valores constantes.Cuando se coincide con una etiqueta del Switch se ejecutan las sentencias asociadas y secontinúa con las sentencias de las otras entradas.Existe la sentencia break , que provoca la salida del switch.

Tiene una cláusula default que sirve para los casos que el valor no coincida conninguna de las opciones establecidas. Esta opción es optativa y si no está, yninguno de los casos coincide, no se toma ninguna acción.

Switch Operador {case ´+´ :result:= a + b; break;

case ´-´: result:= a - b; break;

default : result:= a * b; }

Diferencias entre C y Pascal:  C en el caso que no coincida el valor de la expresión con alguna de las alternativas no hace nada o

utiliza la cláusula default si apareciera. Pascal no tiene definido que es lo que debe hacer.

  C tiene el break para salir de la ejecución, Pascal no.  La manera de ejecutar es diferente, Pascal ejecuta las sentencias que corresponden a la alternativa y

sale, en cambio C comienza a ejecutar a partir de donde coincide el valor y continua en orden secuencialhasta el final o hasta un break, pasando por todas las alternativas.

Diferencias entre C y Ada:   Ambos pueden contemplar los valores que no aparecen con las cláusulas default  y others 

respectivamente.  La manera de ejecutar es diferente, ya que Ada ejecuta de la misma forma que Pascal.

En el lenguaje C tenemos la sentencia “switch”, la cual difiere de Pascal y Ada en que al machear en unaetiqueta, se ejecutarán las acciones de la misma y las de las posteriores hasta el final del switch; es decir,

desde la etiqueta válida en adelante.Se puede hacer que el switch funcione de manera similar que en PASCAL o ADA, incluyendo la sentenciabreack al final de cada caso posible, con lo cual al entrar en un caso, al llegar al breack se saltarán todos loscasos posteriores, yendo al final del switch.

Page 58: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 58/84

58

Iteración

Este tipo de instrucciones se utilizan para representar aquellas acciones que se repiten un

cierto número de veces.   FORTRAM :

Sentencia Do de FortranDo  label var-de-control= valor1, valor2

...........Label continue

-> La variable de control solo puede tomar valores enteros-> El Fortran original evaluaba si la variable de control había llegado al límite al final del bucle, osea que siempre una vez lo ejecutaba.

   Algol 68(FOR): no permite que se toque el valor de la variable de control, pero sí los valores delos límites superior e inferior, porque los evalúa en el comienzo. Además el alcance de la variablede control es solo en el bucle.

  Pascal no permite que se toquen ni los valores del límite inferior y superior, ni el valor de lavariable de control.

La variable de control puede ser de cualquier valor ordinal.

El valor de la variable fuera del bloque se asume indefinido.   Ada: encierra todo proceso iterativo entre las cláusulas loop y end loop.Permite el uso de la sentencia Exit para salir del loop y la variable de control NO necesitadeclararse, se declara implícitamente cuando se entra al bucle y desaparece cuando se sale de

él.

  C, C++ se compone de tres partes: una inicialización y dos expresiones.La primer expresión (2do. Parámetro) es el testeo que se realiza ANTES de cada iteración. Si nose coloca el for queda en LOOP.En el primer y último parámetro se pueden colocar sentencias separadas por comas.

Problemas que pueden generarse con los “if anidados”. Soluciones. 

Uno de los problemas que pueden presentarse es el de la ambiguedad.

If cond1 then if cond2 then s1 else s2

En este caso no se puede determinar si el else corresponde al primer o al segundo if.Una solución podría ser la que plantearon Pascal y C, establecer por lenguaje que cada else cierra con elúltimo if abierto. La desventaja de esta solución es la ilegibilidad ya que un programa con muchos if anidadosse hace más difícil de leer.Otra solución podría ser utilizar begin-end como delimitadores de bloques.

 Algol 68 no resuelve el tema del if then else de la misma manera que Pascal, sino que implementa un if thenelse con ligeras modificaciones, de tal manera que se diferencia a que if pertenece un determinado else.

If cond1 then s1 fiIf cond2 tehn s2 else s3 fi

Page 59: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 59/84

59

Estructuras de Control

• Son el medio por el cual los programadores pueden determinar el flujo de ejecución entre

los componentes de un programa

A Nivel de Unidad: Cuando el flujo de control se pasa entre unidades. Intervienen los pasajesde parámetros.

A Nivel de Sentencia: Se dividen en tres grupos

Secuencia

• Es el flujo de control más simple. • Indica la ejecución de una sentencia a continuación de otra. • El delimitador más general y más usado es el “ ; ”. • Hay lenguajes que no tienen delimitador y establecen que por cada línea vaya unainstrucción. Se los llaman orientados a línea. Ej: Fortran, Basic, Python, etc.• Se pueden agrupar sentencias en una, llamada sentencia compuesta, llevan

delimitadores como Begin y End. Ej: Algol, Pascal, { y } en C, C++, etc.Sentencia de Asignación

• Sentencia que produce cambios en los datos de la memoria. • Asigna al l-valor de un dato objeto el r-valor de una expresión.• Sintaxis en diferentes lenguajes 

Distinción en entre sentencia y expresión

• En cualquier lenguaje convencional, ej. Pascal, existe diferencia entre sentencia de asignación y expresión • En otros lenguajes tales como C definen la sentencia de asignación, como una expresión con efectos laterales.  • Las sentencias de asignación devuelven valores.• Evalúa de derecha a izquierda Ejemplo a=b=c=0;• La mayoría de los lenguajes de programación requieren que sobre el lado izquierdo de la asignación

aparezca un l-valor. C permite cualquier expresión que denote un l-valor. Ej.: ++ p = *q;(i<j?z:y)=4;

Selección

• Esta estructura de control permite que el programador pueda expresar una elección entre un cierto

número posible de sentencias alternativa

• Evolución: 

 If lógico de Fortran

If (condición lógica) sentencia

Si la condición es verdadera ejecuta la sentencia

Page 60: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 60/84

60

if then else de Algol

if (condición lógica) then sentencia1else sentencia2

Este permite tomar dos caminos posibles

Problemas: Ambigüedad, no establecía por lenguaje cómo se asociaban los else con los If abiertos.

 if then else de Pl/1, Pascal y C sin ambigüedad

Establecen por lenguaje que cada else cierra con el último if abierto.

Desventajas: Ilegibilidad, programas con muchos if anidados pueden ser ilegibles. Utilizar BeginEnd.

Page 61: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 61/84

61

 En otros lenguajes

La expresión debe ser de tipo enteraLa rama i-ésima corresponde se ejecuta cuando la expresión da el valor i.Tiene una cláusula opcional Out que se ejecuta cuando el valor dado por la expresión no estáexpresado en el conjunto de valoresSi no se coloca se ejecuta por defecto Out y Skip. La sentencia Skip es una sentencia nula.

Incorpora que los valores de la expresión sean ordinales y ramas con etiquetas. No importan elorden en que aparecen las ramas.

Es inseguro porque no establece qué sucede cuando un valor no cae dentro de las alternativas puestas

Combina los aspectos positivos del Pascal y de Algol68

• Las expresiones pueden ser de tipo entero o enumeración • En las selecciones se debe estipular todos los valores posibles que puede tomar la expresión• Tiene la cláusula Others que se puede utilizar para representar a aquellos valores que no se

especificaron explícitamente

Si NO se coloca la rama para un posible valor o si NO aparece la opción Others en esos casos, no

 pasará la compilación.

• Para múltiple selección provee el constructor Switch • Cada rama es etiquetada por uno o más valores constantes • Cuando se coincide con una etiqueta del Switch se ejecutan las sentencias asociadas y se continúa

con las sentencias de las otras entradas.• Existe la sentencia break, que provoca la salida • Tiene una cláusula default que sirve para los casos que el valor no coincida con ninguna de las

opciones establecidas

Page 62: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 62/84

62

Sentencia For de Pascal, Algol 68, ADA, C , C++

ariable de control puede tomar cualquier valor ordinal, no solo enteros

control.La variable de control puede ser de cualquier valor ordinal.El valor de la variable fuera del bloque se asume indefinida

inferior, porque los evalúa en el comienzo. Además el alcance de la variable de control es solo en el bucle.

y end loop. Permite el uso de la sentencia Exit parasalir del loop y la variable de control NO necesita declararse, se declaraimplícitamente cuando se entra al bucle y desaparece cuando se sale de él

Page 63: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 63/84

63

La primera expresión (2do Parámetro) es el testeo que se realiza ANTES de cada iteración. Si no secoloca el for queda en LOOP.

En el primer y último parámetro se pueden colocar sentencias separadas por comas

Otras sentencias iterativas: while y until

 while

La condición se evalúa antes de que se entre al proceso

- En Pascal:

while condición do sentencia;

- En C, C++:

while (condición) sentencia;

- En ADA:

while sentenciaend loop;

Page 64: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 64/84

64

- En Phyton:

while condición :sentencia1sentencia2

Until

- En Pascal:

repeatsentenciauntil condición;

- En C, C++:

do sentencia;while (condición);

Otra sentencia iterativa Ada tiene una estructura iterativa

loop...

end loop;

De este bucle se sale normalmente, mediante una sentencia "exit when" o con una alternativa que contenga unacláusula "exit".

loop...

exit when condición;...

end loop;

Page 65: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 65/84

65

ExcepcionesDefinición de ExcepciónEs un estado de un proceso anómalo. Se da cuando una unidad está incapacitada para proceder de una manera talque se llegue a una terminación normal.La incapacidad del programa para detectar estados anómalos de proceso y manejarlos de la forma apropiada,

 puede producir un software que trabaje solo bajo ciertas circunstancias, o sea un software no tolerante a

fallos.

Definición de ManejadorRealiza un procesamiento especial requerido cuando se detecta una excepción. Una excepción se levanta cuandoocurre un evento asociado y en ese momento se llama al manejador que lo resuelve.

Modelos de Excepciones

-  Reasunción: se maneja la excepción y se devuelve el control al punto siguiente donde se invoco laexcepción, permitiendo la continuación de ejecución de la unidad.

-  Terminación: se termina la ejecución que alcanza la excepción y se transfiere el control al manejador.

Diferencias entre el MANEJO DE EXCECPIONES y el esquema CALL-RETURN

Una unidad no es, en ningún caso, una parte del programa independiente ni autosuficiente. En caso de que sea unsubprograma, se lo puede activar mediante una llamada realizada por otra unidad, a la que se le devolverá el controldespués de la ejecución. Por lo tanto, el punto de retorno no es una información que se debe preservar en el registrode activación cuando se hace la llamada al subprograma.

Para explicar las diferencias tenemos el siguiente ejemplo:

U1 U2. .

. .

. .raise excepción() U3 “call return” .. *.

Una unidad U1 levanta una excepción Excecpcion(), la cual implícitamente llama a un manejador que se ejecuta, ydependiendo del modelo del manejo de excepción; si es por reasunción, se devuelve el control a la siguienteinstrucción donde se produjo la excepción. En cambio, si es por terminación, se aborta la ejecución de U1.

En la unidad U2, se hace un llamado explícito a la unidad U3, la cual se ejecuta, y luego devuelve el controla la instrucción siguiente a su llamado.

Page 66: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 66/84

66

Excepciones en los diferentes lenguajes

C#

Criterio de TerminaciónTerminación.

Lanzamiento de ExcepciónTHROW <ObjentoExcepcionALanzar>Ej: throw New DivideByZeroException()

Captura de la ExcepciónSi se desea tratar a la excepción hay que encerrar la operación dentro de una instrucción TRY.Una vez lanzada la excepción es posible escribir código que se encargue de tratarla. Por defecto si este código no seescribe la excepción provoca que la aplicación aborte mostrando un mensaje de error en el que se describe laexcepción producida y donde se ha producido.

Estructura

Try<instrucciones>catch (<excepcion1>)

<tratamiento1>catch (<excepcion2>)

<tratamiento2>finally

<instuccionesFinally>

Propagación de Errores

-  Si durante la ejecución las <instrucciones> se lanza una excepción de tipo <excepcion1> se ejecuta lasinstrucciones <tratamiento1>, si fuera de tipo <excepcion2 >se ejecuta las instrucciones <tratamiento2>,y así hasta que se encuentre una cláusula catch que pueda tratar la excepción producida.

-  Si no se encuentra ninguna cláusula catch y la instrucción TRY estuviese anidada dentro de otra, semiraría en el catch de su try padre y se repetiría el proceso.

-  Si al final se recorren todos los trys padres y no se encuentra ningún catch compatible, entonces se buscaría en el código desde el que se llamo al método que produce la excepción.

-  Si así se termina llegando al método que inicio el hilo donde se produce la excepción y tampoco allí seencuentra ningún tratamiento apropiado se aborta dicho hilo y si ese hilo es el principal se aborta el

 programa y se muestra el mensaje de error con información sobre la excepción lanzada ya vista.-  Cuando en <instrucciones> se lance una excepción que sea tratada por el catch de algún try (ya sea suyo

de del try padre), SE SEGUIRA EJECUTANDO A PARTIR DE LA INSTRUCCIÓN SIGUIENTE AESE TRY.

BLOQUE FINALLY

Es opcional, y si se incluye has de hacerlo tras todos los bloques catch.Las <instruccionesFinally> de ese bloque se ejecutaran tanto si se producen excepciones en <instrucciones>como si no.

Si no se produce una excepción en <instrucciones>, se ejecutara la <instrucciónFinally> después de haber

ejecutado todas las <instrucciones>.Si se produce una excepción se ejecutara la <instrucciónFinally> después de tratar la excepción pero antesde seguir ejecutando por la instrucción siguiente al Try que la trato. Si en un try no se encuentra un catch

Page 67: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 67/84

67

compatible, antes de pasar a buscar en su try padre o en su método llamante padre se ejecutaran las<instruccionesFinally>.Solo si dentro de un bloque finally se lanza una excepción se ABORTA la ejecución del mismo. Dichaexcepción seria propagada al try o al método llamante padre del try que contuviera el finally.

 Aunque los bloques catch y finally son opcionales, toda instrucción try ha de incluir al menos un bloque catch o unbloque finally.

Relevantar la Excepción

Respecto al uso de TROW, hay que señalar que hay una forma extra de usarlo que solo es valida dentro del código de tratamiento de la excepción(código <tratamiento i > de la cláusula catch). Esta forma consiste en seguir simplemente esta sintaxis:

TROW;En este caso lo que se hace es relanzar la misma excepción que se capturo en el bloque catch dentro de cuyocódigo de tratamiento se usa el thow;. Hay que precisar que la excepción relanzada es precisamente lacapturada, y aunque en el bloque catch se la modifique a través de las variables que la representa, la versiónrelanzada será la versión original de la misma y no la modificada.Además cuando se relanza una excepción en un try con cláusula finally, antes de pasar a reprocesar laexcepción en el try padre del que la lanzó se ejecutara dicha cláusula.

Derivación de la Clase System Excepción

La clase System Exception es el tipo base de todas las excepciones

Esta clase tiene algunas propiedades que todas las excepciones comparten.Message: Es una propiedad de solo lectura que tiene una legible descripción de la razón de la excepción.Inner Exception: Es una propiedad de solo lectura que contiene el inner excepción para una excepción. Si noes null, indica que la corriente excepción fue levantada en respuesta a otra excepción. Las excepciones queocasionan la excepción corriente esta disponible en la propiedad Inner Exception.

JAVA

Criterio de TerminaciónTerminación.

Lanzamiento de ExcepciónTHROW ObjentoExcepcion;donde: objetoExcepcion es un objeto de una clase que se extiende de la clase Exception.Ej: void MetodoAsesino ( ) THROW NullPointerException,CaidaExceptionSe pueden definen excepciones propias, extendiendo la clase Exception y proporcionando la función extra querequiere el tratamiento de esa excepción. También pueden producirse no de forma explícita como en el caso anterior,sino de forma implícita cuando se realiza alguna acción ilegal o no valida.

Captura de la ExcepciónLas excepciones lanzadas por un método que pueda hacerlo deben recogerse en bloque Try/catch oTry/finally.

Page 68: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 68/84

68

Estructura

Try {

<instrucciones> }catch (<excepcion1>)

{ <tratamiento1>}catch (<excepcion2>){

<tratamiento2>}

finally{<instuccionesFinally>}

Observación: en el código catch tenemos que asegurarnos de poner código que no genere excepciones.

Propagación de ErroresIgual que C#.

Excepciones Definidas por el Usuario

Podemos lanzar nuestras propias excepciones, extendiendo la clase System.exception.

Un método debe capturar las excepciones que genera, o en todo caso, declararlas como parte de su llamado,indicando a todo el mundo que es capaz de generar excepciones. Esto debe ser así para que cualquiera queescriba una llamada a ese método avise de que le puede llegar una excepción, en lugar del valor de retornonormal. Esto permite al programador que llama a ese método, elegir entre controlar la excepción o

 propagarla hacia arriba en la pila de llamadas.

C++

Criterio de TerminaciónTerminación.

Tipo de ExcepciónSincrónica: Son las que ocurren dentro del programa. Por ej: que se agote la memoria o cualquier otro tipode error. (Criterio de Terminación)

 Asincrónica: Son las que tiene su origen fuera del programa, a nivel del S.O. (Excepciones lanzadas con lasentencia Thow)

Lanzamiento de Excepción

THROW Excepcion;Ej: Class EfueraRango{};

Con esto podríamos lanzar una excepción de la siguiente manera:Throw EfueraRango();El lanzamiento de una excepción se realiza llamando a la función throw(). Cuando se lanza una excepción,en realidad lo que se hace es crear un objeto de la clase que se le indique a thow(), y precisamente será dichoobjeto la excepción en sí.

Captura de la ExcepciónSi una excepción que ha sido lanzada no encuentra un manejador apropiado, se llamara a la función TERMINATE( ),la cual por defecto realiza un ABORT( ). Pero se puede definir nuestra propia función TERMINATE() conset_terminate( ).Algo parecido ocurre si un método lanza una excepción de un tipo que no tiene listado en su especificación

de excepciones, entonces llama a la función UNEXCTED( ) la cual por defecto llama a TERMINATE ().Pero de igual manera que con TERMINATE( ) podemos definir nuestra propia función UNEXPECTED( )con SET_ UNEXPECTED( )

Page 69: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 69/84

69

Estructura

Try {

<instrucciones> }catch (<tipo excepcion1> <variable1>)

{ <tratamiento1>}catch (<tipo excepcion2><variable2>){

<tratamiento2>}

Observación: Si se especifica catch(…) se capturará cualquier excepción. No tiene Finally

Propagación de ErroresIgual que C#. (Pero sin la parte del finally)

 ADA

Criterio de TerminaciónTerminación.

Lanzamiento de ExcepciónRAISE <NombreExcepcionALanzar>Ej: Raise EXCEPCIÓN-1

Captura de la ExcepciónEn Ada cada bloque puede contener una colección opcional de manejadores de excepciones y son declaradas al finaldel bloque.Cada manejador es una secuencia de instrucciones. Esta secuencia aparece precedida de:Palabra clave WHEN + un parámetro opcional denominado OCURRENCIA terminado en dos puntos + los nombresde las excepciones manejadas + el símbolo => 

Estructura

Begin

…. When nomExcep1 => Manejador1When  nomExcep2 => Manejador2….. When OTHERS  => Manejador (opcional);

End; 

Propagación de Errores

-  Si la unidad que alcanza una excepción proporciona un manejador para la misma, se transfiere inmediatamente elcontrol al manejador; se saltan las acciones al punto donde se alcanzo la excepción, se ejecuta el manejador y setermina la unidad.

-  Si la unidad que se esta ejecutando, U, no proporciona un manejador, se propaga la excepción:

1- Si U es un bloque, termina su ejecución y se vuelve a alcanzar implícitamente la excepción enla unidad que engloba a U.2- Si U es el cuerpo de un subprograma se hace el retorno del mismo y se realza implícitamentela excepción en el punto de llamada.

3 - Si U es el cuerpo de un “package”, actúa como si fuera un procedimiento que se activa cuandose procesa la declaración de package. En el caso de que no haya un manejador asociado al“package” se propaga la excepción a la unidad que alberga a dicho package.  

Page 70: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 70/84

70

-  Si una excepción se propaga fuera de su ámbito de visibilidad puede ser capturada utilizando unmanejador por defecto (When Others..).

-  Si queda alguna excepción sin manejar en la tarea de entorno, el programa será finalizado.

Relevantar la Excepción

En algunas ocasiones, las acciones que se realizan como consecuencia de una excepción necesita serestructurada en dos niveles:

-  Parte en el contexto en el que ocurrió la excepción.-  Parte en el contexto de invocación.

Para ello se emplea la cláusula RAISE SIN NOMBRAR la excepción.Ejemplo:

Procedure Main isE,F:Exception

Procedure A is Begin… -Bloque donde se levanta F...-Bloque donde se levanta E...exception

when E|F =>--Acción común a E y F;

RAISE;end;

end A;

Begin {Main}...A;--En a puede ocurrir E o F...exception

When E => Acción relativa a E;When F => Acción relativa a F;

End;EndMain;

Pasaje de Parámetros

Unicamente se puede pasar como parámetro una cadena de caracteres.

Excepciones Predefinidas Ada provee un conjunto de excepciones predefinidas que pueden ser automáticamente detectadas por la maquinade ejecución subyacente:

  Constraint_Error: Falla un chequeo en tiempo de ejecución sobre alguna limitación ( porejemplo: fuera del limite en un arreglo.)

  Program_Error: Falla un chequeo en tiempo de ejecución sobre alguna regla del lenguaje.  Storage_Error: Falla un chequeo de tiempo de ejecución sobre la disponibilidad de memoria

(por ejemplo por alocación dinámica.).  Tasking_Error: Falla un chequeo de tiempo de ejecución en el sistema de task.

Page 71: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 71/84

71

Clu

Criterio de TerminaciónTerminación.

Lanzamiento de Excepción

SIGNAL <NombreExcepcionALanzar>Ej: SIGNAL EXCEPCION-2

Captura de la Excepción

Las excepciones solo pueden ser alcanzadas en los procedimientos.Las excepciones que un procedimiento puede señalar han de declararse en la cabecera del mismo.El manejador de excepciones se relaciona con las sentencias por medio de la cláusula Except, según la sintaxis:<sentencia> Except <lista de manejadores> end; donde: <sentencia> puede ser cualquier sentencia compuesta.

Si la ejecución de un procedimiento que ha sido llamado en sentencias alcanza una excepción, se cede el control a lalista de manejadores que tiene el siguiente formato:

When <nomExcep1> :<Sentencia 1>When <nomExcep2> :<Sentencia 2> 

Estructura

<sentencia> ExceptWhen <nomExcep1> :<Sentencia 1>When <nomExcep2> :<Sentencia 2>...When Others :<Sentencia 1>

Propagación de ErroresAl producirse una excepción:

-  Se termina el procedimiento donde se levanto la excepción y devuelve el control al llamante inmediato donde se debeencontrar el manejador.

-  Si el manejador se encuentra en ese ámbito y la excepción alcanzada pertenece a <nomExcep_i> entonces se ejecuta<sentencia_i>(el cuerpo del manejador). Cuando acabo, el control pasa a la sentencia siguiente a la que esta ligado dichomanejador.Si <sentenci_i > contiene una llamada a una unidad, pudiera ser que se alcanzara otro excepción. En tal caso el control se

 pasa a la sentencia Except que incluye <sentencias>. Si la excepción alcanzada no figura en ninguna lista de excepciones serepite el proceso para las sentencias incluidas estáticamente. En caso de no encontrar un manejador en el procedimiento quehizo la llamada, el procedimiento señala implícitamente a la excepción predefinida FAILURE y devuelve el control.

-  Si el manejador no se encuentra en ese ámbito, la excepción se propaga estáticamente. Esto significa que el proceso se repite para las sentencias incluidas estáticamente.

Relevantar Excepción

Una excepción se puede volver a levantar con RESIGNAL

Pasaje de ParámetrosEn Clu las excepciones pueden devolver parámetros a sus manejadores.

Page 72: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 72/84

72

PL/1

Criterio de Terminación

Reasunción: Cada vez que se produce la excepción la maneja el manejador y devuelve el control a lasentencia siguiente de donde se levanto.

Lanzamiento de ExcepciónLas excepciones son llamadas CONDITIONS.SIGNAL CONDITION <NombreExcepcionALanzar>Ej: SIGNAL EXCECPCION-3

Captura de la Excepción

Los manejadores se declaran con la sentencia ON:ON CONDITION (Nombre-Excepcion) Manejador

El manejador puede ser un bloque o una instrucción.Este lenguaje aloca los manejadores en forma de pila, por eso cuando una unidad levanta una excepción tiene

prioridad el ultimo manejador que se cargó en la pila. Los manejadores se desalocan de la pila cuando termina launidad en la que están definidos.Los manejadores se ligan dinámicamente con las excepciones. Una excepción siempre esta ligada con el ultimomanejador definido.El alcance de un manejador de una excepción termina cuando finaliza la ejecución de la unidad donde fue declarado.El alcance de un manejador de una excepción se acota cuando se define otro manejador para esa excepción y serestaura cuando se desactiva los manejadores que la enmascaran.

Propagación de Errores

Al producirse una excepción(bien automáticamente o por una sentencia Signal):-  Se ejecuta el manejador vinculado actualmente a la excepción como si fuera un subprograma llamado

explícitamente desde ese punto. Por lo tanto a no ser que se especifique lo contrario en el manejador, elcontrol volverá al punto donde se produjo la sentencia Signal.

Excepciones PredefinidasEste lenguaje tiene una serie de excepciones ya predefinidas con un manejador asociado. Son las Built_inException. Ej:divisionporCero.- A las Built_in se les puede redefinir los manejadores de la siguiente manera:

On Nombre-Built-in Beginend;

-  A las built_in se las puede habilitar y deshabilitar explícitamente.

-  Se habilitan anteponiendo el nombre de la built_in antes del bloque, instrucción o procedimiento alque van a afectar.

-  Se deshabilitan anteponiendo NO al nombre de la built_in antes del bloque, instrucción o procedimiento al que van a afectar.Ej (ZeroDivide) Begin...End; //habilitada

(NOZeroDivide)Begin…End; //deshabilitada.

Page 73: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 73/84

73

Pasaje de ParámetrosEn PL/1 las excepciones no pueden devolver parámetros a sus manejadores.Por consiguiente solo se puede establecer el flujo de información mediante el uso de variables globales, loque por otro lado puede ser una practica poco recomendable. Además no siempre es posible utilizarvariables globales.

DELPHI

Lanzamiento de una ExcepciónUna excepción es un objeto que contiene información acerca del error ocurrido y donde sucedió". Esto quiere decirque una excepción nos indica por qué sucedió el error y además cual recurso se estaba accesando cuando estosucedió.

Captura de Excepción

1  -El primero es para liberar recursos y se puede representar así:

. . . Solicitud del recurso try 

Código de uso del recurso. finally Código para liberar el recurso solicitado 

end; . . .

2  - El segundo es sólo para el manejo de errores, su representación es la siguiente:

. . . try Código de acceso al recurso. 

except 

Código para manejar los errores on Tipo de excepción do begin 

Código para manejar este tipo de error  end; . . . on Tipo de excepción do begin 

 En caso de que la excepción no sea soportada raise; 

end; end.

El código llamado "bloque protegido" es el que se coloca entre el Try y el finally o entre Try y el except , este código es el queva a quedar protegido por el manejador de errores o excepciones.La diferencia entre estos dos tipos de manejadores es que el primero ejecuta el bloque entre el finally y el end siempre, estoaunque ocurra un error o finalice exitosamente y el segundo sólo ejecuta el bloque entre el except y el end si ocurre un error en el

 bloque protegido.

Para manejar los errores Delphi define un objeto llamado Exception del cual derivan todos los objetos manejadores deexcepciones. Estos objetos son los que se colocan entre las palabras reservadas on y do con el fin de manejar el tipo de excepciónque se desee. Se pueden declarar tantas expresiones on y do como excepciones se quieran manejar, o también se pueden declararmanejadores genéricos de excepciones omitiendo las declaraciones on y do.

Hay casos en que una excepción no puede ser manejada, para esto se utiliza la palabra reservada raise con el fin de levantar laexcepción de nuevo; de esta forma la excepción salta al manejador de excepciones anterior, si no encuentra un manejador sigue

recursivamente cayendo en los contextos de excepción definidos, si no existe quien la maneje primero despliega un mensaje deerror y en muchos casos puede abortar el programa.

Page 74: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 74/84

74

Excepciones de Usuario

Delphi permite definir en una forma muy sencilla los tipos de excepción que necesite el programador para hacer másseguro su programa.

SIGNAL Y THROW

ObjetivoTransferir el control al llamado de la excepción.

Diferencias

SIGNALSignal( ) ignora los contexto de excepción que están a su mismo nivel, y siempre retorna a los de algún

 procedimiento llamado, causando la terminación del procedimiento en que aparece el Signal( ).

THROWThrow( ) siempre retorna al contexto de excepción más inmediato, aunque este contexto se encuentre en elmismo procedimiento en que se invoco al Throw().

Incorporación del manejo de excepciones a la hora de diseñar un lenguaje.

Es importante incorporar el manejo de excepciones a la hora diseñar un lenguaje para que los programas seantolerantes a fallos y no funcionen correctamente solo bajo ciertas circunstancias. Un buen modelo a utilizar es el determinación  ya que provee más seguridad debido a que al producirse la excepción se aborta el programa ynotemrmina normalmente pudiendo de esta manera dejar un estado inconsistente como puede ocurrir con el modelo dereasunción.

ExcepcionesUna excepción es un proceso anómalo. Es un proceso que la unidad dónde se provocó está incapacitada para atenderlo de manera que

termine normalmente.Algunas cuestiones a tener en cuenta en el diseño de un lenguaje de programación que contenga manejo de excepciones:• ¿Cómo se maneja una excepción y cuál es su ámbito? • ¿Cómo se alcanza una excepción?• ¿Cómo especificar la unidades (manejadores de excepciones) que se han de ejecutar cuando se alcanza las excepciones?¿A dónde se cede el control cuando se termina de atender las excepciones?

¿Qué acción toman los lenguajes cuando se termina de manejar las excepciones?

• Esta es una de las cuestiones fundamentales, ya que determina   la potencia y la utilidad del mecanismo.

Page 75: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 75/84

75

Algunos lenguajes que incorporaron el manejo de excepciones.

  PL/1

•De los primeros lenguajes, éste fue el único que incorporó el manejo de excepciones. Fue el primer lenguaje.

• ¿Cómo lo implementa?

Utiliza el criterio de Reasunción. Cada vez que se produce la excepción, la maneja el manejador y devuelve el control ala sentencia siguiente de dónde se levantó.La excepciones son llamadas CONDITIONSLos manejadores se declaran con la sentencia ON:

ON CONDITION(Nombre-excepción) Manejador

El manejador puede ser una instrucción o un bloqueLas excepciones se alcanzan explícitamente con la palabra clave

Signal condition(Nombre-excepción)

 Este lenguaje tiene una serie de excepciones ya predefinidas con su manejador asociado. Son las Built -in exceptions.Ejemplo de estas zerodivide, se levanta cuando hay una división por cero.

A las built-in se les puede redefinir los manejadores de la siguiente manera:ON Nombre-Built-in Begin

End

A las built-in se las puede habilitar y deshabilitar explícitamenteAlgunas built-in se habilitan por defecto.

Se habilita anteponiendo el nombre de la built-in al bloque, instrucción o procedimiento al que va a afectar.

Se deshabilita anteponiendo NONombre de la built-in al bloque, instrucción o procedimiento al que va a afectar

Ej: (ZERODIVIDE) begin (NOZERODIVIDE) beginend end

Los manejadores se ligan dinámicamente con las excepciones. Una excepción siempre estará ligada con el último manejadordefinido.El alcance de un manejador de una excepción termina cuando finaliza la ejecución de la unidad donde fue declaradoEl alcance de un manejador de una excepción se acota cuando se define otro manejador para esa excepción y se restaura cuando sedesactivan los manejadores que la enmascararon. No permite que se pasen parámetros a los manejadores

Desventajas:

Los dos últimos puntos provocan programas difíciles de escribir y comprender y la necesidad de uso de variables globales

Page 76: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 76/84

76

  ADA

•¿Cómo lo implementa? 

Utiliza el criterio de Terminación. Cada vez que se produce una excepción, se termina el bloque, procedimiento, paquete o tarea dónde se levantó y se ejecuta el manejador asociado.

La excepciones se definen en la zona de definición de las variables, colocando la palabra Exception.Ejemplo: e:exception;

El alcance de una excepción es igual que el de las variables.

Las excepciones se alcanzan explícitamente con la palabra clave raiseRaise Nombre-excepción

Los manejadores pueden encontrarse en el final de cuatro diferentes unidades de programa: Bloque,Procedimiento, Paquete o Tarea. Forma de definirlos:

  Este lenguaje tiene cuatro excepciones ya predefinidas con su manejador asociado. Estas son: Constraint-error, Program-error, Storage-error y Tasking-error.

 Propagación de errores:

Al producirse una excepción:

Se termina la unidad, bloque, etc. dónde se alcanza la unidad.Si el manejador se encuentra en ese ámbito, se ejecuta.Si el manejador no se encuentra en ese lugar la excepción se propaga dinámicamente. Esto significa quese vuelve a levantar en otro ámbito.

Una excepción se pude levantar nuevamente colocando solo la palabra raise. Se vuelve a levantar la últimaexcepción levantada.

Page 77: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 77/84

77

  CLU

¿Cómo lo implementa?

Utiliza el criterio de Terminación.Las excepciones en Clu solamente pueden ser alcanzadas por los procedimientos.Las excepciones están asociadas a sentencias.La excepciones que un procedimiento puede alcanzar se declaran en el encabezamiento del procedimiento.Las excepciones se alcanzan explícitamente con la palabra clave signalSignal Nombre-excepción

Los manejadores se colocan al lado de una sentencia que puede ser simple o compleja. Forma de definirlos:

Este lenguaje tiene excepciones ya predefinidas con su manejador asociado. Propagación de errores:

Al producirse una excepción:

Se termina el procedimiento donde se levantó la excepción y devuelve el control al llamante inmediatodonde se debe encontrar el manejador.Si el manejador se encuentra en ese ámbito, se ejecuta y luego se pasa el control a la sentencia siguientea la que está ligado dicho manejador.Si el manejador no se encuentra en ese lugar la excepción se propaga estáticamente. Esto significaque el proceso se repite para las sentencias incluidas estáticamente.En caso de no encontrar ningún manejador en el procedimiento que hizo la llamada se levanta unaexcepción faliure y devuelve el control.

Se pueden pasar parámetros a los manejadores.Una excepción se puede volver a levantar utilizando resignal

Page 78: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 78/84

78

  C++

¿Cómo lo implementa?

Utiliza el criterio de Terminación.Las excepciones pueden alcanzarse:

• Implícitamente, ejemplo: División por cero • Explícitamente a través de la sentencia throw 

Los manejadores van asociados a bloques que necesitan manejar ciertos casos excepcionales.

Los bloques que pueden llegar a levantar excepciones van precedidos por la palabra clave Try y al finalizar el bloque se detallan los manejadores utlizando la palabra clave Catch(NombreDeLaExcepción)

Al levantarse una excepción dentro del bloque Try el control se transfiere al manejador correspondiente.

Al finalizar la ejecución del manejador la ejecución continúa como si la unidad que provocó la excepción fueejecutada normalmente.

Permite pasar parámetros al levantar la excepción.

Ejemplo: Throw (Ayuda msg);Se está levantando la excepción Ayuda y se le pasa el parámetro msg.

Las rutinas en su interface pueden listar las excepciones que ellas pueden alcanzar.Ejemplo: void rutina ( ) throw (Ayuda, Zerodivide);

¿Qué sucede si la rutina …? 

• alcanzó otra excepción que no está contemplada en el listado de la Interface?

En este caso NO se propaga la excepción y una función especial se ejecuta automáticamente: unexpected(),que generalmente causa abort(), que provoca el final del programa. Unexpected puede ser redefinida por el programador.

• no colocó en su interface el listado de posibles excepciones a alcanzar?

En este caso Si se propaga la excepción. Si una excepción es repetidamente propagada y no machea conningún manejador, entonces una función terminate() es ejecutada automáticamente.

• colocó en su interface una lista vacía (throw())?

Significa que NINGUNA excepción será propagada.

Page 79: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 79/84

79

  JAVA

¿Cómo lo implementa?

Al igual que C++ las excepciones son objetos que puden ser alcanzados y manejados por manejadores adicionadosal bloque donde se produjo la excepción.

Diferencias:

• TODAS las excepciones (chequeadas) que puedan ser alcanzadas explícitamente por la rutina, DEBEN serlistadas en la interface de la misma o ser manejadas por un manejador.

Justificación de esta obligatoriedad: El usuario de la rutina DEBE conocer qué excepciones puede alcanzar lamisma.

Page 80: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 80/84

80

  Delphi

Delphi presenta dos estructuras de manejo de excepciones:

• Uno utilizado básicamente para liberar recursos. Su representación es la siguiente:  

Esto sirve por ejemplo, para controlar errores que pueden producirse en el transcurso del uso de un archivo, como ser: permanencia del archivo, integridad del mismo, mantenimiento de la conexión activa, en caso que se trabaje con unarchivo que está en una red, etc.

• El segundo sólo para el manejo de errores. Su representación es la siguiente:. . .try...excepton Tipo de excepción do beginCódigo para manejar este tipo de errorend;

on Tipo de excepción do beginCódigo para manejar este tipo de errorend;end;

Este sirve para el caso que se desee manejar las excepciones.Las excepciones se pueden levantar explícitamente con Raise.Raise; levanta nuevamente la misma excepción

Page 81: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 81/84

81

Page 82: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 82/84

82

  Python

Lenguajes que NO proveen manejo de Excepciones

Page 83: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 83/84

83

  Encapsu lamiento y abstracción.

  Intérp retes y Compilado res .

  Paradigmas de lenguajes (imperativo, or ientado a objetos, funcional,lógico).

Page 84: Conceptos Lenguajes de programacion

7/23/2019 Conceptos Lenguajes de programacion

http://slidepdf.com/reader/full/conceptos-lenguajes-de-programacion 84/84