Está en la página 1de 68

Programación Estructurada

Fragmento de la 1ra Parte del


Curso de Programación Estructurada del
Dr. Pedro Pablo González - UAM Cuajimalpa
Contenido Sintético
Resolución de
problemas y los
algoritmos

De los algoritmos
a los programas
Constructores
fundamentales de
la programación
estructurada

Fundamentos del
diseño modular
Algoritmos
iterativos de
búsqueda y
ordenamiento

Archivos

Introducción a los
tipos de datos
abstractos
Introducción al
análisis y diseño
estructurado del
software
Resolución de problemas y los
algoritmos

• Concepto de algoritmo
• Propiedades de un algoritmo
• El rol del algoritmo en la resolución de
problemas
Concepto de algoritmo (I)

Un algoritmo es un procedimiento para resolver un problema.


Éste describe un conjunto finito y ordenado de pasos, reglas o
instrucciones para producir la solución a un problema dado.
Un algoritmo puede ser definido como una secuencia de
instrucciones bien definidas y efectivas, y finaliza con la
producción del resultado esperado a partir de las entradas
dadas.
Concepto de algoritmo (II)

Algoritmo

Especificación Acción o Acción o Descripción


de las procedimiento ... procedimiento del resultado o
entradas efecto

Acción o Acción o
procedimiento procedimiento
Un primer ejemplo de algoritmo

El siguiente algoritmo calcula el área y el perímetro de un rectángulo

Datos de entrada: b y a (base y altura) Análisis resumido


Datos de salida: ar y pe (área y perímetro) del problema
Procesos: ar = b*a, pe = 2*(b + a)

1. Inicio
2. Leer base y altura (b, a)
3. ar <- b*a
4. pe <- 2*(b + a)
5. Escribir “Área del rectángulo: ”, ar
6. Escribir “Perímetro del rectángulo: ”, pe
7. Fin
Características de los algoritmos (I)

• Son precisos. Deben indicar el orden de realización de


cada paso, así como especificar con precisión las
entradas y cada paso o etapa
• Están bien definidos. Etapas bien definidas y concretas
• Exactitud y corrección. Se debe demostrar que el
algoritmo resuelve el problema para el cual fue escrito
• Son finitos. Deben tener un número finito de pasos y
deben terminar
• Deben describir el resultado o efecto final. La salida
esperada del algoritmo debe estar completamente
especificada
Características de los algoritmos (II)

Partes que debe describir la definición de un algoritmo:

• Entrada
• Proceso
• Salida

Entrada Proceso Salida


Características de los algoritmos (III)

• Son independientes tanto del lenguaje de programación


en el que se expresan como del hardware en que se
ejecutan los programas

Expresado Ejecutado
en en
Código en C
Computadora con
los compiladores
de C y Pascal
Algoritmo Código en
Pascal

Computadora con
Código en el compilador de
Fortran Fortran
El rol del algoritmo en la resolución de
problemas (I)

La resolución de un problema en computadora requiere como


paso previo el diseño de un algoritmo que especifique el
procedimiento para resolver el problema. Es decir, antes de
codificar un programa se requiere diseñar el algoritmo.

Descripción y Programa en un
Diseño del
análisis del lenguaje de
algoritmo
problema programación
Ejemplos de algoritmos (I.a.)

Definición del problema


Calcular los porcentajes de hombres y mujeres en un grupo de N
deportistas

Análisis del problema


Datos a considerar:
• Sexo de la persona (S)
• Número de personas del sexo masculino (CM)
• Número de personas del sexo femenino (CF)
• Total de deportistas (N)
• Porcentaje de hombres (PM)
• Porcentaje de mujeres (PF)
Ejemplos de algoritmos (I.b.)

Datos de entrada:
• Total de deportistas (N)
• Sexo de la persona (S)

Datos de salida: Continuamos con el


análisis del problema
• Porcentaje de hombres (PM)
• Porcentaje de mujeres (PF)

Procesos:
• Contar la cantidad de personas del sexo masculino (CM = CM + 1)
• Contar la cantidad de personas del sexo femenino (CF = CF + 1)
• Calcular el porcentaje de hombres en el grupo (PM = CM/N*100)
• Calcular el porcentaje de mujeres en el grupo (PF = CF/N*100)
Ejemplos de algoritmos (I.c.)

Algoritmo:

