Professional Documents
Culture Documents
PROGRAMACION
CONTENIDOS MINIMOS:
Sintaxis y semntica.
Semntica operacional.
Entidades y ligaduras.
Sistemas de tipos.
Encapsulamiento y abstraccin.
Intrpretes y Compiladores.
Paradigmas de lenguajes (imperativo, orientado a objetos, funcional, lgico).
Programa
1- Lenguajes de Programacin como herramientas para producir software. Objetivo del estudio de sus
conceptos. Distintos puntos de vista. Capacidad de comunicacin. Relacin e integracin de los
lenguajes de programacin respecto a otros conceptos.
2- Evaluacin de los lenguajes de programacin a travs de las caractersticas del software que
producen. Principios de diseo de los lenguajes.
Perspectiva histrica de los lenguajes de programacin motivacin, herencia, caractersticas,
evolucin. Desde Fortran hasta Java. Lenguajes funcionales. Lenguajes Orientados a objetos.
Abstraccin: qu papel juega.
Necesidad de estandarizar: cundo y cmo hacerlo?
3- Estructura de un lenguaje: sintaxis y semntica.
Sintaxis: Caractersticas de las sintaxis. Elementos de las sintaxis. Estructuras sintcticas. Reglas
lxicas y sintcticas. Tipos de sintaxis. Sintaxis abstracta y concreta.
Formas de definir la sintaxis. Gramticas. (Backus Naum Form).rboles sintcticos y de derivacin.
Gramticas recursivas. Subgramticas. Gramticas ambiguas. EBNF. Diagramas sintcticos
(CONWAY)
Semntica esttica.
4- Semntica. Tipos de semnticas. Formas de definir la semntica de un lenguaje de programacin.
Procesamiento de un lenguaje interpretacin y traduccin. Tipos de traductores. Comparacin entre
Traductor e Intrprete. Combinacin de ambas tcnicas. Compiladores. Etapas de Anlisis y Sntesis.
Optimizacin.
1
5- Semntica Operacional.
Ligadura. Descriptores. Momentos de ligadura. Estabilidad.
Variables. Arquitectura Von Newman. Atributos. Momentos y estabilidad. Nombre: caractersticas.
Alcance: visibilidad, reglas. Tipo: definicin, clasificacin. L-valor: tiempo de vida, alocacin. R-valor:
constantes, inicializacin. Alias
6- Unidades. Atributos. Representacin en ejecucin. Elementos. Unidades recursivas. Unidades
genricas. Alias y sobrecarga. Procesador abstracto: elementos, instrucciones.
Procesamiento de un lenguaje: clasificacin. Lenguaje esttico. Entidades locales. Rutinas internas.
Compilacin separada. Lenguajes basados en pila. Unidades recursivas, implementacin. Estructura
de bloque. Datos semidinmicos y dinmicos. Lenguajes dinmicos.
7- Compartir Datos. Ambiente comn. Acceso al ambiente no-local. Parmetros. Ventajas. Evaluacin de
los parmetros reales y ligadura con los parmetros formales. Clase de parmetros: Datos y
Subprogramas. Modos de pasaje de parmetros datos. Pasaje de Rutinas como parmetros.
8- Sistema de tipos. Tipos predefinidos, tipos definidos por el usuario, tipos estructurados, tipos
abstractos. Implementacin de datos, su representacin.
Sistema de tipos: lenguajes seguros y fuertemente tipados.
Encapsulamiento y abstraccin. Evolucin de los tipos. Tipos abstractos. Equivalencias de tipos.
9- Abstraccin de Control. Estructuras de control: Definicin de estructuras de control a nivel de sentencia
y a nivel de unidad. Tipos de estructuras de control a nivel de sentencia. Diferencia entre sentencia de
asignacin y expresin. Evolucin de las sentencias de seleccin e iteracin en diferentes lenguajes,
desde PL/1 a Java.
10- Abstraccin de control a nivel de unidad. Excepciones: Definicin. Modelos de Terminacin y
Reasuncin. Distintos modelos de manejo de excepciones. Comparacin.
11- Paradigma funcional. Caractersticas. Comparacin lenguaje imperativo con lenguaje funcional.
Definiciones de funciones. Script. Expresin y valor. Transparencia referencial. Evaluacin de las
expresiones, mecanismo de reduccin o simplificacin. Orden aplicativo, orden normal (lazy
evaluation).Tipos de datos bsicos y derivados. Tipos de funciones. Expresiones polimrficas.
Currificacin. Clculo Lambda. Dominios de aplicacin.
12- Paradigma Orientado a Objetos. Caractersticas. Elementos bsicos de la programacin orientada a
objetos: objetos, mensajes, mtodos, clases. Conceptos de generalizacin, especificacin y herencia.
Diferentes tipos de herencia. Lenguajes hbridos, caractersticas principales. Dominios de aplicacin
13- Paradigma lgico. Caractersticas. Elementos de la programacin lgica: variables, constantes,
trminos compuestos, listas. Clusulas y predicados. Reglas y hechos. Dominios de aplicacin
RESUMEN
INTRO
El valor de un lenguaje o de un concepto se debe juzgar segn la forma en que afecta la produccin de Software y a
la 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 caractersticas de los lenguajes permite aprovechar su potencia y evitar
errores, minimizando esfuerzo
2. Para mejorar el uso del lenguaje que ya se esta utilizando
Si se entiende como se implementa cada caracterstica se mejora la capacidad para escribir programas
eficientes.
3. Para incrementar el vocabulario
El lenguaje
equivale a comunicacin.
es una ayuda y una limitacin al pensamiento.
permite expresar y estructurar el pensamiento
Incrementamos la capacidad para expresar ideas
4. Para elegir mejor un lenguaje
Si se conocen ms a lenguajes, se facilita la eleccin del ms adecuada de acuerdo al rea del
problema y por lo tanto se reduce el esfuerzo de codificacin.
5. Para facilitar el aprendizaje de nuevos lenguajes
Un lingista que conoce profundamente la estructura subyacente del lenguaje natural aprende
muchsimo mas rpido un nuevo lenguaje (idioma) que una persona que no sabe nada del tema
6. Para facilitar el diseo e implementacin de lenguajes
El programador puede convertirse en diseador o implementador de un lenguaje.
LENGUAJE DE PROGRAMACION Y METODO DE DISEO
Paradigmas de lenguajes
Procedural: descomposicin en pasos - rutinas
Funcional: expresiones y funciones - composicin.
Con TADs: reconocimientos de Tads
basada en mdulos: grupo de entidades-interfaces
OO: clases instancias - jerarquas
Programacin genrica: mdulos genricos instanciados en compilacin o ejecucin
Programacin declarativa: no algortmico, declaracin del problema (especificacin)
construir soluciones.
SIMPLICIDAD
Las caractersticas del lenguaje deben ser fciles 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. Esto
es, que los efectos de la composicin puedan entenderse y predecirse. El usuario comprende mejor si tiene un
pequeo nmero de primitivas y un conjunto consistente de reglas de combinacin.
4.
SOPORTE DE ABSTRACCIN
Concepto clave para manejar la complejidad
Abstraccin de procesos y de datos
Principio de diseo: Ocultamiento de la Informacin
2. LEGIBILIDAD
Fcil de leer por las personas (equipo)
Es una propiedad que favorece la modicabilidad y la mantenibilidad de los programas. Los elementos que
caracterizan la legibilidad de un lenguaje son:
1. Semntica/Sintaxis
Restricciones semnticas
If-then-else anidados
Separacin de sentencias
indentacin
2. Sintaxis
Documentacin y comentarios
Eleccin de nombres
Uso de constantes
Convenciones lxicas
4. MANTENIBILIDAD
Modificabiliad: facilidad de introducir cambios
Factoreo: una sola vez y luego reusar
Localidad: el efecto de una caracterstica se restringirse a una porcin local del programa
5. EFICIENCIA
Tiempo y Espacio
Esfuerzo humano
Optimizable
Caractersticas. Desde el punto de vista de su diseo, est destinado a la programacin en forma aplicativa. La ejecucin de una
expresin es el concepto principal que se necesita para la secuenciacin de programas. Por esta razn el almacenamiento en
estructuras de begindescription se convierte en un proceso para la gestin de almacenamiento en lugar del mecanismo tradicional
de registros de activacin de los lenguajes de procedimiento.
Aportes. Sus objetos bsicos son tomos y listas de tomos, y la llamada y recursin de funciones constituyen los mecanismos
bsicos de ejecucin. LISP es diferente en muchos aspectos, y el ms 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 dependencia
de la recursin como estructura de control, en vez de la iteracin.
2. APL
Ao de aparicin. 1966
Objetivo. Se crea para conseguir un eficiente manejo de arreglos.
Caractersticas. Define el uso de smbolos especiales para clculos matemticos especficos.
Aportes. Se codifica en los mismos terminales IBM/360 en lugar de la utilizacin de tarjetas.
3. SNOBOL
Ao de aparicin. 1965
Objetivo. El desarrollo fue iniciado en 1972 en los laboratorios Bell. La meta era desarrollar un lenguaje de procesamiento de
cadenas para manipulacin de frmulas y anlisis de grficos. Su nombre proviene de StriNg Oriented symBOlic Language.
Caractersticas. Implementa la concordancia de patrones con base en gramticas BNF. Es totalmente dinmico, incluyendo sus
declaraciones, tipos, asignacin de almacenamiento, hasta puntos de entrada y salida de procedimientos
Aportes. Procesamiento de Strings. La implementacin emplea macros virtuales de procesamiento de cadenas (rescritura de
macros para cualquier computadora existente.
Tercera Etapa
En cuanto a hardware se percibe una evolucin hacia un tamao y velocidad creciente y costo decreciente. Surgen las
minicomputadoras, la micro-programacin y los circuitos integrados.
1. BASIC
Ao de aparicin. Principio de los 60
Objetivo. El BASIC (Begginers All-purpose Symbolic Instruction code) fue desarrollado con el objetivo de suministrar un
entorno sencillo de computacin. En especial para estudiantes no cientficos. Adems, para aumentar la eficiencia, el BASIC se
proyect como un lenguaje interactivo antes de que el tiempo compartido estuviera presente en todas las arquitecturas.
Caractersticas. Se trata de un lenguaje con sintaxis y semntica extremadamente simples, posee enunciados numerados y los
nombres de variables se definen con una letra sola ms un digito. Sus estructuras de decisin (IF), iteracin (FOR) e invocacin a
subrutinas (GOSUB) tienen vinculacin simple.
Aportes. BASIC es un ejemplo contradictorio de la programacin. Mientras que la sintaxis es extremadamente fcil de aprender,
la complejidad de armar un programa hace que el cdigo sea ilegible en una cantidad mayor de sentencias. Las versiones mas
recientes incluyen mayor flexibilidad, asemejndolo a lenguajes como Pascal FORTRAN.
2. PL/1
Ao de aparicin. 1965
Objetivo. Con la introduccin de su nueva lnea de computadoras 360, IBM desarroll un lenguaje que fusionara los atributos
numricos de FORTRAN con las caractersticas de programacin para negocios de COBOL. Busc reunir todos los conceptos
importantes de los lenguajes predecesores. Un subconjunto logr un xito moderado en los aos setenta como compilador
educativo (PL/C)
Caractersticas.
Aportes. Incorpora el manejo de situaciones excepcionales, la posibilidad del manejo de concurrencia y el uso explcito de
punteros
Cuarta Etapa
1. Simula
Ao de aparicin. 1967
Objetivo. Desarrolla un esquema de clases para comunicacin de procesos y lo introduce como mecanismo de modularizacin,
para lo que dispone de nuevas herramientas sintcticas
Caractersticas. Es un derivado de ALGOL que introdujo clases como objetos de datos.
Aportes.
7
2. ALGOL-68
Ao de aparicin. 1968
Objetivo. Tuvo como principal objetivo el de ser un lenguaje ortogonal
Caractersticas. Define pocos elementos y permite su libre combinacin
Aportes. Introduce arreglos flexibles y tipos definidos por el usuario
3. Pascal
Ao de aparicin. 1968
Objetivo. Fue proyectado por Niklaus Wirth para superar muchas deficiencias del lenguaje ALGOL ms antiguo. Su creador tena
como objetivo disear un lenguaje que se pudiera compilar en un solo paso y utiliz un algoritmo de anlisis sintctico para
desarrollar el intrprete de cdigo P. Por mucho tiempo fue el lenguaje que se utiliz como herramienta de enseanza en la
iniciacin a la programacin.
Caractersticas. Es un lenguaje muy simple y expresivo. Permite declarar procedimientos locales internos y crear una jerarqua
completa de nombres anidados de objetos de datos. Un programa Pascal siempre est formado por un solo bloque de programa
que contiene definiciones de los subprogramas que se usan. Tiene un conjunto bastante grande de tipos de datos primitivos y
estructurados; permite, mediante la sentencia type, definir tipos nuevos, aunque no proporciona encapsulamiento de sus
operaciones.
Aportes. El compilador de Pascal traduca primero el programa fuente en Pascal a un lenguaje de mquina hipottico para una
mquina que tena como base una arquitectura de pilas. El compilador de Pascal estaba escrito en el mismo Pascal. A causa de
esta estructura, el Pascal era fcil de transportar a otros sistemas. Para pasar a una mquina nueva requiere solamente rehacer el
intrprete de cdigo P.
Permite el uso de un tipo apuntador y una operacin para crear nuevos objetos de datos que permiten construir una secuencia de
datos de tamao dinmico (listas enlazadas)
Quinta Etapa
1. C
Ao de aparicin. 1972 - Laboratorios Bell
Objetivo. Aunque es un lenguaje de programacin para usos generales, se le ha asociado con la programacin de sistemas
operativos. Se uso por primera vez para escribir el ncleo de UNIX, y conforme este sistema se comercializ en los aos 80, C se
hizo cada vez ms popular
Caractersticas. Est relacionado con ALGOL y Pascal en cuanto a estilo, y con la inclusin de atributos de PL/I. Su sintaxis es
compacta y clara, y tiene caractersticas de ejecucin eficientes. La gran biblioteca de funciones normales proporciona a C una
forma fcil de administrar los recursos del sistema con un alto nivel de abstraccin. La relacin entre arreglos y apuntadores, al
igual que la visin transparente de las cadenas como arreglos de caracteres o apuntadores a series de caracteres, da lugar a
operaciones eficientes de procesamiento de cadenas.
Aportes. Es el primer lenguaje de alto nivel que se uso para la implementacin de sistemas, dado que los sistemas operativos
anteriores estaban implementados en ASSEMBLER. Muchas de sus ideas provienen del lenguaje BCPL, en su subconjunto B, que
fue proyectado para la programacin de sistemas. Estos antecesores carecan de tipos, por lo que C fue innovador al incluir una
variedad de tipos de datos. El estndar ANSI contribuye con la definicin de una biblioteca de funciones de acceso al sistema
operativo y otras actividades semejantes. C no es un lenguaje fuertemente tipado, sino que al evolucionar, su verificacin de tipos
ha sido reforzada.
Sexta Etapa
Se introduce el concepto de ambiente de desarrollo de software y el paradigma Orientado a Objetos. El costo de dicho desarrollo
involucra desde entonces el costo humano adems del tecnolgico.
1. Ada
Ao de aparicin. 1983
Objetivo. Originalmente fue diseado para aplicaciones militares. La meta era proyectar un lenguaje y estandarizarlo antes de que
existieran variantes incompatibles. Este estndar se concret antes de que existieran traductores funcionales para el lenguaje.
Caractersticas. Pascal fue el punto de partida para el dise de Ada, pero difieren en muchos aspectos importantes. Ada est
pensado para permitir la construccin de programas grandes por equipos de programadores, ya que un programa se proyecta como
una coleccin de componentes de software llamados paquetes, donde cada uno representa un tipo de datos abstracto que se
comparten entre subprogramas
Aportes. A travs del uso de paquetes suministra los conceptos de abstraccin y encapsulamiento de tipos de datos y operaciones
definidos por el programador. Introduce un extenso conjunto de caractersticas para el manejo de excepciones. El aspecto mas
notable de las caractersticas de control de Ada es la provisin de tareas (tasks) capaces de ejecutarse concurrentemente. En sus
versiones posteriores al Standard ANSI introduce herramientas de definicin de objetos de datos y cdigo genricos.
8
2. Smalltalk
Ao de aparicin. 1972
Objetivo. Fue proyectado como un sistema total y no simplemente como una notacin para desarrollar programas
Caractersticas. Smalltalk tiene una definicin nuclear pequea, ya que toda su funcionalidad se basa en desarrollar subclases de
otras ya existentes y anexar mtodos a cada una de ellas. Sus sentencias bsicas definen asignacin y ejecucin secuencial, ya que
el resto de las estructuras de control necesarias estn implementadas por clases y pasaje de mensajes. Conforme se construye un
conjunto de clases y mtodos, es simple ampliar el programa para manejar problemas mayores.
Aportes. Se basa por completo en encapsulamiento y abstraccin. La herencia es una caracterstica bsica del proceso de
invocacin de mtodos.
3. C++
Ao de aparicin. 1986
Objetivo. A partir del lenguaje C, Bjarne Stroustrup busc desarrollar un lenguaje ecaz que conservara la eficiencia de C y que
incorpore la herencia de objetos, percibiendo que el concepto de clase que fue introducido por Simula era un mecanismo eficiente
de tipificacin
Caractersticas. El uso de clases no hace que los programas se ejecuten ms lentamente. C++ tiene tipificacin ms fuerte que la
de C, pero casi todos los programas escritos en C deben poder ser compilados por un compilador de C++. No es lenguaje muy
simple de aprender, pero para programadores experimentados, C++ permite desarrollar programas muy eficientes.
Aportes. C++ da cabida a clases y definiciones de mtodos para hacer extensivo el proceso de encapsulamiento de tipos de datos
abstractos a funciones polimrficas. Mientras que el desarrollo de clases es una ampliacin relativamente menor a la sintaxis de C,
el uso apropiado de mtodos y funciones modifica en grado considerable la manera como se construyen los programas en C++
La implementacin subyacente de caractersticas del lenguaje es bastante transparente, lo que produce programas que se ejecutan
con eficiencia
4. Java
Ao de aparicin.
Objetivo. Fue diseado para desarrollar software de redes.
Caractersticas. El cdigo Java se compila a un nivel intermedio, generando "bytecodes que son posibles de interpretar por una
maquina virtual Java. Existe un maquina virtual para cada plataforma.
Aportes. Introduce ms movilidad, de manera que el software producido sea portable e independiente de la plataforma.
SINTAXIS Y SEMNTICA
Sintaxis
La sintaxis es un conjunto de reglas que definen como componer letras, dgitos y otros caracteres para formar los programas.
Estas reglas se dividen en dos grupos: reglas lxicas y reglas sintcticas.
Caractersticas
-
Verificabilidad y Traduccin
Falta de ambigedad
Elementos de la sintaxis
Alfabetos o conjuntos de caracteres, donde el orden de los caracteres es lo que se utiliza en las comparaciones.
Identificadores: cadena de letras y dgitos, que deben comenzar con una letra.
Si se restringe la longitud se pierde legibilidad
10
Palabra clave o keyword: tiene un significado dentro de un contexto, puede ser usada por el programador como identificador de
otra 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.
lo es, qu significa
Estructura sintctica
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 sintcticos bsicos
Sentencias
Componente sintctico ms importante.
Tiene un fuerte impacto en la facilidad de escritura y legibilidad
Hay sentencias simples, estructuradas y anidadas.
11
Tipos de Sintaxis
ABSTRACTA
Se refiere a la estructura
CONCRETA
Se refiere a la parte lxica
PRAGMTICA
Se refiere al uso prctico
rboles sintcticos
Juan el un manta
No todas las oraciones que se pueden armar con los terminales son vlidas
Se necesita de un Mtodo de anlisis (reconocimiento): Parsing.
El parse, para cada sentencia construye un rbol sintctico o rbol de derivacin
12
rbol de derivacin:
Ejemplo top-down de izquierda a derecha
Producciones recursivas:
Regla recursiva por la izquierda
La asociatividad es por la izquierda
El smbolo no terminal de la parte izquierda de una regla de produccin aparece al comienzo de la parte
derecha
Regla recursiva por la derecha
La asociatividad es por la derecha
El smbolo no terminal de la parte izquierda de una regla de produccin aparece al final de la parte
derecha
13
14
SEMNTICA
Conjunto de reglas para dar significado a los programas sintcticamente vlidos. Este significado puede ser expresado mediante el
mapeo de cada construccin del lenguaje en un dominio cuya semntica es conocida. Para proveer una descripcin formal
completa de la semntica del lenguaje, los programas sintcticamente validos son mapeados en dominios matemticos. Hay otra
manera de expresar la semntica de un lenguaje, llamada semntica operacional, que se basa en mostrar los cambios de estado en
una maquina abstracta que ejecuta las construcciones del lenguaje.
La semntica define el significado de los programas sintcticamente vlidos en el lenguaje. No todos los programas
sintcticamente validos tienen significado, por esto la semntica separa los programas que tienen significado de los que no lo
tienen, estas reglas definen la semntica esttica (se chequea antes de la ejecucin); al contrario de la semntica dinmica que
describe el efecto de usar diferentes construcciones del lenguaje. En esos casos los programas pueden ser ejecutados solo si son
correctos para la sintaxis y para la semntica esttica.
Semntica axiomtica: ve al programa como una mquina de estados. Las construcciones del lenguaje de programacin son
formalizadas describiendo como su ejecucin causa un cambio de estado. Un estado es descrito por un predicado lgico de primer
orden que define las propiedades de los valores de las variables de programas en este estado. El significado de la construccin del
lenguaje es definido por una regla que relaciona el estado anterior y el posterior a la ejecucin. Establece precondiciones y pos
condiciones para la ejecucin de cada sentencia.
Semntica denotacional: asocia cada sentencia del lenguaje con una funcin que va desde el estado del programa antes de la
ejecucin al estado despus de la ejecucin. El estado es representado por una funcin que va desde el conjunto de nombres de
variables a los valores.
La diferencia entre estas semnticas est en la forma de definir el estado (predicados contra funciones).
Compare la gramtica BNF con el lenguaje natural como mecanismo de definicin de la sintaxis de un lenguaje.
El lenguaje natural es un mtodo informal y en consecuencia es no preciso, incompleto; aqu es el implementador el que decide
cosas por su cuenta. Se generan dialectos.
En cambio BNF es un mtodo formal, lo que da una implementacin ms precisa de la sintaxis de un lenguaje. Es una notacin
formal para describir la sintaxis. Es un metalenguaje. Utiliza meta smbolos. Define las reglas por medio de producciones.
Ejemplo:
<digito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9..............terminales
meta smbolo
no terminal
La semntica describe el significado de los smbolos, palabras y frases de un lenguaje ya sea lenguaje natural o lenguaje
informtico
Tipos de semntica:
Semntica esttica
Semntica dinmica
Semntica esttica
est relacionado con las formas validas.
Los cambios que se producen en el estado de la mquina cuando se ejecuta una sentencia del lenguaje de
programacin definen su significado
Es un mtodo informal
Es el ms utilizado en los libros de texto
PL/1 fue el primero que la utiliz
16
Tipos de traductores:
Compilador
Assembler
Link-editor
Loader
Preprocesador o macro-procesador:
-Procesador o Procesador
Compiladores
, etc.
un solo paso o en dos pasos y en ambos casos cumplen con distintas etapas:
Etapas de compilacin:
1- Anlisis
Hace el anlisis a nivel de palabra
Divide el programa en: identificadores, delimitadores, smbolos especiales, nmeros,
clave, delimitadores, comentarios, etc.
Analiza el tipo de cada token
Convierte a representacin interna los nmeros en punto fijo o punto flotante
Poner los identificadores en la tabla de smbolos
Remplaza cada smbolo por su entrada en la tabla
tems lxicos o tokens.
palabras
Se identifican las estructuras; sentencias, declaraciones, expresiones, etc. ayudndose con los
tokens.
El analizador sintctico se alterna con el anlisis semntico. Usualmente se utilizan tcnicas
basadas en gramticas formales.
Aplica una gramtica para construir el rbol sintctico del programa.
Es la ms importante
Las estructuras sintcticas reconocidas por el analizador sintctico son procesadas y la estructura
del cdigo ejecutable toma forma.
Se realiza la comprobacin de tipos
Se agrega la informacin implcita
Se agrega a la tabla de smbolos 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 anlisis y la sntesis
2- Sntesis
Se construye el programa ejecutable.
Genera el cdigo necesario y se optimiza el programa generado.
Si hay traduccin separada de mdulos, es en esta etapa cuando se linkedita.
Se realiza el proceso de optimizacin. Optativo
(ejemplo)
Posibles optimizaciones locales:
Cuando hay dos saltos seguidos se puede quedar uno solo P/E El ejemplo anterior quedara as:
18
19
SEMANTICA OPERACIONAL
1.
2.
3.
4.
5.
CONCEPTO DE LIGADURA
VARIABLES
UNIDADES
MODELOS DE EJECUCION
PARAMETROS
1-
Momento y estabilidad
Una ligadura es esttica si se establece antes de la ejecucin y no se puede cambiar.
Una ligadura es dinmica si se establece en el momento de la ejecucin y puede cambiarse de acuerdo a
alguna regla especfica del lenguaje.
2-
VARIABLES - Concepto
memoria principal: celdas elementales, identificadas por una direccin.
contenido de una celda: representacin 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 ubicacin de la variable
nombre
Se define en una sentencia llamada declaracin.
Aspectos de diseo:
longitud mxima
conectores
sensitivos
palabra reservada - palabra clave
20
Alcance
rango de instrucciones en el que se conoce el nombre. (visibilidad)
alcance - momentos
alcance esttico
define el alcance en trminos de la estructura lxica del programa.
alcance dinmico
define el alcance del nombre de la variable en trminos de la ejecucin del programa.
tipo
conjunto de valores
conjunto de las operaciones
Protege a las variables de operaciones no Permitidas
tipos- definicin del lenguaje
Predefinidos
Definidos por el usuario
TADs
tipos momentos
L-VALUE
rea de memoria ligada a la variable
Tiempo de vida (lifetime) o extensin: periodo de tiempo que existe la ligadura por l-valor
Alocacin: reservar memoria y ligar ese lugar al l-value
Momentos del l_valor
Esttica: sensible a la historia
Dinmica
Automtica
Explcita
Persistente:
R-VALUE
Valor almacenado en el l-valor de la variable
Objeto: (l-valor, r-valor)
momento
Dinmico: por naturaleza
Constantes: se congela el valor
r-valor: inicializacin
Cul es el r-valor luego de crearse la variable?
ignorar el problema
estrategia de inicializacin
control de acceso
21
Alias
Dos nombres comparten un objeto si sus caminos de acceso conducen al objeto. Un objeto compartido modificado va un camino, se modifica
para todos los caminos
Durante su tiempo de vida un objeto puede tener ms de un nombre, por ejemplo, puede haber varias asociaciones en diferentes ambientes de
referencia, donde cada uno proporciona un nombre distinto para el objeto de datos. Por ejemplo, cuando un objeto de datos se transmite por
referencia como parmetro a una rutina, se puede hacer referencia a l a travs de un nombre de parmetro formal en la rutina y tambin
conserva 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 travs de punteros y tener as nombres
compuestos a travs de los cuales se puede tener acceso a l. Los nombres mltiples para un mismo objeto de datos son posibles de diversas
maneras en casi todos los lenguajes de programacin.
Cuando un objeto de datos es visible a travs de ms de un nombre en un solo ambiente de referencia, cada un de los nombres se conoce como
un alias del objeto. Cuando un objeto tiene ms 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, porque
dificulta la comprensin del cdigo y puede introducir errores difciles de detectar, como para el implementador del lenguaje. La optimizacin
del cdigo puede buscar reordenar los pasos de un cmputo, pero cuando es posible el uso de alias, se debe hacer un anlisis adicional para
asegurar que los pasos de cmputo sean independientes.
Ejemplos de alias
Puede establecerse el alias durante la ejecucin de un procedimiento cuando los parmetros se pasan por referencia. Supongamos el
siguiente 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 lo
invocamos 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 cualquier
asignacin a x y a y en el mismo procedimiento afecta a la misma posicin de memoria. El mismo problema puede derivarse de la llamada
intercambio (b[i], b[j]) cuando i = j.
Los punteros p y q apuntan al mismo objeto, de esta forma es posible cambiar el valor de p^ con una asignacin a q^ y viceversa.
Formas de evitarlo
Hay dos caminos para eliminar el alias, uno consiste en acabar por completo con las caractersticas que hacen posible el alias, como punteros,
parmetros por referencia, datos globales y matrices. Sin embargo, esto nos llevara a un lenguaje muy pobre. El otro camino consiste en poner
restricciones al uso de tales caractersticas para excluir la posibilidad de alias.
-
En el caso de los parmetros por referencia el problema solo surgen si los parmetros reales se solapan, entonces si dichos parmetros son
variables simples, es necesario asegurarse que sean distintas, de esta manera la llamada intercambio(a,a) sera ilegal.
Estas formas de alias ilegales pueden detectarse en compilacin, sin embargo la llamada intercambio(b[i], b[j]) genera alias solo si i = j, por
lo tanto se podran prohibir tales llamadas, pero el resultado sera un lenguaje torpe y difcil de usar. Sera conveniente que en tal caso el
compilador genere la condicin i distinto de j.
El manejo de alias en presencia de punteros es ms complejo. La deteccin de alias ilegal entre dos punteros, causados por llamadas a
procedimientos, es similar al caso de las matrices o vectores. La referenciacin que exactamente igual que la indexacin de una matriz. Por
ejemplo, si p y q apuntan a la misma coleccin y p^ y q^ se pasan ambos como parmetros, para que no haya solapamiento es necesario que
se compruebe que p sea distinto de q.
22
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.
Activacin: dentro del alcance de la rutina
Ambiente de referencia
local
no local
global
EJEMPLO
Tipo
tipo: tipo de los parmetros
Signatura: permite especificar el tipo de una rutina
Una rutina fun que tiene como entrada parmetros e tipo T1, T2, Tn y devuelve un valor de tipo R, puede especificarse con la
siguiente signatura
23
4-
REPRESENTACION EN EJECUCION
Elementos en ejecucin
punto de retorno
ambiente de referencia
ambiente local
ambiente no local
Alias
Efecto lateral
Rutinas recursivas
Segmento de cdigo: el mismo para todas las instancias de la unidad
Registro de activacin: uno nuevo para cada activacin
Comunicacin entre rutinas
Ambiente no local
Parmetros
Rutinas genricas
las rutinas factorean un segmento de cdigo, que se ejecutar customizada a travs de los parmetros.
rutina genrica: se puede parametrizar el tipo (C++, Ada)
Una rutina genrica es un molde.
Alias y sobrecarga
24
25
Def 3.14 (Lenguaje de modelo basado en pila). La memoria de datos requerida no puede precisarse en compilacin, pero es
predecible y respeta un comportamiento LIFO. Las variables declaradas en cierto mbito se alocan en memoria cuando
dicho mbito es alcanzado en ejecucin, y se las desaloca cuando se sale de el (variables denominadas automticas). En
general, la implementacin de estos lenguajes utiliza una pila, pero no es estrictamente parte de la semntica del lenguaje.
Ver lenguajes C3 y C4.
BASADO EN PILA: espacio predecible
el espacio se deduce del cdigo.
el espacio es predecible
nuevos elementos:
current: direccin base del registro de activacin de la unidad que se este ejecutando actualmente
free: prxima direccin libre en la pila
link dinmico puntero a la direccin base del registro de activacin de la rutina llamadora
valor de retorno
C3: moldes
27
28
C4 rutinas anidadas
acceso al ambiente no-local
29
Def 3.15 (Lenguaje de modelo dinmico). Estos lenguajes tienen un uso de memoria impredecible. Las variables se alocan
dinmicamente cuando se lo requiere durante la ejecucin (variables dinmicas). Para manejar la memoria libre no existe
una poltica predenida (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 dinmicamente durante la ejecucin.
A: VECTOR (0..N);
B: VECTOR(1..M);
C5
31
32
RUTINAS
il presente desde los primeros lenguajes ensambladores son las subprogramas, unidades de programa
con llamada explicita, que responden al esquema de call/return.
raciones primarias integradas en el
lenguaje
digo.
33
Parmetros
uetes de ADA
les locales
Si es una funcin debe darse el tipo de lo que ser retorna
stintamente en la lista.
En Ada pueden mezclarse ambos mtodos.
En C++ y en Ada los parmetros formales pueden tener valores por defecto, con lo cual a veces no es necesario listarlos
todos en la invocacin.
ama
Hay diferentes formas de transmitir los parmetros hacia y desde el programa llamado.
Desde el punto de vista semntico los parmetros formales pueden ser:
al
real
34
Por Valor:
inicializar el correspondiente parmetro 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 parmetro real no se modifica.
Por Resultado:
armetro formal se copia al parmetro real al terminar de ejecutarse la unidad llamada.
ser diferentes.
35
Por Valor/Resultado:
vacin de la unidad llamadora.
da el
parmetro real recibe una copia de lo que tiene el parmetro formal.
metro formal es una referencia local.
Por Referencia:
Desventajas:
Por Nombre:
lece la ligadura entre parmetro formal y
parmetro real en el momento de la invocacin pero la ligadura de valor se difiere hasta el momento en que se lo utiliza.
Si el dato a compartir es:
) solo
producir un resultado.
deberan ser siempre modo IN. (no Pascal y C, si ADA)
Ejemplo: Ada
Pascal y Modula solo permiten escalares
Pero como las variables de tipos no primitivos son todas referencias a variables annimas en el Heap, el paso por valor de
una de estas variables constituye en realidad un paso por referencia de la variable.
variable no local de tipo primitivo (a travs de los parmetros formales), a no ser que dicha variable forme parte de una
estructura mayor (una instancia de una clase) que se pasa por referencia.
Ejemplo: supongamos un subprograma que acepta como parmetro una referencia o puntero a un arreglo de enteros, y cuyo efecto sea
ordenarlo segn un criterio de ordenacin, que no siempre es el mismo.
Sera natural que el nombre del procedimiento que ordena sea un parmetro.
Ada no contempla los subprogramas como valores. Utiliza unidades genricas.
Pascal permite que una referencia a un procedimiento sea pasada a un subpograma
C permite pasaje de funciones como parmetros.
37
Ambiente de referencia para las referencias no locales dentro del cuerpo del subprograma pasado como parmetro.
pasado
como parmetro.
subprograma que tiene el parmetro formal
subprograma.
Ejemplo: SNOBOL.
parmetro real. Se utiliza en los lenguajes con alcance esttico y estructura de bloque.
natural.
.
entes que
estticamente no le eran visibles.
en el momento de la invocacin a la unidad con parmetro
subprograma adems del puntero al cdigo, se indique cual debe ser su ambiente de referencia, es decir un puntero al lugar de la cadena esttica
correspondiente.
genrica es una unidad que puede instanciarse con parmetros formales de distinto tipo.
Como todas las unidades instanciadas tienen el mismo nombre, da la sensacin que una unidad pudiera ejecutarse con parmetros de
distinto tipo.
d genrica que ordena elementos de un arreglo, podr instanciarse para elementos enteros, flotantes, etc.
38
1)
2)
Temp:=i;
i := a(i);
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 posicin del arreglo sin modificar y se
modifica otra. Luego entonces no se intercambian los valores. Esto se da pues los parmetros pasados son un ndice y un elemento de un arreglo.
Ejemplo donde se manifiesta la necesidad de tener toda la informacin que debe ligarse en el caso de
parmetros subrutina.
39
El envo de subprogramas como parmetros requiere pasar al menos una referencia al segmento de cdigo del parmetro real. Sin embargo el
subprograma pasado puede acceder tambin a variables no locales siendo necesario entonces pasar informacin acerca del entorno no local del
subprograma parmetro real. Hay tres opciones para saber cual es el ambiente correcto de referencia para ejecutar el subprograma pasado como
parmetro:
1)
2)
3)
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;
Begin
X := 4;
subx;
End;
Begin
X := 1;
Sub3;
End;
-
En los casos en que el subprograma declara un subprograma y adems lo paso como parmetros las opciones 2 y 3 son las mismas.
Diferencias y puntos de contacto entre el pasaje de parmetros por nombre y el de procedimientos.
Diferencias
1)
2)
3)
4)
Momento de ligadura: en el pasaje de parmetro 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 invocacin.
Modo: el pasaje de parmetro por nombre es modo IN/OUT. En parmetro rutina depende del tipo de la rutina (procedimiento o funcin) y
de los tipos de parmetros que estos tienen.
Utilizacin de procedimientos adicionales: los parmetros por nombre utilizan los thunks y los parmetros rutina no.
Informacin requerida: en el pasaje por nombre se pasa la direccin de memoria del parmetro. En cambio en el caso de parmetros rutina
se pasan los parmetros de la rutina, el ambiente de referencia y el encabezamiento de la rutina y una referencia al segmento de cdigo del
parmetro 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 activacin y al
segmento de cdigo. Los dos realizan una llamada a un subprograma.
Comparacin 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 representara el parmetro de la misma y A el nombre de la rutina.
Tambin se puede tomar como que A(i) es la referencia del elemento en la posicin i del arreglo A.
El problema de utilizar indistintamente parntesis para los parmetros de una rutina y la posicin de un elemento de un arreglo hace que
tengamos una misma sintaxis con diferente semntica y esto atento contra la simplicidad de los lenguajes.
Por esta razn algunos lenguajes utilizan el uso de [] para referirse a posiciones de arreglos y () para los parmetros de los mdulos.
40
SISTEMAS DE TIPOS
conjunto de reglas para estructurar y organizar los tipos
componente semntica 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
41
No fuertemente tipados
Pascal: parmetro procedimiento
No fuertemente tipados
Pascal: los limites de una dimensin son parte de la definicin de la matriz. Sin embargo el acceso a un elemento
requiere una comprobacin dinmica 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 subndices se ignoran
en traduccin y esto no afecta la verificacin esttica.
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 semnticas 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
Tipos compatibles
Equivalencia por nombre: dos variables son del mismo tipo si y solo si estn declaradas juntas (no para ADA) o si estn
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 sintcticas y no semnticas, no se da la nocin de comportamiento idntico (TADS)
La equivalencia por nombre extiende naturalmente los tipos predefinidos
42
CONVERSIN DE TIPO
un tipo es compatible con otro si
es equivalente
se puede convertir
el compilador genera el cdigo necesario
Coercin: significa convertir un valor de un tipo a otro.
Clasificacin 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 prdida de informacin
TIPOS DE DATOS
SISTEMA DE TIPOS: conjunto de reglas usadas por un lenguaje para estructurar y organizar sus tipos.
Componente semntica importante.
capturan la naturaleza de los datos del problema que sern manipulados por los programas.
los lenguajes de programacin se diferencian en la definicin y comportamiento de los tipos.
43
Dominio de un tipo
DOMINIO DE UN TIPO: conjunto de valores posibles
Un literal es una constante cuyo valor esta dado por una secuencia de smbolos.
dominio son solamente valores atmicos entonces el tipo es escalar, elemental o primitivo.
Si los valores del dominio estn compuestos por un conjunto de datos entonces el tipo es estructurado o
compuesto
TIPOS PREDEFINIDOS
hard subyacente y son una abstraccin de l.
Invisibilidad de la representacin
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 programacin:
Modificabilidad
Verificacin esttica
Si el lenguaje exige la declaracin de variables, entonces las operaciones ilegales sobre una variable pueden ser
detectadas por el traductor
Desambiguar operadores
Operadores polimrficos - genricos -o sobrecargados
uso moderado de la sobrecarga puede contribuir a la simplicidad de un
Lenguaje de Programacin.
uso excesivo de la sobrecarga puede generar programas que sean difciles de entender
Control de precisin
algunos lenguajes permiten controlar la precisin de los datos numricos.
ADA. Enteros: shortinteger,integer ,large integer
optimizacin de espacio para el traductor
insertar chequeos en tiempo de ejecucin para monitorear los valores de las variables.
44
NUMEROS: CONVERSIONES
Capacidad de adecuar los tipos cuando estn mezclados.
* Por tabla
* Por el tipo del resultado: examinar la expresin determinando el tipo del resultado y convirtiendo todo a ese tipo.
* Prefijo de tipo: se convierte al tipo indicado. Pedido de conversin explcito
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 manipulacin
Pascal: char y string como vectores de char con un mximo de longitud fija.
SNOBOL4 es un lenguaje especializado en el manejo de texto.
Modula y C los string son arreglos de char
45
ELEMENTALES: ENUMERADOS
DOMINIO: lista de constantes simblicas
OPERACIONES: comparacin, asignacin y posicin en la lista
ENUMERDOS - SUBRANGOS
Dominio: subconjunto de un tipo entero o de un enumerado
Operaciones: hereda las operaciones del tipo original.
Chequeo dinmico
COMPUESTOS CONSTRUCTORES
Constructores: mecanismo que proveen los lenguajes para agrupar datos denominados compuestos
Dato compuesto:
nombre nico
componente accesible a travs de un mecanismo de seleccin.
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.
Definicin de Constructores como modelos matemticos (abstracta)
definicin
mtodo de acceso
operaciones de campos
operaciones de tipo
inicializacin de los campos
PRODUCTO CARTESIANO
CORRESPONDENCIA FINITA
UNION
RECURSION
PRODUCTO CARTESIANO
46
CORRESPONDENCIA FINITA
Rutina: su definicin es la regla de asociacin de valores del tipo DT en valores del tipo RT.definicin intencional: que
especifica una regla (la intencin) en lugar de una asociacin individual
Arreglos: definicin extensional, los valores de la funcin son explcitamente enumerados
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 integer
type colores = (rojo,verde,azul,amarillo)
type vec_color = array(colores) of integer
var 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 dinmicos
-los elementos del dominio o el rango no tienen que ser del mismo tipo.
-el dominio y el rango pueden verse como la unin de todos los tipos
Algol-68
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. Inicializacin
Los lenguajes pueden permitir inicializaciones, lo proveyendo un mecanismo para construir valores constantes
de 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}
48
7. Operaciones de tipo
49
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) direccin no valida
OPERACIONES (l-valor r-valor r-valor de la variable apuntada)
asignacin de valor: generalmente asociado a la alocacin de la variable apuntada
referencias
-a su valor (direccin) operaciones entre punteros
-al valor de la variable apuntada: dereferenciacin implcita
INSEGURIDAD DE LOS PUNTEROS
1. violacin de tipos
2. referencias sueltas - referencias dangling
3. liberacin de memoria: objetos perdidos
4. punteros no inicializados
5. punteros y uniones discriminadas
6. alias
1 - Violacin 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 direccin de una variable dinmica que fue
desalocada. Si luego se usa el puntero producir error.
50
51
TADS
EL ROL DE LA ABSTRACCION
mecanismo para manejar la complejidad
descubrir caractersticas esenciales y suprimir las que no lo son.
principio bsico de la abstraccin: informacin oculta.
IMPLEMENTACION
52
53
Compatibilidad de tipos
Tipo compatible: reglas semnticas 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 estn declaradas juntas (no para ADA)
o si estn 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
CONVERSIN DE TIPO
un tipo es compatible con otro si
es equivalente
se puede convertir
Coercin: significa convertir un valor de un tipo a otro.
Clasificacin 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
54
Sentencias de Control
Estructuras de control
Son el medio por el cual los programadores pueden determinar el flujo de ejecucin entre los componentes de un
programa
Hay dos tipos de niveles:
o A NIVEL DE SENTENCIAS:
Cuando el flujo de control se pasa entre unidades.
Intervienen los pasajes de parmetros.
o A NIVEL DE UNIDAD
SECUENCIA
SELECCIN
ITERACION
Secuencia
Es el flujo de control ms simple.
Indica la ejecucin de una sentencia a continuacin de otra.
Delimitadores
Pascal tiene como delimitador al punto y coma (;).
Smalltalk tiene por delimitados al punto ( . ).
Fortran permite solo una instruccin por lnea. En consecuencia el delimitador seria el retorno de
carro o enter.
Sentencias compuestas
La sentencia compuesta es una abstraccin en una sentencia de una coleccin de
sentencias. Generalmente estn compuestas por un par de delimitadores y una secuencia,
y no todos los lenguajes la implementan de la misma manera.
Pascal, Algol : <instruccin _ compuesta>= Begin <secuencia -instruccin> end
C, C++: <instruccin _ compuesta>= {secuencias _ instruccin}
Ada (bloque): <instruccin _ compuesta> = declare <sec_declaracion> Begin
<secuencia_instruccin> end;
55
En C
A=B
La evaluacin seria:
1- Se resuelve la ecuacin de la derecha(en este caso es el valor contenido en b)
2- Se guarda el valor resultado en la posicin de memoria correspondiente a la
variable a.
3- Se retorna el resultado de la asignacin, que es el valor de b. En este caso no
ocurre nada, pero si tuviramos x=a=b esto asignara tambin el valor de b a x
Seleccin
Esta estructura de control permite que el programador pueda expresar una eleccin entre un cierto nmero
posible de sentencias alternativa.
Evolucin de IF
FORTRAM:
If (condicin lgica) sentencia
Si la condicin es verdadera ejecuta la sentencia
ALGOL:
If (condicin lgica) then sentencia1
else sentencia2
Este permite tomar dos caminos posibles. El problema que tiene es que es ambiguo, ya que no se
establece a quien corresponde el ultimo else, con los if abierto.
PASCAL, C , PL/I
IF 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.
Seleccin mltiples
PASCAL: Incorpora que los valores de la expresin 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 las
alternativas puestas.
ADA: Combina los aspectos positivos del Pascal y de Algol68.
Las expresiones pueden ser de tipo entero o enumeracin.
Se debe estipular en las selecciones todos los valores posibles que puede tomar la
expresin.
Tiene la clusula Others que se puede utilizar para representar a aquellos valores que no se
especificaron explcitamente.
Select
when(A) sentencia1;
when(B) sentencia2;
............
Otherwise sentencia n;
End;
Reemplazara a los If anidados
ALGOL 68: La expresin debe ser de tipo entera
La rama i-sima corresponde se ejecuta cuando la expresin da el valor i.
Tiene una clusula opcional Out que se ejecuta cuando el valor dado por la expresin no
est 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 mltiple seleccin provee el constructor Switch.
Cada rama es etiquetada por uno o ms valores constantes.
Cuando se coincide con una etiqueta del Switch se ejecutan las sentencias asociadas y se
contina con las sentencias de las otras entradas.
Existe la sentencia break, que provoca la salida del switch.
Tiene una clusula default que sirve para los casos que el valor no coincida con
ninguna de las opciones establecidas. Esta opcin es optativa y si no est, y
ninguno de los casos coincide, no se toma ninguna accin.
Switch Operador {
case + :result:= a + b;
case -: result:= a - b;
default : result:= a * b; }
break;
break;
57
Iteracin
Este tipo de instrucciones se utilizan para representar aquellas acciones que se repiten un
cierto nmero de veces.
FORTRAM :
Sentencia Do de Fortran
Do 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 haba llegado al lmite al final del bucle, o
sea 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 de
los lmites superior e inferior, porque los evala en el comienzo. Adems el alcance de la variable
de control es solo en el bucle.
Pascal no permite que se toquen ni los valores del lmite inferior y superior, ni el valor de la
variable 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 clusulas loop y end loop.
Permite el uso de la sentencia Exit para salir del loop y la variable de control NO necesita
declararse, se declara implcitamente cuando se entra al bucle y desaparece cuando se sale de
l.
C, C++ se compone de tres partes: una inicializacin y dos expresiones.
La primer expresin (2do. Parmetro) es el testeo que se realiza ANTES de cada iteracin. Si no
se coloca el for queda en LOOP.
En el primer y ltimo parmetro se pueden colocar sentencias separadas por comas.
58
Estructuras de Control
Son el medio por el cual los programadores pueden determinar el flujo de ejecucin entre
los componentes de un programa
A Nivel de Unidad: Cuando el flujo de control se pasa entre unidades. Intervienen los pasajes
de parmetros.
A Nivel de Sentencia: Se dividen en tres grupos
Secuencia
Es el flujo de control ms simple.
Indica la ejecucin de una sentencia a continuacin de otra.
El delimitador ms general y ms usado es el ; .
Hay lenguajes que no tienen delimitador y establecen que por cada lnea vaya una
instruccin. Se los llaman orientados a lnea. 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 Asignacin
Sentencia que produce cambios en los datos de la memoria.
Asigna al l-valor de un dato objeto el r-valor de una expresin.
Sintaxis en diferentes lenguajes
59
60
En otros lenguajes
Incorpora que los valores de la expresin 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 las alternativas
puestas
61
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 evala en el comienzo. Adems el alcance de la variable de control es solo en el bucle.
y end loop. Permite el uso de la sentencia Exit para
salir del loop y la variable de control NO necesita declararse, se declara
implcitamente cuando se entra al bucle y desaparece cuando se sale de l
62
La primera expresin (2do Parmetro) es el testeo que se realiza ANTES de cada iteracin. Si no se
coloca el for queda en LOOP.
En el primer y ltimo parmetro se pueden colocar sentencias separadas por comas
63
- En Phyton:
while condicin :
sentencia1
sentencia2
Until
- En Pascal:
repeat
sentencia
until condicin;
- En C, C++:
do sentencia;
while (condicin);
64
Excepciones
Definicin de Excepcin
Es un estado de un proceso anmalo. Se da cuando una unidad est incapacitada para proceder de una manera tal
que se llegue a una terminacin normal.
La incapacidad del programa para detectar estados anmalos 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.
Definicin de Manejador
Realiza un procesamiento especial requerido cuando se detecta una excepcin. Una excepcin se levanta cuando
ocurre un evento asociado y en ese momento se llama al manejador que lo resuelve.
Modelos de Excepciones
-
U2
.
.
.
raise excepcin()
.
.
.
.
.
.
U3
call return
Una unidad U1 levanta una excepcin Excecpcion(), la cual implcitamente llama a un manejador que se ejecuta, y
dependiendo del modelo del manejo de excepcin; si es por reasuncin, se devuelve el control a la siguiente
instruccin donde se produjo la excepcin. En cambio, si es por terminacin, se aborta la ejecucin de U1.
En la unidad U2, se hace un llamado explcito a la unidad U3, la cual se ejecuta, y luego devuelve el control
a la instruccin siguiente a su llamado.
65
Estructura
Try
<instrucciones>
catch (<excepcion1>)
<tratamiento1>
catch (<excepcion2>)
<tratamiento2>
finally
<instuccionesFinally>
Propagacin de Errores
-
Si durante la ejecucin las <instrucciones> se lanza una excepcin de tipo <excepcion1> se ejecuta las
instrucciones <tratamiento1>, si fuera de tipo <excepcion2 >se ejecuta las instrucciones <tratamiento2>,
y as hasta que se encuentre una clusula catch que pueda tratar la excepcin producida.
Si no se encuentra ninguna clusula catch y la instruccin TRY estuviese anidada dentro de otra, se
mirara en el catch de su try padre y se repetira el proceso.
Si al final se recorren todos los trys padres y no se encuentra ningn catch compatible, entonces se
buscara en el cdigo desde el que se llamo al mtodo que produce la excepcin.
Si as se termina llegando al mtodo que inicio el hilo donde se produce la excepcin y tampoco all se
encuentra ningn 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 informacin sobre la excepcin lanzada ya vista.
Cuando en <instrucciones> se lance una excepcin que sea tratada por el catch de algn try (ya sea suyo
de del try padre), SE SEGUIRA EJECUTANDO A PARTIR DE LA INSTRUCCIN SIGUIENTE A
ESE 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 excepcin en <instrucciones>, se ejecutara la <instruccinFinally> despus de haber
ejecutado todas las <instrucciones>.
Si se produce una excepcin se ejecutara la <instruccinFinally> despus de tratar la excepcin pero antes
de seguir ejecutando por la instruccin siguiente al Try que la trato. Si en un try no se encuentra un catch
66
compatible, antes de pasar a buscar en su try padre o en su mtodo llamante padre se ejecutaran las
<instruccionesFinally>.
Solo si dentro de un bloque finally se lanza una excepcin se ABORTA la ejecucin del mismo. Dicha
excepcin seria propagada al try o al mtodo llamante padre del try que contuviera el finally.
Aunque los bloques catch y finally son opcionales, toda instruccin try ha de incluir al menos un bloque catch o un
bloque finally.
Relevantar la Excepcin
Respecto al uso de TROW, hay que sealar que hay una forma extra de usarlo que solo es valida dentro del cdigo de tratamiento de la excepcin
(cdigo <tratamiento i > de la clusula catch). Esta forma consiste en seguir simplemente esta sintaxis:
TROW;
En este caso lo que se hace es relanzar la misma excepcin que se capturo en el bloque catch dentro de cuyo
cdigo de tratamiento se usa el thow;. Hay que precisar que la excepcin relanzada es precisamente la
capturada, y aunque en el bloque catch se la modifique a travs de las variables que la representa, la versin
relanzada ser la versin original de la misma y no la modificada.
Adems cuando se relanza una excepcin en un try con clusula finally, antes de pasar a reprocesar la
excepcin en el try padre del que la lanz se ejecutara dicha clusula.
Derivacin de la Clase System Excepcin
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 descripcin de la razn de la excepcin.
Inner Exception: Es una propiedad de solo lectura que contiene el inner excepcin para una excepcin. Si no
es null, indica que la corriente excepcin fue levantada en respuesta a otra excepcin. Las excepciones que
ocasionan la excepcin corriente esta disponible en la propiedad Inner Exception.
JAVA
Criterio de Terminacin
Terminacin.
Lanzamiento de Excepcin
THROW ObjentoExcepcion;
donde: objetoExcepcion es un objeto de una clase que se extiende de la clase Exception.
Las excepciones lanzadas por un mtodo que pueda hacerlo deben recogerse en bloque Try/catch o
Try/finally.
67
Estructura
Try {
<instrucciones> }
catch (<excepcion1>)
{ <tratamiento1>}
catch (<excepcion2>){
<tratamiento2>}
finally
{<instuccionesFinally>}
Observacin: en el cdigo catch tenemos que asegurarnos de poner cdigo que no genere excepciones.
Propagacin de Errores
Igual que C#.
Excepciones Definidas por el Usuario
Algo parecido ocurre si un mtodo lanza una excepcin de un tipo que no tiene listado en su especificacin
de excepciones, entonces llama a la funcin UNEXCTED( ) la cual por defecto llama a TERMINATE (
).Pero de igual manera que con TERMINATE( ) podemos definir nuestra propia funcin UNEXPECTED( )
con SET_ UNEXPECTED( )
68
Estructura
Try {
<instrucciones> }
catch (<tipo excepcion1> <variable1>)
{ <tratamiento1>}
catch (<tipo excepcion2><variable2>){
<tratamiento2>}
Observacin: Si se especifica catch() se capturar cualquier excepcin. No tiene Finally
Propagacin de Errores
RAISE <NombreExcepcionALanzar>
Ej: Raise EXCEPCIN-1
Captura de la Excepcin
En Ada cada bloque puede contener una coleccin opcional de manejadores de excepciones y son declaradas al final
del bloque.
Cada manejador es una secuencia de instrucciones. Esta secuencia aparece precedida de:
Palabra clave WHEN + un parmetro opcional denominado OCURRENCIA terminado en dos puntos + los nombres
de las excepciones manejadas + el smbolo =>
Estructura
Begin
.
When nomExcep1 => Manejador1
When nomExcep2 => Manejador2
..
When OTHERS => Manejador (opcional);
End;
Propagacin de Errores
-
Si la unidad que alcanza una excepcin proporciona un manejador para la misma, se transfiere inmediatamente el
control al manejador; se saltan las acciones al punto donde se alcanzo la excepcin, se ejecuta el manejador y se
termina la unidad.
Si la unidad que se esta ejecutando, U, no proporciona un manejador, se propaga la excepcin:
Si una excepcin se propaga fuera de su mbito de visibilidad puede ser capturada utilizando un
manejador por defecto (When Others..).
Si queda alguna excepcin sin manejar en la tarea de entorno, el programa ser finalizado.
Relevantar la Excepcin
En algunas ocasiones, las acciones que se realizan como consecuencia de una excepcin necesita ser
estructurada en dos niveles:
-
70
Clu
Criterio de Terminacin
Terminacin.
Lanzamiento de Excepcin
SIGNAL <NombreExcepcionALanzar>
Ej: SIGNAL EXCEPCION-2
Captura de la Excepcin
Las excepciones solo pueden ser alcanzadas en los procedimientos.
Las excepciones que un procedimiento puede sealar han de declararse en la cabecera del mismo.
El manejador de excepciones se relaciona con las sentencias por medio de la clusula Except, segn la sintaxis:
<sentencia> Except <lista de manejadores> end; donde: <sentencia> puede ser cualquier sentencia compuesta.
Si la ejecucin de un procedimiento que ha sido llamado en sentencias alcanza una excepcin, se cede el control a la
lista de manejadores que tiene el siguiente formato:
Se termina el procedimiento donde se levanto la excepcin y devuelve el control al llamante inmediato donde se debe
encontrar el manejador.
Si el manejador se encuentra en ese mbito y la excepcin 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 dicho
manejador.
Si <sentenci_i > contiene una llamada a una unidad, pudiera ser que se alcanzara otro excepcin. En tal caso el control se
pasa a la sentencia Except que incluye <sentencias>. Si la excepcin alcanzada no figura en ninguna lista de excepciones se
repite el proceso para las sentencias incluidas estticamente. En caso de no encontrar un manejador en el procedimiento que
hizo la llamada, el procedimiento seala implcitamente a la excepcin predefinida FAILURE y devuelve el control.
Si el manejador no se encuentra en ese mbito, la excepcin se propaga estticamente. Esto significa que el proceso se repite
para las sentencias incluidas estticamente.
Relevantar Excepcin
71
PL/1
Criterio de Terminacin
Reasuncin: Cada vez que se produce la excepcin la maneja el manejador y devuelve el control a la
sentencia siguiente de donde se levanto.
Lanzamiento de Excepcin
Las excepciones son llamadas CONDITIONS.
SIGNAL CONDITION <NombreExcepcionALanzar>
Ej: SIGNAL EXCECPCION-3
Captura de la Excepcin
Los manejadores se declaran con la sentencia ON:
ON CONDITION (Nombre-Excepcion) Manejador
El manejador puede ser un bloque o una instruccin.
Este lenguaje aloca los manejadores en forma de pila, por eso cuando una unidad levanta una excepcin tiene
prioridad el ultimo manejador que se carg en la pila. Los manejadores se desalocan de la pila cuando termina la
unidad en la que estn definidos.
Los manejadores se ligan dinmicamente con las excepciones. Una excepcin siempre esta ligada con el ultimo
manejador definido.
El alcance de un manejador de una excepcin termina cuando finaliza la ejecucin de la unidad donde fue declarado.
El alcance de un manejador de una excepcin se acota cuando se define otro manejador para esa excepcin y se
restaura cuando se desactiva los manejadores que la enmascaran.
Propagacin de Errores
Al producirse una excepcin(bien automticamente o por una sentencia Signal):
- Se ejecuta el manejador vinculado actualmente a la excepcin como si fuera un subprograma llamado
explcitamente desde ese punto. Por lo tanto a no ser que se especifique lo contrario en el manejador, el
control volver al punto donde se produjo la sentencia Signal.
Excepciones Predefinidas
Este lenguaje tiene una serie de excepciones ya predefinidas con un manejador asociado. Son las Built_in
Exception. Ej:divisionporCero.
- A las Built_in se les puede redefinir los manejadores de la siguiente manera:
On Nombre-Built-in Begin
end;
-
72
Pasaje de Parmetros
En PL/1 las excepciones no pueden devolver parmetros a sus manejadores.
Por consiguiente solo se puede establecer el flujo de informacin mediante el uso de variables globales, lo
que por otro lado puede ser una practica poco recomendable. Adems no siempre es posible utilizar
variables globales.
DELPHI
El cdigo llamado "bloque protegido" es el que se coloca entre el Try y el finally o entre Try y el except , este cdigo es el que
va 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, esto
aunque ocurra un error o finalice exitosamente y el segundo slo 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 de
excepciones. Estos objetos son los que se colocan entre las palabras reservadas on y do con el fin de manejar el tipo de excepcin
que se desee. Se pueden declarar tantas expresiones on y do como excepciones se quieran manejar, o tambin se pueden declarar
manejadores genricos de excepciones omitiendo las declaraciones on y do.
Hay casos en que una excepcin no puede ser manejada, para esto se utiliza la palabra reservada raise con el fin de levantar la
excepcin de nuevo; de esta forma la excepcin salta al manejador de excepciones anterior, si no encuentra un manejador sigue
recursivamente cayendo en los contextos de excepcin definidos, si no existe quien la maneje primero despliega un mensaje de
error y en muchos casos puede abortar el programa.
73
Excepciones de Usuario
Delphi permite definir en una forma muy sencilla los tipos de excepcin que necesite el programador para hacer ms
seguro su programa.
SIGNAL Y THROW
Objetivo
Transferir el control al llamado de la excepcin.
Diferencias
SIGNAL
Signal( ) ignora los contexto de excepcin que estn a su mismo nivel, y siempre retorna a los de algn
procedimiento llamado, causando la terminacin del procedimiento en que aparece el Signal( ).
THROW
Throw( ) siempre retorna al contexto de excepcin ms inmediato, aunque este contexto se encuentre en el
mismo procedimiento en que se invoco al Throw().
Incorporacin del manejo de excepciones a la hora de disear un lenguaje.
Es importante incorporar el manejo de excepciones a la hora disear un lenguaje para que los programas sean
tolerantes a fallos y no funcionen correctamente solo bajo ciertas circunstancias. Un buen modelo a utilizar es el de
terminacin ya que provee ms seguridad debido a que al producirse la excepcin se aborta el programa yno
temrmina normalmente pudiendo de esta manera dejar un estado inconsistente como puede ocurrir con el modelo de
reasuncin.
Excepciones
Una excepcin es un proceso anmalo. Es un proceso que la unidad dnde se provoc est incapacitada para atenderlo de manera que
termine normalmente.
Algunas cuestiones a tener en cuenta en el diseo de un lenguaje de programacin que contenga manejo de excepciones:
Cmo se maneja una excepcin y cul es su mbito?
Cmo se alcanza una excepcin?
Cmo especificar la unidades (manejadores de excepciones) que se han de ejecutar cuando se alcanza las excepciones?
A dnde se cede el control cuando se termina de atender las excepciones?
Qu accin 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.
74
PL/1
De los primeros lenguajes, ste fue el nico que incorpor el
Cmo lo implementa?
Utiliza el criterio de Reasuncin. Cada vez que se produce la excepcin, la maneja el manejador y devuelve el control a
la sentencia siguiente de dnde se levant.
La excepciones son llamadas CONDITIONS
Los manejadores se declaran con la sentencia ON:
ON CONDITION(Nombre-excepcin) Manejador
El manejador puede ser una instruccin o un bloque
Las excepciones se alcanzan explcitamente con la palabra clave
Signal condition(Nombre-excepcin)
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 divisin 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 explcitamente
Algunas built-in se habilitan por defecto.
Se habilita anteponiendo el nombre de la built-in al bloque, instruccin o procedimiento al que va a afectar.
Se deshabilita anteponiendo NONombre de la built-in al bloque, instruccin o procedimiento al que va a afectar
Ej: (ZERODIVIDE) begin
(NOZERODIVIDE) begin
end
end
Los manejadores se ligan dinmicamente con las excepciones. Una excepcin siempre estar ligada con el ltimo manejador
definido.
El alcance de un manejador de una excepcin termina cuando finaliza la ejecucin de la unidad donde fue declarado
El alcance de un manejador de una excepcin se acota cuando se define otro manejador para esa excepcin y se restaura cuando se
desactivan los manejadores que la enmascararon.
No permite que se pasen parmetros a los manejadores
Desventajas:
Los dos ltimos puntos provocan
75
ADA
Cmo lo implementa?
Utiliza el criterio de Terminacin. Cada vez que se produce una excepcin, se termina el bloque,
procedimiento, paquete o tarea dnde se levant y se ejecuta el manejador asociado.
La excepciones se definen en la zona de definicin de las variables, colocando la palabra Exception.
Ejemplo: e:exception;
El alcance de una excepcin es igual que el de las variables.
Las excepciones se alcanzan explcitamente con la palabra clave raise
Raise Nombre-excepcin
Los manejadores pueden encontrarse en el
Procedimiento, Paquete o Tarea. Forma de definirlos:
Este lenguaje tiene cuatro excepciones ya predefinidas con su manejador asociado. Estas son: Constrainterror, Program-error, Storage-error y Tasking-error.
Propagacin de errores:
Al producirse una excepcin:
Se termina la unidad, bloque, etc. dnde se alcanza la unidad.
Si el manejador se encuentra en ese mbito, se ejecuta.
Si el manejador no se encuentra en ese lugar la excepcin se propaga dinmicamente. Esto significa que
se vuelve a levantar en otro mbito.
Una excepcin se pude levantar nuevamente colocando solo la palabra raise. Se vuelve a levantar la ltima
excepcin levantada.
76
CLU
Cmo lo implementa?
Utiliza el criterio de Terminacin.
Las excepciones en Clu solamente pueden ser alcanzadas por los procedimientos.
Las excepciones estn asociadas a sentencias.
La excepciones que un procedimiento puede alcanzar se declaran en el encabezamiento del procedimiento.
Las excepciones se alcanzan explcitamente con la palabra clave signalSignal Nombre-excepcin
Los manejadores se colocan al lado de una sentencia que puede ser simple o compleja. Forma de definirlos:
77
C++
Cmo lo implementa?
Utiliza el criterio de Terminacin.
Las excepciones pueden alcanzarse:
Implcitamente, ejemplo: Divisin por cero
Explcitamente a travs 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(NombreDeLaExcepcin)
Al levantarse una excepcin dentro del bloque Try el control se transfiere al manejador correspondiente.
Al finalizar la ejecucin del manejador la ejecucin contina como si la unidad que provoc la excepcin fue
ejecutada normalmente.
Permite pasar parmetros al levantar la excepcin.
Ejemplo: Throw (Ayuda msg);
Se est levantando la excepcin Ayuda y se le pasa el parmetro 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 excepcin que no est contemplada en el listado de la Interface?
En este caso NO se propaga la excepcin y una funcin especial se ejecuta automticamente: 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 excepcin. Si una excepcin es repetidamente propagada y no machea con
ningn manejador, entonces una funcin terminate() es ejecutada automticamente.
coloc en su interface una lista vaca (throw())?
Significa que NINGUNA excepcin ser propagada.
78
JAVA
Cmo lo implementa?
Al igual que C++ las excepciones son objetos que puden ser alcanzados y manejados por manejadores adicionados
al bloque donde se produjo la excepcin.
Diferencias:
TODAS las excepciones (chequeadas) que puedan ser alcanzadas explcitamente por la rutina, DEBEN ser
listadas en la interface de la misma o ser manejadas por un manejador.
Justificacin de esta obligatoriedad: El usuario de la rutina DEBE conocer qu excepciones puede alcanzar la
misma.
79
Delphi
Delphi presenta dos estructuras de manejo de excepciones:
Uno utilizado bsicamente para liberar recursos. Su representacin 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 conexin activa, en caso que se trabaje con un
archivo que est en una red, etc.
80
81
Python
82
Encapsulamiento y abstraccin.
Intrpretes y Compiladores.
Paradigmas de lenguajes (imperativo, orientado a objetos, funcional,
lgico).
83
84