Tema 3. Programación de Ordenadores.

Anuncio
Fundamentos de
Informática
Tema 3
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
 
 
 
 
 
3
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.
Introducción
 
 
 
 
 
4
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.
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:
 
 
 
5
Legibles: Comprensibles para cualquier programador.
Modificables: Su estructura debe permitir modificaciones.
Depurables: Debe ser fácil la localización y corrección de
errores.
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
Resolución de problemas con el
ordenador
Análisis de requerimientos
Diseño
Implementación
Validación
Mantenimiento
El ciclo de vida del Software
7
Análisis de requerimientos
 
8
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.
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
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
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
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
Fin
b, c
"h = ", h c) Lenguaje Algorítmico
1) [Entrar longitudes catetos]
2) [Calcula cuadrados catetos]
3) [Calculo la hipotenusa]
4) [Salida de resultados]
5) [Final lógico y/o físico]
12
s = b2 + c2 h=√s
LEE (cat1, cat2)
cu1  cat1**2 ; cu2  cat2**2
hip  RaizCuad (cu1 + cu2)
Escribe ("Lados: ", cat1, cat2, hip)
FINAL (SALIDA).
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
Pasos para diseñar un algoritmo sobre
un problema
1. 
2. 
3. 
4. 
5. 
6. 
7. 
14
Tener seguridad de entender completamente las
especificaciones del problema (Una forma es indicar la salida
que se espera de algunos ejemplos de entrada)
Formular a grosso modo un algoritmo para resolver el
problema. (Hay que probarlo con algunos ejemplos).
Identificar y listar las variables representativas, junto con el
tipo de variable y una indicación de su propósito.
Analizar cada paso para detallarlo en 2/3 pasos nuevos cada
vez (los nuevos pasos hacen lo mismo).
Repetir 3. y 4. hasta nivel de detalle suficiente, y entonces
probar de nuevo el algoritmo completo.
Si da errores, revisar pasos 2, 3, 4 y 5, hasta no errores.
Traspasar a un lenguaje programación (casi inmediato).
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
Programación modular
Ejemplo: Cambiar la rueda de un coche por pinchazo.
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, …)
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:
 
 
 
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.
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
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:
 
 
 
 
 
19
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
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
 
 
 
 
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)
Datos Estándares
Datos Definidos por el Usuario
D. Escalares o Simples
D. Estructurados
 
 
 
Estáticos
Homogéneos
DATOS
Dinámicos
Heterogé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
21
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
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
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
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
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
Fases de ejecución de programas:
FASE
Escritura o Introducción “mecanografiada”
del Programa (Programa fuente).
Traducción a ensamblador y de aquí a Len.
Maquina, o directamente a Leng. Máquina
(Programa objeto)
Montar fichero ejecutable, enlazando todos
los módulos (“Linkaje”) adecuadamente.
(Programa ejecutable)
Cargar el Programa en Memoria Principal
Ejecutar el Programa
Rastreo y Depuración de Errores
27
UTILIDAD (Programa)
Editor de Textos (Text Editor)
Compilador (Compiler) +
Ensamblador (Assembler)
Compilador /Intérprete (Interpreter)
Montador, Enlazador Encuadernador
(Linker)
Cargador (Louder)
Sistema Operativo (OS)
Rastreador, Depurador (Tracer,
Debbuger)
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
Descargar