1. Inicio
2. Inicializar en cero el total de personas del sexo masculino: CM <- 0
3. Inicializar en cero el total de personas del sexo femenino: CF <- 0
4. Inicializar en cero el total de personas procesadas: TP <- 0
5. Leer total de deportistas (N)
6. MIENTRAS TP < N
1. Leer sexo de la persona (S)
2. SI S =‘M’, entonces CM <- CM + 1
3. SI S = ‘F’, entonces CF <- CF + 1
4. Incrementar en 1 el contador: TP <- TP + 1
FIN-MIENTRAS
Ejemplos de algoritmos (I.d.)

Algoritmo (continuación):

7. Calcular porcentaje de hombres en el grupo: PM <- CM/N*100


8. Calcular porcentaje de mujeres en el grupo: PF <- CF/N*100
9. Escribir “Porcentaje de hombres en el grupo: ”, PM
10. Escribir “Porcentaje de mujeres en el grupo: ”, PF
11. Fin

En este algoritmo se puede apreciar el uso de las tres


estructuras de control de la programación estructurada:
• Estructura secuencial
• Estructura selectiva
• Estructura iterativa
Diseño de algoritmos (I)

Diseño del
algoritmo

Diseño Representación
descendente Refinamiento gráfica
Diseño de algoritmos (II)

Diseño descendente (I)


El diseño descendente (top down) es un procedimiento de
refinamiento iterativo de un problema, en el cual se parte del
mayor nivel de abstracción del problema (sistema o tarea) y
se prosigue hacia los niveles inferiores a través de un proceso
de descomposición del problema en subproblemas.
En el diseño descendente se parte de una visión estructural
del problema sin especificar detalles para ninguna de sus
partes componentes. Cada componente del sistema es
entonces refinado, mostrando más detalles en cada nivel de
refinamiento.
Diseño de algoritmos (III)

Diseño descendente (II)

Problema

Subproblema Subproblema Subproblema ... Subproblema

Subproblema Subproblema Subproblema Subproblema Subproblema Subproblema

Subproblema Subproblema
Diseño de algoritmos (IV)

Diseño descendente (III)


El diseño descendente efectúa una relación entre las
sucesivas etapas de refinamiento, de forma tal que éstas se
relacionen unas con otras a través de los flujos de entrada y
de salida de información.
X Y
P

U P2 P
X Y
P1 P4
V Q
P3

V R S Q
P31 P32 P33
Diseño de algoritmos (V)

Diseño descendente (IV)


Ejemplo: el problema del cajero automático
Cajero
automático

Lectura y Selección de Selección de


validación tipo de tipo de ... Finalizar
del NIP cuenta operación

Consulta de Retiro de Traspaso


saldo efectivo entre cuentas ... Pago de
propias servicios
Diseño de algoritmos (VI)

Refinamiento del algoritmo (I)


Comúnmente, la primera versión de un algoritmo no
constituye una versión completa ni específica del mismo. El
refinamiento del algoritmo se refiere a la conversión del
primer esbozo/versión del algoritmo en una versión más
detallada y completa, haciendo los pasos del algoritmo más
específicos. Este proceso conduce a la obtención de un
algoritmo claro, preciso y completo.
Diseño de algoritmos (VII)

Refinamiento del algoritmo (II)


Algoritmo para el cálculo de la media de la edad y peso de un grupo de
estudiantes (primer esbozo)

1. Inicio
2. Leer cantidad de estudiantes
3. Leer edad y peso de los estudiantes
4. Calcular las medias de la edad y del peso
5. Escribir resultados
Diseño de algoritmos (VIII)

Refinamiento del algoritmo (III)


Algoritmo para el cálculo de la media de la edad y peso de un grupo de
estudiantes (versión refinada)
1.Inicio
2.Leer cantidad de estudiantes (N)
3. NE <- 0, SE <- 0, SP <- 0

4. MIENTRAS NE < N
1.Leer edad y peso del estudiante (E, P)
2. SE <- SE + E
3. SP <- SP + P
4.Incrementar el contador: NE <- NE + 1
FIN-MIENTRAS
Diseño de algoritmos (IX)

Refinamiento del algoritmo (IV)


Algoritmo para el cálculo de la media y desviación estándar de la edad y
peso de un grupo de estudiantes (versión refinada)

5. Calcular la media de la edad: ME <- SE/N


