Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
( )
La nica forma de demostrar la correccin de un programa es
mediante la verificacin de programas. La solucin anterior se
enmarca dentro de las tcnicas de verificacin formal
2) Verificacin formal:
Consiste en demostrar mediante algn mtodo la correccin de un
programa. ste es un enfoque anlogo a la demostracin de teoremas.
La correccin es una nocin relativa. Cuando decimos que un programa
es correcto nos referimos respecto a alguna especificacin. Hay dos
tipos de correccin:
- Correccin parcial. Se supone que el programa termina.
- Correccin total. Se demuestra que el programa
termina.
Tcnica para verificar programas. Con los asertos (expresiones lgicas)
expresamos las condiciones que se le imponen a los datos. Dependiendo
del punto del algoritmo en que aparezcan sern:
Precondiciones. Son asertos que deben ser verdad antes
de ejecutar un algoritmo o parte del mismo.
Postcondiciones. Son asertos que expresan las
propiedades de los resultados de los algoritmos.
Asertos intermedios Son asertos situados en distintos
puntos del algoritmo.
* Notacin: {P} S {Q} (Especificacin pre/post)
S -> Algoritmo
{P} -> Precondicin de S
{Q} -> Postcondicin de S
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 26
Interpretacin: Si P es verdad y se ejecuta S, entonces (suponiendo
que S termina) Q es verdad.
Verificar un programa consiste en demostrar que cumple su
especificacin pre/post.
I. 6. LENGUAJES DE PROGRAMACIN
Como dijimos en la introduccin un lenguaje de programacin establece
las reglas para describir programas. La clasificacin de los lenguajes de
programacin se puede hacer atendiendo a diferentes criterios:
1) Nivel de abstraccin
2) Propsito del lenguaje
3) Paradigma de programacin
1) Clasificacin segn el nivel de abstraccin:
Lenguajes de bajo nivel:
Cercanos a la mquina.
Bajo nivel de abstraccin. Programas expresados en
trminos de la arquitectura y operaciones bsicas
que realiza un computador (ej. Lenguaje mquina,
Ensamblador,..)
Lenguajes de alto nivel:
Cercanos al problema
Alto nivel de abstraccin. Programas expresados en
trminos del problema a resolver, en un lenguaje
cercano al programador (ej. Lisp, Prolog, Java, C++,
Ada,)
2) Clasificacin segn el propsito del lenguaje:
Cientficos: para realizar clculos matemticos, manipulacin
de frmulas,Ej. Algol, Fortran
Ingenieriles: diseo de hardware, control de sistemas,
simulaciones,..Ej. Ada, Dynamo, Simscript,..
Gestin: contabilidad, bases de datos,Ej. Cobol, Dbase,..
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 27
Inteligencia Artificial: sistemas expertos, planificacin,..Ej.
Lisp, Planner,..
Multipropsito: aplicaciones de propsito general. Ej. Pascal,
Modula-2, C,..
3) Clasificacin segn el paradigma de programacin. Un paradigma de
programacin es un modelo que engloba a ciertos lenguajes que
comparten:
Elementos estructurales: con qu se confeccionan los
programas?
Elementos metodolgicos: cmo se confecciona un
programa?
E. Estructurales E. Metodolgicos
Imperativo Subprogramas Refinamientos
sucesivos
Orientado a Objeto Objetos Orientado a Objetos
Declarativo:
Lgico y Funcional
Funciones (Funcional)
Hechos y reglas (Lgica)
Anlisis de Relaciones
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 28
En la figura anterior podemos ver la genealoga de diversos lenguajes. En
los orgenes de la programacin es cuando se produce el mayor caos.
Posteriormente se produce una convergencia gradual hacia ciertos modelos
que se imponen (imperativo, orientado a objetos,). Como ocurre en la
naturaleza hay una seleccin natural. Los lenguajes menos adecuados
tienden a desparecer, y son sustituidos por otros lenguajes ms aptos.
I.6.1. Reconocimiento de Lenguajes. Gramticas
Asociada a cada lenguaje de programacin, y al igual que en los lenguajes
naturales, existe una gramtica que establece la forma en la que se pueden
1950
1955
1960
1965
1970
1975
1980
1985
1990
1995
2000
Fortran 9x
Fortran 77
Algol 60
Algol 68
Simula 67
Cobol
Fortran I
Fortran IV
Bas ic
Pas cal
Smalltalk
Ens amblador
Modula 2 ADA
Eiffel
C. Maquina
Scheme
Has kell
Prolog
Lis p
Programacin Imperativa Programacin Declarativa
Funcional Lgica
B
C
C++
J ava
Delphi
Algol 58
Simula I
Programacion Orientada a Objetos
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 29
construir y reconocer sentencias de un programa (frases) correctas o
pertenecientes a dicho lenguaje. El objetivo es que la sintaxis o notacin
usada para describir los lenguajes de programacin no se ambigua.
Una gramtica se define como una tupla G = (N, T, A, R), donde:
N: smbolos no terminales o categoras sintcticas del lenguaje,
definibles en funcin de otros ms simples.
T: smbolos terminales o palabras del lenguaje. No se pueden
definir en trminos de otros ms elementales.
A: Axioma, que es un smbolo no terminal.
R: Reglas de derivacin que indican cmo se combinan dichos
smbolos anteriores para construir frases o palabras correctas de
acuerdo al lenguaje generado por la gramtica.
Entre las diversas formas de expresar la gramtica de un lenguaje, las ms
utilizadas son la notacin BNF y los diagramas sintcticos de CONWAY.
Ejemplo: Identificadores en un determinado lenguaje. Un identificador
est formado por una secuencia de cualquier longitud de letras minsculas
o nmeros, pero ha de comenzar obligatoriamente por una letra minscula.
Ejemplo de identificadores vlidos: hola, a123, p5hy. Sin embargo, 457, o
4tyu no seran identificadores vlidos.
La siguiente gramtica nos permite distinguir entre los identificadores
vlidos o que pertenecen al lenguaje generado por la gramtica, y los no
vlidos o no perteneciente al lenguaje. La expresaremos primero en
notacin BNF y despus en notacin Conway:
a) Notacin BNF:
G = (N, T, A, R)
N = {<ident>, <letra>, <digito>}
T = {a,b,c,d,,z,0,1,9}
A = <ident>
R= 1.<letra> ::= a | b | c | . . . | z
2. <dgito> ::= 0 | 1 | 2 | 3 | . . . | 9
3. <ident> ::= <letra>{<letra>|<dgito>}
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 30
b) Notacin Conway: En esta notacin las Reglas, R, se representan de
forma grfica.
Smbolo terminal
Smbolo no terminal
Regla: conjunto de smbolos unidos por flechas. Cada camino
de izquierda. a derecha es una derivacin vlida dentro del
lenguaje
<letra>
<digito>
<ident>
I.6.2. Traductores, compiladores e intrpretes
Traductor: programa que convierte un programa escrito en un determinado
lenguaje A a su equivalente escrito en otro lenguaje B.
a b c z
0 1 9
letra
letra
dgito
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 31
Compilador: traductor para convertir un programa escrito en un lenguaje
de alto nivel a su equivalente escrito en lenguaje mquina. Traduce el
programa globalmente y genera un programa objeto como resultado de la
traduccin. El resultado puede ser lenguaje mquina de un computador
real (Ej. compilador de C++) o bien de una mquina virtual (Ej.
compilador de Java).
Intrprete: programa para conseguir que un programa escrito en lenguaje
de alto nivel sea ejecutado "directamente" en la mquina. En realidad ir
traduciendo y ejecutando cada instruccin del programa, sin generar
programa objeto alguno.
Esquema general de un compilador
El funcionamiento de un compilador se divide en dos fases:
Anlisis: se comprueba el lxico, la sintaxis y la semntica del
programa fuente.
Sntesis: se genera un cdigo intermedio y se optimiza, generando as
el cdigo definitivo en lenguaje mquina.
Fase de Anlisis: En esta fase se hace uso de:
Rutina de errores: que manejar los errores detectados durante la fase
de anlisis, mostrndolas al final al programador por pantalla.
Tabla de smbolos: En esta tabla es donde se almacenan los objetos
usados en el programa: variables, constantes,.. De cada uno de ellos
se almacena su tipo, nombre, valor o posicin que ocupa en
memoria.
Adems se divide en tres partes:
1) Anlisis Lexicogrfico:
-Genera una secuencia de smbolos denominados "tokens"
(unidades lxicas) que ser la entrada de la siguiente subfase.
- Elimina comentarios.
- Elimina espacios en blanco, separadores, tabuladores,...
- Avisa de los errores lexicogrficos que detecte.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 32
2) Anlisis Sintctico:
- Analiza la estructura de la frase (ya formada por "tokens") y
comprueba si pertenece al lenguaje. Para ello crea un rbol
sintctico a partir de la secuencia de tokens de la fase anterior
- El rbol sintctico sirve como base para el posterior anlisis
semntico y la generacin de cdigo
- Avisa de los errores sintcticos que detecte
3) Anlisis Semntico
- Comprueba que una frase sintcticamente correcta lo es
tambin semnticamente.
- Ejemplo: asignacin de valores de distintos tipos, o
aplicacin de operadores a tipos apropiados
- Avisa de los errores semnticos que detecte
Fase de Sntesis: la fase se sntesis se divide en tres partes:
1) Generacin de cdigo intermedio:
- Cdigo independiente de la mquina para la que se hace el
compilador.
- Debe ser fcil de producir a partir del anlisis y fcil de
traducir al cdigo definitivo
e) Optimizacin de cdigo:
- Genera un cdigo ms compacto y eficiente.
f) Generacin de cdigo:
- Pasa del cdigo intermedio (posiblemente optimizado) al
cdigo mquina final.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 33
Programa
Fuente
Anlisis
Lexicogrfico
Anlisis
Sintctico
Anlisis
Semntico
Programa
Objeto
Generacin
cdigo
intermedio
Optimizacin
de
cdigo
Generacin
de
cdigo
A
N
A
L
I
S
I
S
S
I
N
T
E
S
I
S
Rutinas
Errores
Tabla
Smbolos
Gestin
de
Tablas Otras
Tablas
I. 7. VISIN GENERAL DE UN SISTEMA INFORMTICO
En la siguiente figura se muestra un esquema simplificado de un
sistema informtico mediante una estructura en capas o niveles:
Software de Aplicaciones (Proc. Textos, Dibujo, Prog. C++ )...)
Software de Sistema (Eclipse, Oracle...)
Sistema Operativo (UNIX, Windows, ...)
Hardware
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 34
Ya que en la seccin I.4 describimos la estructura funcional de los
computadores, vamos a describir a continuacin la estructura del software:
Software de aplicacin:
Programas de usuario: son programas destinados a
resolver problemas especficos reales y que
normalmente son realizados por el propio usuario
del computador.
Programas verticales: son programas que logran
resolver problemas similares a un conjunto de
usuarios que pertenecen al mismo colectivo
profesional o sector. Ej. programas de contabilidad
general, programas de arquitectura (autocad),
Paquetes estndar: programas que pueden ser tiles
a numerosos colectivos y resuelven problemas que
se pueden tratar de forma comn. Ej. procesadores
de texto, programas de diseo grfico, ...
Software de Sistema: conjunto de programas que
proporcionan servicios para la utilizacin o desarrollo de
programas, pero que en s no resuelven el problema final
del usuario.
Lenguajes, entornos de programacin y traductores
(IDE, Entorno integrado de desarrollo).
Soporte y sistema de gestin de datos (DBMS).
Conjunto de programas que permiten organizar
grandes volmenes de informacin, y facilitan su
manipulacin y acceso.
Entornos grficos de usuario (GUI). Conjunto de
programas que permiten la comunicacin con el
usuario a travs de elementos grficos y textuales.
Sistema Operativo (OS): Conjunto de programas que
controlan y facilitan el uso del Hardware.
E.T.S. de Ingeniera Informtica Dpto. de Lenguajes y C. de la Computacin
Fundamentos de la Programacin Tema I. Introduccin a la Programacin 35
I.7.1. Entorno integrado de desarrollo
Un entorno de desarrollo integrado o IDE (acrnimo en ingls de
Integrated Development Environment), es un programa informtico
compuesto por un conjunto de herramientas de programacin.
Puede dedicarse en exclusiva a un slo lenguaje de programacin o
bien, poder utilizarse para varios. ste es el caso de Eclipse, al que
mediante plugins se le puede aadir soporte de lenguajes adicionales.
Eclipse ser el IDE que usaremos en el laboratorio para realizar
nuestras prcticas de programacin.
Componentes:
- Un editor de texto.
- Un compilador.
- Un depurador.
- ...