Fundamentos de Informática -...

28
Fundamentos de Informática Tema 3 Programación de Ordenadores 1

Transcript of Fundamentos de Informática -...

Page 1: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Fundamentos de Informática

Tema 3

Programación de Ordenadores

1

Page 2: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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

Page 3: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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: Arquitectura Comp. , Ingeniería de Software (incluye Metodología Programación)

  Un programa se puede ver como la solución a un problema, en términos de una secuencia de pasos computacionales.

  Programación: “Planificación y/o ejecución de una tarea".   Programación de ordenadores: Proceso de planificación

de secuencias de las instrucciones para realizar una acción o tarea.

  Existen metodologías que permiten que la programación sea los más eficaz en cuanto a desarrollo y mantenimiento.

3

Page 4: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Introducción   Los ordenadores ejecutan rápida y de forma precisa

operaciones lógicas y matemáticas.   Son “tontos”: Sólo saben hacer lo que se les dice. Lo que

no siempre es igual a lo que se les debe decir, por tanto, el programa ha de estar perfectamente definido (preciso, simple y sin ambigüedades).

  Errores pequeños pueden provocar fallos graves.   Para resolver un problema con un programa, es necesario

desmenuzar la solución, en pasos concretos, cortos y perfectamente definidos.

  Un algoritmo es una secuencia ordenada de pasos claros, concretos, precisos, sin ambigüedades, que lleva a la solución genérica de un problema.

4

Page 5: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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.

  Es fundamental que los programas cumplan:   Legibles: Comprensibles para cualquier programador.   Modificables: Su estructura debe permitir modificaciones.   Depurables: Debe ser fácil la localización y corrección de

errores.

5

Page 6: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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

Page 7: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Resolución de problemas con el ordenador

7

Análisis de requerimientos

Diseño

Implementación

Validación

Mantenimiento

El ciclo de vida del Software

Page 8: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Análisis de requerimientos

  Esta fase consta de dos partes orientadas a responder QUÉ es lo que hay que hacer:

1.  Definición del problema: Identificar claramente que es lo que se quiere resolver.

2.  Análisis del problema: se basa en identificar:   Entrada de datos: La fuente y los tipos de datos para las

entradas. Listar variables y su tipo   Resultados: Destino y formato de salida (variables y tipo)

5.  Procesamiento: Interacción entre datos y resultados.

8

Page 9: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Etapa de diseño   En esta fase resolvemos CÓMO se hace lo especificado

en el análisis de requerimientos.

1. Obtener una solución (estructurar la información y los pasos )   Programar es tarea difícil (mezcla muchos procesos mentales)

Descomponer el problema en varios más sencillos. con técnicas “divide y vencerás”, diseño descendente o modular, … dividiendo el problema en subproblemas más sencillos.

2. Hacer un esquema de la solución, es decir, Idear y explicitar un algoritmo que describa la solución paso a paso.   El diseño del algoritmo debe ser independiente del lenguaje de

programación en el que se vaya a programar.

En problemas sencillos, los dos pasos se reducen a uno solo

9

Page 10: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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.

  Validación: es el proceso de identificar y eliminar errores.

  Mantenimiento: Correctivo, adaptativo y perfectivo.

10

Page 11: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

DESCRIPCIÓN DE ALGORITMOS SE SUELE HACER CON:

  Descripción narrada en lenguaje natural. A veces es impreciso y farragoso, pero muy descriptivo (receta cocina).

  Diagramas de flujo: Organigramas. Diagramas de Nassi. Tablas de Decisión, .... . Son precisos y de fácil traslado al L. de programación, pero en general son poco descriptivos.

  Lenguaje algorítmico. Toma la descripción fácil de la narrativa, elimina lo superfluo del lenguaje, y coge lo conciso de los diagramas de flujo (pseudocódigo en inglés, especificaciones formales, ...).

11

Page 12: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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:

   

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

Inicio

h = √ s

s  =  b2  +  c2           b, c

"h  =  ",  h     Fin

Page 13: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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

Page 14: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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 a grosso modo un algoritmo para resolver el problema. (Hay que probarlo con algunos ejemplos).

3.  Identificar y listar las variables representativas, junto con el tipo de variable y una indicación de su propósito.

4.  Analizar cada paso para detallarlo en 2/3 pasos nuevos cada vez (los nuevos pasos hacen lo mismo).

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 no errores. 7.  Traspasar a un lenguaje programación (casi inmediato).

14

Page 15: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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.

  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.

  É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

Page 16: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Programación modular

16

Fase 1 Fase 2

1. Bajar del coche y abrir maletero. 2. Sacar ruedaR y Herramientas. 3. Cambiar la rueda. 4. Guardar ruedaP, seguir marcha