6. Calcular la media del peso: MP <- SP/N
7. Escribir “La edad promedio es: ”, ME
8. Escribir “El peso promedio es: ”, MP
9. Fin
Diseño de algoritmos (X)

Especificación y representación gráfica del


algoritmo

• Pseudocódigo
• Diagramas de flujo
• Diagramas de Nassi-Schneiderman (N-S)
Diseño de algoritmos (XI)

Especificación del algoritmo: pseudocódigo (I)

El pseudocódigo es un lenguaje de especificación de


algoritmos, comúnmente con una sintaxis para las estructuras
de control similar a la expresada en el lenguaje de
programación al que será traducido el algoritmo. Cuando un
algoritmo es expresado en pseudocódigo, entonces la
traducción de éste al lenguaje de programación seleccionado
resultará relativamente fácil.

Especificación
Algoritmo en Programa
pseudocódigo
Diseño de algoritmos (XII)

Especificación del algoritmo: pseudocódigo (II)


Las acciones y las estructuras de control se representan en el
pseudocódigo con palabras reservadas del inglés, similares a las utilizadas
en los lenguajes de programación estructurada. Entre estas palabras
reservadas, las más usadas son:

start
read Comúnmente, la
write escritura del
pseudocódigo
if-then-else
requiere el uso de la
while-end indentación de las
repeat-until diferentes líneas
end
Diseño de algoritmos (XIII)

Especificación del algoritmo: pseudocódigo (III)

start
read N
NE <- 0
Algoritmo para el
SE <- 0
cálculo de la media y
SP <- 0 desviación estándar
while NE < N de la edad y peso de
read E, P un grupo de
SE <- SE + E estudiantes (versión
en pseudocódigo)
SP <- SP + P
NE <- NE + 1
end while
Diseño de algoritmos (XIV)

Especificación del algoritmo: pseudocódigo (IV)

Cuando se usa el
pseudocódigo como
ME <- SE/N lenguaje de
MP <- SP/N especificación de un
write “La edad promedio es: ”, ME algoritmo, el
programador puede
write “El peso promedio es: ”, MP concentrarse en la
end lógica y en las
estructuras de control
sin preocuparse por
la sintaxis y reglas
del lenguaje de
programación.
Diseño de algoritmos (XV)

Representación gráfica del algoritmo:


diagramas de flujo (I)
Un diagrama de flujo (flowchart, del inglés) es una técnica de
representación gráfica de la lógica o pasos de un algoritmo. El diagrama
de flujo consiste de un conjunto de símbolos (tales como rectángulos,
paralelogramos, rombos, etc.) y flechas que conectan estos símbolos.
Los símbolos representan las diferentes acciones que se pueden
ejecutar en un algoritmo (lectura, asignación, decisión, escritura, etc.),
mientras que las flechas muestran la progresión paso a paso a través
del algoritmo.
Con la aparición de los lenguajes de programación estructurada el uso
de los diagramas de flujo ha disminuído considerablemente, dando paso
a otras técnicas de representación (como por ejemplo, diagramas N-S,
tablas procesos-entidades, diagramas estructurales, diagramas de
burbujas, etc. ) que capturan en un modo más adecuado la esencia y
principios de la programación estructurada.
Diseño de algoritmos (XVI)

Representación gráfica del algoritmo:


diagramas de flujo (II)
Símbolo Representación Significado

Flechas o líneas de flujo Indica el sentido de


ejecución de las acciones
Rectángulo Proceso o acción a realizar
(por ejemplo, asignación)
Paralelogramo Representa una entrada o
salida
Rombo Representa el constructor de
selección (decisión lógica)
Rectángulo redondeado Representa el inicio y fin del
diagrama
Círculo Se usa como conector entre
dos partes del diagrama
Diseño de algoritmos (XVII)

Representación gráfica del algoritmo:


diagramas de flujo (III)
1.Inicio
2.Leer cantidad de estudiantes (N) Inicio
3. NE <- 0, SE <- 0, SP <- 0
4. MIENTRAS NE < N Leer N
1.Leer edad y peso del estudiante (E, P)
2. SE <- SE + E NE <- 0
3. SP <- SP + P
4.Incrementar el contador: NE <- NE + 1
SE <- 0
FIN-MIENTRAS
5. Calcular la media de la edad: ME <- SE/N
6. Calcular la media del peso: MP <- SP/N SP <- 0
7. Escribir “La edad promedio es: ”, ME
8. Escribir “El peso promedio es: ”, MP 1
9. Fin
Diseño de algoritmos (XVIII)
1
Continuación (IV)
Leer E, P

