Tema 2
Tema 2
Informática
Tema 2
Programación de Ordenadores
1
Contenidos
Introducción
Metodología de la programación
Resolución de problemas con el ordenador
Análisis de requerimientos
Etapa de diseño
Implementación, validación y mantenimiento
Descripción de algoritmos
Lenguaje algorítmico
Pasos para diseñar un algoritmo sobre un problema
Programación modular
Programación estructurada
Lenguajes de programación
Elementos básicos de la programación
Estructura de los programas
Lenguajes de programación. Evolución
Traductores
2
Introducción
Para trabajar con un sistema informático nos hace falta un
ordenador (Hardware) y unos programas (Software).
Se aplican técnicas ingeniería a ambos:
Ingeniería de Computadores
Ingeniería de Software (incluye Metodología Programación)
3
Introducción
Los ordenadores ejecutan rápida y de forma precisa
operaciones lógicas y matemáticas.
4
Metodología de la programación
Estudio de procedimientos y/o métodos para resolver
problemas con computadoras, independientemente de un
lenguaje de programación concreto y del ordenador
donde se va a implementar.
5
Metodología de la programación
Si no seguimos un método de programación riguroso:
Los programas son rígidos y difíciles de adaptar a nuevos
requerimientos.
Los programadores gastan mucho tiempo corrigiendo sus
errores.
La comunicación entre programadores es muy difícil.
Los programas y módulos son poco reusables.
Existen deficiencias en la documentación.
6
Metodología de la programación
Resolución de problemas con el ordenador
Análisis de requerimientos
Diseño
Implementación
Validación
Mantenimiento
9
Metodología de la programación
Implementación, validación y mantenimiento
Implementación: se pasa el diseño, obtenido en la
etapa anterior, a una descripción escrita en un
lenguaje de programación (un lenguaje que puede
comprender el ordenador). Se implanta en un
ordenador, y se ejecuta.
10
Algoritmos
Descripción de Algoritmos
Se suele hacer con:
11
Algoritmos
Ejemplo: Teorema de Pitágoras.
a) Lenguaje Natural: Se introducen los catetos, después se eleva cada uno
al cuadrado y se suman estos cuadrados. Se obtiene la raíz cuadrada y este
será el valor de la hipotenusa.
b) Diagramas de flujo:
Inicio s = b2 + c2
b, c
c) Lenguaje Algorítmico
1) [Entrar longitudes catetos] LEE (cat1, cat2)
2) [Calcula cuadrados catetos] cu1 cat1**2 ; cu2 cat2**2
3) [Calculo la hipotenusa] hip RaizCuad (cu1 + cu2)
4) [Salida de resultados] Escribe ("Lados: ", cat1, cat2, hip)
5) [Final lógico y/o físico] FINAL (SALIDA).
12
Algoritmos
Lenguaje algorítmico
La idea es usar una forma de escribir las instrucciones,
bastante simple y cercana al lenguaje habitual:
(ESCRIBE, ESCRIBIR), (LEE) ,....
Un aspecto muy importante es la PRUEBA . Se ejecuta
con papel y lápiz, poniendo en un cuadro los valores que
a cada variable se le asigna en cada paso, a partir de datos
de entrada cuyo resultado es conocido.
Gastar tiempo en diseñar bien un algoritmo, lleva a una
solución de mayor calidad y un ahorro de tiempo en el
proceso completo.
13
Algoritmos
Pasos para diseñar un algoritmo sobre un problema
1. Tener seguridad de entender completamente las especificaciones
del problema (una forma es indicar la salida que se espera de
algunos ejemplos de entrada).
2. Formular grosso modo un algoritmo para resolver el problema.
(Hay que probarlo con algunos ejemplos).
3. Identificar y listar los datos representativos, junto con el tipo de
dato y una indicación de su propósito.
4. Analizar cada paso para detallarlo en 2/3 pasos nuevos cada vez
(se hace lo mismo con los nuevos pasos).
5. Repetir 3. y 4. hasta nivel de detalle suficiente, y entonces probar
de nuevo el algoritmo completo.
6. Si da errores, revisar pasos 2, 3, 4 y 5, hasta que no haya errores.
7. Traspasar a un lenguaje programación (casi inmediato).
14
Programación modular
La programación modular consiste en dividir un programa en
módulos o subprogramas con el fin de hacerlo más legible y
manejable y facilitar la reutilización.
Un problema complejo se divide en subproblemas más simples,
y estos a su vez en otros más simples.
Cada módulo realiza tareas únicas y es reutilizable. El nivel de
detalle depende de criterios de claridad y reusabilidad.
Ésta técnica se llama refinamiento sucesivo, divide y vencerás ó
análisis descendente.
El módulo principal produce y controla la ejecución de los
demás.
15
Programación modular
Fase 1 Fase 2
1. Bajar del coche y abrir maletero. 1.1 Bajarse Coche
2. Sacar ruedaR y Herramientas. 1.2. Abrir Maletero
3. Cambiar la rueda. 2.1 Sacar rueda repuesto y herramientas
4. Guardar ruedaP, seguir marcha 3.1 Levantar coche con gato
3.2 Poner ruedaR y atornillar
4.1 Guardar ruedaP, seguir marcha
Fase 3 Fase 4
3.1.1 Colocar gato en su sitio (**) Podría detallarse más: (los tornillos se
3.1.2 Calzar bien el coche van apretando poco a poco, primero uno
3.1.3 Girar manivela hasta ruedaP en el y luego el opuesto, …)
aire.
16
Programación estructurada
Es un conjunto de técnicas que incorporan:
Recursos abstractos: Lenguaje algorítmico, diagramas de flujo,…
Diseño descendente: Programación modular.
Estructuras básicas: Con sólo una entrada y una salida:
Secuencial: Acciones simples, con flujo
lineal continuado.
Selección: Toma de decisión o
alternativas, simples o múltiples, en
función de una condición.
Repetitivas: Bucles. Se repiten una
serie de acciones mientras (hasta) se
verifica una condición.
17
Programación estructurada
Teorema de Bohm-Jacopini:Todo programa se puede escribir
usando sólo 3 tipos de estructuras de control: secuenciales,
selectivas y repetitivas.
La Programación Estructurada permite escribir programas
fáciles de leer y de modificar, con un orden y estructura al
escribir sentencias. Se estructuran además los datos.
El estilo se reduce a aspectos de claridad y a optimizar
diseño/estructura del programa. Se prohíben saltos a
otras partes del programa (GOTO).
18
Programación estructurada
Elementos básicos de la programación
Necesidad de Lenguaje (alfabeto y reglas de sintaxis y
semántica, pocas, concretas, precisas) para comunicarnos
con el ordenador:
Caracteres: Elementos del alfabeto.
Palabras: Instrucciones básicas. Palabras Reservadas
(Diccionario) + Identificadores (Usuario).
Frases: Instrucciones y acciones más complejas.
Sintaxis: Reglas para construir sentencias válidas.
Semántica: Reglas que dan significado a las “frases” del
lenguaje
19
Programación estructurada
Elementos básicos de la programación
20
Programación estructurada
Elementos básicos de la programación
Escalares. Formados por un único elemento. Se operan directamente: Entero, Real, Carácter, Lógico.
Estructurados. Agrupaciones de escalares. Cadenas, Matrices, ....
Estándares (los incorpora el lenguaje). F90: E, R, C, L, Comp, Cad.
Definidos por Usuario. En Fortran, Registros (Type)
22
Programación estructurada
Estructura de los programas
Cabecera: Identifica el programa con un nombre.
Declaraciones (constantes, variables y su tipo).
Señalar la información necesaria de entrada y salida.
Programa Principal (Cuerpo): Acciones a realizar.
Declaración (funciones, procedimientos): Módulos.
Salida del programa.
23
Lenguajes de programación
Evolución
Programas en Circuitos (No hay lenguaje como tal)
Con Von Newmann nacen lenguajes específicos para cada
computadora, en formato binario; son instrucciones simples
(0001101011101011010).
Lenguaje Máquina (o código máquina). Las instrucciones
propias de cada máquina están codificadas con ceros y unos.
Dependen del procesador. Son incomprensibles y engorrosos de
usar.
Es dificil escribir en binario, se usan nemotécnicos (SUM, MUL,....).
Lenguaje Ensamblador. Nemotécnico del código máquina. Sigue
ligado al ordenador, pero menos engorroso. Se traduce a lenguaje
máquina, con un programa Ensamblador. Permiten variables, macros
y comentarios.
24
Lenguajes de programación
Evolución
Lenguajes de alto nivel:
Cercanos al lenguaje natural y matemático. Mas fáciles de leer y
escribir.
Se permiten operaciones más complejas. Ej.: raíz cuadrada.
Existe el concepto de subprograma.
Son menos eficientes.
Son más portables (casi independientes del ordenador).
Se pueden usar sin conocer los entresijos de los ordenadores.
Algunos son: Fortran, Algol, Pl/I, Ada, Basic, Simula, Pascal, Apl,
Modula, Logo, C, Lisp, Prolog, Java, Perl, Python, C++, C#.
Necesidad de un Traductor que pase de lenguaje de alto nivel a
código máquina.
Lenguajes de cuarta generación: Herramientas que
permiten construir aplicaciones sencillas combinando piezas
prefabricadas.
25
Traductores
Fases para ejecución de programas
FASE UTILIDAD (Programa)
Escritura o Introducción “mecanografiada” Editor de Textos
del Programa (Programa fuente).
Traducción a ensamblador y de aquí a Compilador
Lenguaje Maquina o directamente a Intérprete
Lenguaje Máquina (Programa objeto)
Montaje del fichero ejecutable, enlazando Enlazador
todos los módulos (“Linkaje”)
adecuadamente (Programa ejecutable)
Carga del Programa en Memoria Principal Cargador
Ejecución del Programa Sistema Operativo
Rastreo y Depuración de Errores Depurador
26
Traductores
Tipos
En los lenguajes de alto nivel surge la necesidad de un
Traductor que pase de lenguaje de alto nivel a código
máquina. El traductor es un programa. Tipos:
Compilador: Traducen el programa completo (Programa Fuente) a un Programa
Objeto (lenguaje máquina). El Programa Ejecutable se obtiene tras la fase de
enlazado (link). Si en cualquier fase se detecta un error, hay que corregirlo (con
editor) y volver a realizar todo el proceso de traducción global. Una vez obtenido el
programa ejecutable, se ejecutará todas las veces que queramos, sin nuevas
traducciones.
Intérprete: Traducen el programa instrucción a instrucción. Interpreta una
instrucción y la ejecuta directamente (si se detecta un error en la instrucción, se
puede corregir sobre la marcha, y continúa la ejecución del programa). La traducción
se repite en cada ejecución del programa, pero las siguientes veces ya no habrá
errores. Los programas son más portables pero más difíciles de optimizar.
Cuando la traducción se hace en una máquina distinta a la de
ejecución del programa, se utiliza un traductor cruzado. En una
computadora se puede simular otra distinta, con programas
llamados emuladores.
27