1.1 Bajarse Coche 1.2. Abrir Maletero 2.1 Sacar rueda repuesto y herramientas 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 3.1.2 Calzar bien el coche 3.1.3 Girar manivela hasta ruedaP en el aire.

(**) Podría detallarse más: (los tornillos se van apretando poco a poco, primero uno y luego el opuesto, …)

Ejemplo: Cambiar la rueda de un coche por pinchazo.

Page 17: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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:

17

  Secuencial: Acciones simples (asignación), 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.

Page 18: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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 PE 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

Page 19: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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

Page 20: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Elementos básicos de la programación

  TIPOS DE DATOS: Los datos son la representación de la información que existe en el mundo real.   Numéricos: Enteros y reales.   Caracteres: Permiten letras, dígitos, signos de puntuación, etc.   Lógicos: Verdadero/Falso.

  Datos enumerados: Son nuevos tipos de datos para los que especificamos el dominio en el que están definidos.

  Datos estructurados: Se consiguen mediante una agrupación de otros tipos de datos.

20

Page 21: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

  Escalares. 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)

21

DATOS

Datos Estándares

Datos Definidos por el Usuario

D. Escalares o Simples Dinámicos

D. Estructurados

Estáticos

Heterogéneos

Homogéneos

  Organiza. Lógica (como los ve el usuario): Campo Registro Fichero. (Ficha Alumno). Dirección lógica y física

  Organiz. Física. (como se almacena/usa en Ordenador). Bit Byte (Palabra) Bloque (128-256 bits) Fichero (coincide fichero lógico).

  SO Gestiona la identificación entre direcciones físicas y lógicas

Page 22: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Elementos básicos de la programación   Los datos pueden ser constantes o variables

  Variables.- Poseen un valor (puede cambiar a lo largo del programa). Se nombran con Identificadores, según reglas: Empiezan con letra, sin espacios blancos, y sin símbolos que puedan confundir (+, -, *, /, ,... ).

  Constantes. Con nombre (PI), o Valor literal (3.1416).

  Operaciones Elementales. Operadores Relacionales.   Con números: + , - , * , / , ** .   Carácter: No hay. Cadenas: concatenación.   Lógicos: Operadores lógicas: Y, O, NO.   Comparar datos (mismo tipo): <, <=, = , <>, >=, >.

22

Page 23: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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.

 Comentarios aclarativos en todo momento.  Mantener un cierto Estilo

23

Page 24: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Lenguajes de programación.

  SOPORTE LÓGICO : Es la parte lógica o SOFTWARE: Programas y Utilidades que hacen funcionar al ordenador

  PROGRAMA: Conjunto ordenado de instrucciones que representa las operaciones a realizar y su secuencialidad.

  INSTRUCCIÓN: Cjto. símbolos que indican al ordenador una acción de tratamiento, operación o transferencia. Clara (No ambigua), Concreta y Sencilla. [Etiqueta] CódigoInstrucción Argumentos

  Tipos: Transf.. Datos, Tratamiento (operación), Transf. Control, Interrupción. Sintaxis y semántica clara y rígida

  LENGUAJE: Conjunto de reglas semánticas y de sintaxis para redactar las instrucciones y construir programas.

  Los programas escritos en Lenguaje de usuario se traducen (codifican) a Leng. Máquina, o leng. Intermedios, Ensambladores.

24

Page 25: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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.

•  Al código máquina y al ensamblador se les conoce como lenguajes de bajo nivel.

25

Page 26: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

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, ....   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.

26

Page 27: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Fases de ejecución de programas:

27

FASE UTILIDAD (Programa) Escritura o Introducción “mecanografiada” del Programa (Programa fuente).

Editor de Textos (Text Editor)

Traducción a ensamblador y de aquí a Len. Maquina, o directamente a Leng. Máquina

(Programa objeto)

Compilador (Compiler) + Ensamblador (Assembler) Compilador /Intérprete (Interpreter)

Montar fichero ejecutable, enlazando todos los módulos (“Linkaje”) adecuadamente. (Programa ejecutable)

Montador, Enlazador Encuadernador (Linker)

Cargar el Programa en Memoria Principal Cargador (Louder) Ejecutar el Programa Sistema Operativo (OS) Rastreo y Depuración de Errores Rastreador, Depurador (Tracer,

Debbuger)

Page 28: Fundamentos de Informática - flanagan.ugr.esflanagan.ugr.es/docencia/2010-2011/fiic/apuntes/FI-IC-Tema3... · de secuencias de las instrucciones para realizar una acción o tarea.

Fases de ejecución de programas: Traducción   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.

28