1.Inicio
SE <- SE+E
2.Leer cantidad de estudiantes (N)
3. NE <- 0, SE <- 0, SP <- 0 SP <- SP+P
4. MIENTRAS NE < N
1.Leer edad y peso del estudiante (E, P) NE <- NE+1
2. SE <- SE + E
Si
3. SP <- SP + P NE <N
4.Incrementar el contador: NE <- NE + 1 No

FIN-MIENTRAS ME <- SE/N


5. Calcular la media de la edad: ME <- SE/N
6. Calcular la media del peso: MP <- SP/N MP <- SP/N

7. Escribir “La edad promedio es: ”, ME


Escribir
8. Escribir “El peso promedio es: ”, MP ME, MP
9. Fin
Fin
Diseño de algoritmos (XIX)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (I)
El diagrama de Nassi-Schneiderman (N-S) (también conocido como
diagrama de Chapin) es una técnica de representación gráfica de
algoritmos que combina la especificación en pseudocódigo con la
representación gráfica del diagrama de flujo.
Cuando se usa el diagrama N-S un algoritmo es representado con un
rectángulo dividido en franjas o bandas horizontales, donde cada banda
representa una acción a realizar.
La especificación de los pasos del algoritmo se hace utilizando las
palabras reservadas ya vistas en el pseudocódigo, mientras que los
símbolos utilizados en el diagrama corresponden a cada tipo de
estructura de control: secuencia, selección, iteración.
Diseño de algoritmos (XX)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (II)
Representación gráfica N-S de un algoritmo Palabras reservadas
comúnmente usadas en la
Start especificación de las acciones
(pueden ser también usadas
<acción 1> en español)
start
<acción 2> read
write
<acción 3>
if-then-else
... while-end
repeat-until
End
end
Diseño de algoritmos (XXI)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (III)
Representación de la estructura de control secuencial
Declaración de variables
Asignación
tipo : nombre_variable
Variable = expresion
Ejemplos:
Ejemplos:
entero: edad
edadPromedio = sumaEdad/N
real: edadPromedio,
pesoPromedio = sumaPeso/N
pesoPromedio
sexo = ‘M’
caracter: sexo
Deporte = “atletismo”
cadena: deporte
Diseño de algoritmos (XXII)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (IV)
Representación de la estructura de control secuencial
Instrucción leer
leer <lista de identificadores de variables>
Ejemplos:
leer edad, peso
leer deporte
Instrucción escribir
escribir <lista de variables y constantes>
Ejemplos:
escribir edadPromedio, pesoPromedio
escribir deporte
Diseño de algoritmos (XXIII)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (V)
Algoritmo para calcular el área y Diagrama N-S
perímetro de un rectángulo Inicio
1. Inicio real: b, a, ar, pe
2. Leer base y altura (b, a)
3. ar <- b*a leer b, a
4. pe <- 2*(b + a)
5. Escribir “Área: ”, ar ar = b*a
6. Escribir “Perímetro: ”, pe pe = 2(b + a)
7. Fin
Escribir “área: ”, ar

Escribir “perímetro: ”, pe

Fin
Diseño de algoritmos (XXIV)
Representación gráfica del algoritmo:
diagramas de Nassi-Schneiderman (N-S) (VI)
Representación de la estructura de control condicional
Algoritmo Diagrama N-S
si <condición> entonces condición
<acción 1> Sí No

si_no
<acciones> <acciones>
<acción 2>

selector

Estructura
de control otro 1 2 3 . .. n
condicional
CASE
Diseño de algoritmos (XXV)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (VII)
Representación de la estructura de control condicional

Diagrama N-S
Algoritmo
S = ‘M’
Leer sexo de la persona (S) Sí No
SI S =‘M’, entonces CM <- CM + 1
SI S = ‘F’, entonces CF <- CF + 1 
Incrementar el contador: TP <- TP + 1 CM = CM + 1 CF = CF + 1
Diseño de algoritmos (XXVI)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (VIII)
Representación de la estructura de control de iteración
Representación en el diagrama N-S Representación en el diagrama N-S
de la estructura MIENTRAS de la estructura HACER-MIENTRAS
Mientras condición Repetir o
Hacer

<acciones que se repiten> <acciones que se repiten>

condición
Diseño de algoritmos (XXVII)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (IX)
Representación de la estructura de control de iteración

Representación en el diagrama N-S


de la estructura PARA

Para variable = valor_inicial hasta valor_final hacer

<acciones que se repiten>


Diseño de algoritmos (XXVIII)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (X)
start Inicio
read N real: SE, SP
NE <- 0 entero: NE

SE <- 0 NE = 0
SE = 0
SP <- 0
SP = 0
while NE < N
Mientras NE <N
read E, P
SE <- SE + E leer E, P

SP <- SP + P SE = SE + E
SP = SP + P
NE <- NE + 1
NE = NE + 1
end while
Diseño de algoritmos (XXIX)

Representación gráfica del algoritmo:


diagramas de Nassi-Schneiderman (N-S) (XI)
ME <- SE/N ME = SE/N
MP <- SP/N MP = SP/N
write “Edad promedio: ”, ME Escribir “Edad promedio”, ME
write “Peso promedio: ”, MP Escribir “Peso promedio”, MP
end Fin

Lo que hemos hecho en estas últimas dos transparencias


ha sido la especificación en un diagrama N-S del
algoritmo para el cálculo de la edad promedio y peso
promedio de un grupo de N personas
De los algoritmos a los programas

• Lenguajes de programación: niveles, sintaxis y


semántica
• Estrategias de contrucción de programas
Lenguajes de programación: niveles,
sintaxis y semántica (I)

Niveles de lenguajes de programación (I)

Lenguajes declarativos

Lenguajes de alto nivel

Lenguajes
ensambladores

Lenguajes de máquina
Lenguajes de programación: niveles,
sintaxis y semántica (II)

Niveles de lenguajes de programación (II)


Lenguajes de máquina
Fue el primer lenguaje utilizado en la programación de computadoras.
Constituye la capa más interna en los niveles de lenguaje en la
computación. Se podría decir que el lenguaje de máquina es el único que
entiende directamente la computadora. Este lenguaje se expresa a través
del alfabeto binario, el cual consta solo de los símbolos 0 y 1. El lenguaje de
máquina es dependiente de la computadora.

Lenguajes ensambladores
El lenguaje ensamblador es una representación simbólica del lenguaje de
máquina asociado. Es decir, cada computadora tiene un lenguaje
ensamblador propio. El lenguaje ensamblador usa palabras nemotécnicas
para representar cada instrucción (cadenas de bits) del lenguaje de
máquina asociado.
Lenguajes de programación: niveles,
sintaxis y semántica (III)
Niveles de lenguajes de programación (III)
Lenguajes de alto nivel
Constituyen los lenguajes de programación más utilizados. Son lenguajes
independientes de la computadora. Un programa escrito en lenguaje de alto
nivel puede ser ejecutado en cualquier computadora, siempre que ésta
disponga del traductor o compilador del lenguaje en cuestión. Los
programas pueden ser escritos y comprendidos de una forma más sencilla,
dada la aproximación de estos lenguajes con el lenguaje natural. Se
caracterizan por proporcionar librerías de uso frecuente (entrada/salida,
funciones matemáticas, manejo de cadenas, etc.). Ejemplos de estos
lenguajes son: Pascal, Fortran, C, C++, Java, Ada, Lisp y Prolog.

Lenguajes declarativos
Son aquellos lenguajes en los que se indica a la computadora qué es lo que
debe hacer, qué es lo que se desea obtener o qué es lo que se está
buscando. Son comúnmente lenguajes de órdenes, donde se expresa lo
que hay que hacer en lugar de cómo hacerlo. Ejemplos de lenguajes
declarativos son SQL y Prolog.
Lenguajes de programación: niveles,
sintaxis y semántica (IV)

Lenguaje de programación =
Léxico + Sintaxis + Semántica
Lenguajes de programación: niveles,
sintaxis y semántica (V)
Aspectos a considerar en el diseño e implementación de los
lenguajes de programación (I)

• Léxico
• Sintaxis
• Semántica
• Gestión de memoria
• Manejo de excepciones
• Implementación
• Pragmática
Lenguajes de programación: niveles,
sintaxis y semántica (VI)
Aspectos a considerar en el diseño e implementación de los
lenguajes de programación (II)
Léxico
Es el conjunto de categorías gramaticales que definen el vocabulario del
lenguaje de programación. Comúnmente, el léxico de un lenguaje de
programación posee las siguientes categorías gramaticales:
• Identifier (nombre de variables, nombre de constantes, nombre de
funciones, etc.)
• Literal (números enteros y decimales)
• Operator (+, -, *, /. etc.)
• Separator (; . , etc.)
• Keyword (while, read, write, if, for, case, int, real, etc.)
Lenguajes de programación: niveles,
sintaxis y semántica (VII)
Aspectos a considerar en el diseño e implementación de los
lenguajes de programación (III)

Sintaxis
La sintaxis de un lenguaje de programación es la definición gramatical de
lo que constituye un programa en dicho lenguaje. La sintaxis se especifica
en términos de un conjunto de reglas que rigen la construcción de los
programas. La definición de la sintaxis de un lenguaje de programación
debe ser clara, concisa y formal. La sintaxis del lenguaje de programación
se describe a partir de otros lenguajes, llamados metalenguajes. Uno de
los metalenguajes más difundidos es el formalismo BNF (Backus-Naur
Form), una gramática libre de contexto.
Lenguajes de programación: niveles,
sintaxis y semántica (VIII)
Aspectos a considerar en el diseño e implementación de los
lenguajes de programación (IV)
Semántica
Se refiere al significado de los programas. Es el conjunto de reglas que
permiten determinar el significado de cualquier construcción del lenguaje.
La semántica asocia un significado a cada posible construcción gramatical
del lenguaje.

Gestión de memoria
La gestión de memoria se refiere al proceso de asignar valores a la
memoria, considerando tanto las características estáticas como dinámicas
de dichos valores. Los valores pueden ser asignados a una de tres
categorías de memoria: memoria estática, la pila en tiempo de ejecución y
el montículo.
Lenguajes de programación: niveles,
sintaxis y semántica (IX)
Aspectos a considerar en el diseño e implementación de los
lenguajes de programación (V)
Manejo de excepciones
Una excepción es una condición detectada por una operación la cual no se
puede resolver en el contexto de la operación. Dos procesos básicos se
asocian al manejo de excepciones: (1) lanzamiento de la excepción y (2)
captura de la excepción. El lanzamiento de una excepción es señalar que
se ha producido una excepción, mientras que la captura de la excepción
consiste en proporcionar una forma de manipular dicha excepción,
transfiriéndose el control del programa al manipulador de la excepción.
Lenguajes de programación: niveles,
sintaxis y semántica (X)
Aspectos a considerar en el diseño e implementación de los
lenguajes de programación (VI)

Implementación
Cómo se ejecutan los programas.

Pragmática
Se refiere a los aspectos prácticos del uso de los programas.
Lenguajes de programación: niveles, sintaxis
y semántica (XI)
Lenguaje natural
Aplicación
Lenguaje de programación
Compilador/Intérprete
Máquina virtual
Contexto en el
Sistema operativo
que se ubican
los lenguajes de Lenguaje
de máquina
programación
Lenguajes de programación: traductores de
lenguajes (I)

Traductores de
lenguaje

Intérpretes Compiladores

Un traductor de lenguaje es un programa que traduce a código de


máquina un programa fuente escrito en un lenguaje de alto nivel.
Lenguajes de programación: traductores de
lenguajes (II)

Intérpretes
Un intérprete es un traductor que recibe como entrada un programa fuente,
lo traduce y lo ejecuta. Un intérprete traduce y ejecuta una instrucción en
código fuente, a la vez. Los programas interpretados generalmente son
más lentos en ejecución que los programas compilados.

Traducción y
Programa fuente Intérprete ejecución línea
a línea
Lenguajes de programación: traductores de
lenguajes (III)

Compiladores
Un compilador traduce un programa fuente escrito en lenguaje de alto
nivel al lenguaje de máquina de la computadora. El programa traducido a
lenguaje de máquina es almacenado como código objeto.

Programa fuente Compilador Programa objeto


Lenguajes de programación: traductores de
lenguajes (IV)

Fases de la compilación de un programa

Programa
Programa Programa ejecutable
fuente Compilador objeto Linker
en lenguaje
de máquina

Analizador Analizador Analizador Generador Optimizador Generador


léxico sintáctico semántico de código de código de código
intermedio objeto
Paradigmas de programación (I)

• Programación imperativa
• Programación funcional
• Programación lógica
• Programación orientada a objetos
• Programación concurrente
• Programación guiada por eventos
Paradigmas de programación (II)

Programación imperativa
El programa se define como una serie de acciones o pasos, cada uno de
los cuales recibe una entrada, ejecuta un cálculo, o produce como
resultado una salida. La programación imperativa se basa en la asignación
de valores, en la utilización de variables para almacenar valores y en la
realización de operaciones con estos valores almacenados. Ejemplos de
lenguajes de programación imperativa son los lenguajes de alto nivel
(Fortran, C, Pascal, etc.) y los lenguajes ensambladores.

Programación funcional
Los programas están formados por una colección de definiciones de
funciones. Las funciones interactúan entre sí utilizando condicionales,
recursividad y composición funcional. Ejemplos de lenguajes de
programación funcional son Lisp y Scheme.
Paradigmas de programación (III)

Programación lógica
Un lenguaje de programación lógica es un tipo de lenguaje declarativo, en
el cual el programa está formado por un conjunto de declaraciones lógicas
(predicados, hechos). La ejecución de un programa consiste en aplicar
estas declaraciones para obtener todas las soluciones posibles a un
problema. El ejemplo clásico de lenguaje de programación lógica es
Prolog.

Programación orientada a objetos


El programa es una colección de objetos que interactúan entre sí a través
del paso de mensajes, los cuales comúnmente transforman el estado de
los objetos. Ejemplos de lenguajes orientados a objetos son Smalltalk,
C++, Eiffel y Java.
Paradigmas de programación (IV)

Programación concurrente
La programación se basa en la ejecución simultánea de procesos, ya sea
en una misma computadora con uno o varios procesadores, que en un
cluster de computadoras. El programa se define como una colección de
procesos cooperativos y asíncronos. Ejemplos de lenguajes concurrentes
son Linda y Fortran de alto rendimiento.

Programación guiada por eventos


El programa responde a eventos externos generados en un orden no
predecible. Los eventos comúnmente se generan a partir de acciones del
usuario en la pantalla (por ejemplo, clics del mouse o pulsaciones de
teclas), pudiendo existir también otras fuentes generadoras de eventos.
Ejemplos de lenguajes de programación guida por eventos son Visual
Basic y Java.
Estrategias de construcción de
programas (I)
Fases de construcción de un programa

Descripción
y análisis del
problema
Diseño del
algoritmo

Codificación
del programa

Ejecución del
programa

Validación del
programa
Estrategias de construcción de
programas (II)
Programación modular (I)
La filosofía subyacente de la programación modular es la descomposición
del programa en módulos independientes, cada uno de los cuales ejecuta
una única actividad o función. Cada módulo se analiza, se diseña, se
codifica y se verifica por separado. El programa es una jerarquía de
módulos, con un módulo principal (también llamado programa principal) con
una función de controlador. El módulo principal transfiere el control a los
módulos inmediatamente subordinados (o subprogramas), de modo que
éstos puedan ejecutar sus funciones. Una véz que el módulo subordinado
haya completado su tarea, devolverá nuevamente el control al módulo
controlador.
La descomposición de un módulo en submódulos continúa hasta que se
llegue a un punto en que el módulo resultante tenga sólo una tarea
específica que ejecutar (lectura, salida de resultados, procesamiento de
datos o control de otros módulos).
Estrategias de construcción de
programas (III)
Programación modular (II)
Módulo
principal

Módulo 1 Módulo 2 Módulo 3 ... Módulo N

Módulo 11 Módulo 12 Módulo 31 Módulo 32 Módulo N1 Módulo N2

Módulo 311 Módulo 312


Estrategias de construcción de
programas (IV)
Programación modular (III)
Ejemplo de descomposición de un programa en módulos:
programa para el cálculo de estadísticas descriptivas

Cálculo de
estadísticas

Cálculo de
Lectura de medidas de Cálculo de
Generación de Generación de
datos tendencia medidas de tablas gráficos
central dispersión resumen
Estrategias de construcción de
programas (V)
Programación estructurada (programación sin goto)
La programación estructurada es un conjunto de técnicas que
incorporan:

Diseño modular

Diseño descendente (top-down)

Estructuras de control básico:


secuencia, selección y repetición