Vous êtes sur la page 1sur 56

1

TEMA 1A
Conceptos de Programacin
2
Tema 1
1.0 Introduccin
1.1 Problemas, Algoritmos y Programas
1.2 Paradigmas y Lenguajes de Programacin
1.3 Desarrollo sistemtico de aplicaciones
3
Objetivo
- Exponer los conceptos clave para la
resolucin de problemas por medio de
la computadora u ordenador
4
1.0 Introduccin
- Organizacin de una computadora
COMPUTADORA
Programa
Datos Entrada Datos Salida
5
1.0 Introduccin
- Componentes de una computadora
PROCESADOR
MEMORIA
Programa
Datos de entrada Datos de salida
6
1.0 Introduccin
- En qu consiste la programacin?
Describir lo que debe hacer la
computadora para resolver un
problema concreto utilizando un
lenguaje de programacin.
7
1.0 Introduccin
- Fases para resolver un problema con
una computadora:
1. Anlisis del problema
2. Descripcin de un mtodo (algoritmo)
que lo resuelva
3. Escritura del algoritmo en un lenguaje de
programacin
4. Comprobacin del correcto
funcionamiento
8
1.1 Problemas, Algoritmos y
Programas
9
1.1.1 Problemas
- Definicin: Problema
Proposicin encaminada a averiguar el modo
de obtener un resultado, cuando se conocen
ciertos datos de partida
10
1.1.1 Problemas
- Tipos de Problemas
Sin Solucin
Determinados: con una nica solucin
Indeterminados: con un nmero indefinido
de soluciones
11
La definicin del
problema
- Anlisis del problema
Consiste en establecer con precisin qu se
plantea
- Especificacin
Descripcin precisa del problema:
- datos de partida
- resultado
lenguaje natural
lenguajes formales
puede resultar impreciso
lgica, matemticas
12
Un ejemplo
Datos
2 enteros, dividendo y divisor (D,d)
d no nulo
Resultado
2 enteros, cociente y resto (C,R)
0 s R < d, tal que D = d*C + R
Ejemplo de Especificacin:
Problema de divisin eucldea
13
1.1.2 Algoritmo
- Etimologa
Alhuarizm: sobrenombre del rabe Muhamed
ibn Musa (al-Jwarizmi), matemtico persa
- Definicin-1:
Descripcin precisa de los pasos que nos
llevan a la solucin de un problema planteado
14
Caracterizacin
La descripcin de un algoritmo afecta a:
Entrada (Datos)
Proceso (Instrucciones)
Salida (Resultado)
Se puede decir:
Algoritmo ~ funcin matemtica
Algoritmo: Entrada Salida
(proceso)
Ejemplo: Suma Lenta: N x N N
a + b c, c = a + b
Es constructivo: hay que precisar tambin el proceso de clculo
15
Algoritmo
- Definicin-2:
Mtodo tal que partiendo de datos
apropiados, conduce sistemticamente a los
resultados requeridos en la especificacin del
problema
16
Caractersticas de los
algoritmos
- Precisin (sin ambigedad) en cuanto a:
Orden: secuencia de pasos que han de
llevarse a cabo
Contenido: qu se realiza en cada paso
- Determinismo:
debe responder del mismo modo ante las
mismas condiciones
- Finitud:
debe tener fin
17
Lenguajes
Algortmicos
- Sirven para describir un algoritmo
- Son ms precisos que el lenguaje natural,
pero menos rgidos (o formales) que un
lenguaje de programacin
se les considera un lenguaje intermedio
tienen cierta independencia de los lenguajes de
programacin
- Ejemplo:
Pseudocdigo, diagramas de flujo
18
Ejemplo: Algoritmo
SumaLenta
Sean a, b e N
leer (a, b)
mientras (a = 0) hacer
a := a-1
b := b+1
fin_mientras
escribir (b)
Algoritmo Suma lenta (Pseudocdigo)
Partimos de dos cantidades: a y b. El mtodo de suma
lenta consiste en ir pasando de a a b una unidad cada
vez, de forma que cuando a=0, el resultado ser el valor
de b
19
Algoritmo: definicin
formal
- Es una cudrupla que contiene los
siguientes elementos:
Conjunto de los estados que pueden
presentarse en todo momento
Identificacin de estados iniciales
Identificacin de estados finales
Funcin de transicin entre estados
20
Algoritmo: definicin
formal
- Un estado se define por una tupla de
cuatro elementos:
Marca de la posicin del algoritmo en la que
se define el estado
Datos de entrada
Resultados emitidos
Valores de las variables que entran en juego
21
Ejemplo: Algoritmo
SumaLenta
Ejemplo: Estados de cmputo (Suma lenta)
Posicin E S a b
1 |2 3.| ||

2
|| ||
2 3
3
|| ||
1 3
4
|| ||
1 4
5
|| ||
0 4
6
|| ||
0 5
7
|| |5.|
0 5
Datos de entrada
Valores de los datos
|a,b|
Resultados emitidos
22
Otras formas de
caracterizacin
- Mquinas: de Turing, de Registros
- Funciones recursivas
- . . .
23
- Obligados
Correccin: respecto a las especificaciones
Complejidad: recursos que un algoritmo
necesita. En mquinas secuenciales (tiempo y
memoria)
- Deseables
Generalidad: sirva para una clase de
problemas lo ms amplia posible
Eficiencia: ser ms eficiente en la medida
que necesita de menos pasos
Aspectos de un
algoritmo
24
Problemas y
Algoritmos
- Algunos problemas tienen distintas
soluciones algortmicas.
Ejemplo: mximo comn divisor (mcd)
- Algunos problemas no tienen solucin
algortmica
Ejemplo: problema de parada (encontrar un
algoritmo que determine si otro algoritmo
finaliza o no con unos determinados datos de
entrada)
25
1.1.3 Programas
- Programa: conjunto de instrucciones precisas,
en un lenguaje entendible por la computadora
- Programacin: Proceso de construccin de
programas
- Fases:- Anlisis del problema
- Solucin conceptual del problema
- Escritura del algoritmo en un lenguaje de
programacin
- Comprobacin de resultados
26
Ejemplo: Programa
SumaLenta
PROGRAM SumaLenta (input,output);
{Se suman dos enteros positivos,
pasando unidades de uno a otro}
VAR
a,b:integer;
BEGIN
readln(a,b);
WHILE a <> 0 DO BEGIN
a:=a-1;
b:=b+1
END; {while}
writeln(b)
END. {SumaLenta}
Programa Pascal (codificando el algoritmo Suma lenta)
27
1.2 Paradigmas y Lenguajes
de Programacin
28
1.2.1 Lenguajes de
Programacin
- Definicin:
un lenguaje artificial, diseado para
representar algoritmos de forma inteligible
para las computadoras
- LPs y lenguaje natural
LPs son ms formales y rigurosos
LPs son ms simples en su sintaxis y
semntica
29
Lenguajes de
Programacin
- Algunas caractersticas relevantes:
Sintaxis
Semntica
Traduccin y ejecucin
Errores y cmo subsanarlos
30
+
-
Entero sin signo
Nmero
Entero
Ejemplo: Sintaxis de un nmero entero
Sintaxis
- Especifica inequvocamente cmo estn
construidos los programas de un LP
- Especificacin de la sintaxis
Gramticas (BNF)
Diagramas Sintcticos
31
write(hola);
write(hola);
holahola
hola
hola
Semntica
- Asigna un significado a cada tipo de
construccin de un LP
- Formas de especificacin:
ejemplos (y contraejemplos) en los manuales
definicin formal
Ejemplo: en pantalla aparece:
32
Programa
fuente
Programa
objeto
Compilador
Cdigo fuente
Cdigo ejecutable
Traduccin y
Ejecucin
- El lenguaje de alto nivel ha de traducirse
al lenguaje de la mquina
- Formas de traduccin:
compilacin:
todo el cdigo fuente (en un archivo) se traduce a
cdigo ejecutable (en otro archivo)
se ejecuta dicho cdigo ejecutable
33
Traduccin y
Ejecucin
interpretacin:
1. se traduce una instruccin del cdigo fuente
2. se ejecuta dicha instruccin
se repiten 1 y 2 con todas las instrucciones del
cdigo fuente
34
Errores
- Errores de compilacin
surgen a la hora de traducir (compilar) el
cdigo fuente
errores sintcticos, de tipo, etc.
- Errores de ejecucin
surgen al ejecutar el cdigo ejecutable
operaciones ilegales (divisin por cero),
errores lgicos etc.
35
tiempo
Evolucin de los LP
Prog. Leng. o cdigo mquina
Prog. Ensamblador
Prog. Alto nivel
Prog. Estructurada
Prog. Modular
Prog. Con TADs
Prog. Orientada a Objetos
...
36
1.2.2 Evolucin de los
LP
- Motores que impulsan la evolucin de los
lenguajes de programacin:
Abstraccin
Encapsulacin
Modularidad
Jerarqua
37
Evolucin de los LP
- Abstraccin:
Proceso mental por el que el ser humano
extrae las caractersticas esenciales de algo, e
ignora los detalles superfluos
- Encapsulacin:
Proceso por el que se ocultan los detalles de
las caractersticas de una abstraccin
38
Evolucin de los LP
- Modularizacin:
Proceso de descomposicin de un sistema en
un conjunto de elementos poco acoplados
(independientes) y cohesivos (con significado
propio)
- Jerarqua:
Proceso de estructuracin por el que se
organizan un conjunto de elementos en
distintos niveles, atendiendo a determinados
criterios (responsabilidad, composicin, etc.)
39
Abstraccin
Encapsulacin
Modularidad
Jerarqua
Preservar los motores
+ comprensin
+ legibilidad
+ fcil mantenimiento
costes
Ventajas Motores
40
1.2.3 Paradigmas de
programacin
- Definicin:
una coleccin de patrones conceptuales que
moldean la forma de razonar sobre
problemas, de formular algoritmos y, a la
larga, de estructurar programas
- Paradigmas:
programacin imperativa
programacin funcional
programacin lgica
41
Programacin
imperativa
- Basada en el modelo von Neumann
un conjunto de operaciones primitivas
ejecucin secuencial
- Abstraccin
variables, expresiones, instrucciones
- Programar:
declarar variables necesarias
disear una secuencia adecuada de
instrucciones (asignaciones)
42
Programacin
imperativa
PROGRAM mayorDeDosNumeros;
VAR x,y, mayor: integer;
BEGIN
Read (x,y);
if x > y then
mayor := x
else
mayor := y;
Write (mayor);
END.
Ejemplo: Indicar cul es el mayor de dos
nmeros en Pascal
- Programa:
43
Programacin
funcional
- Basada en la nocin de funcion
matemtica
f: Dominio Rango
- Programar:
definir funciones bsicas (con parmetros)
(p.e. por enumeracin)
disear funciones complejas
(p.e. por comprensin)
evaluar las funciones sobre los datos de
entrada
44
Programacin
funcional
(defun max (X Y)
(if (> X Y)
X
Y))
(defun max3 (X Y Z)
(max X (max Y Z)))
Ejemplo: Calcular el mximo de 3 nmeros en LISP
- Programa:
- Ejecucin: > (max3 3 6 5)
> 6
45
Programacin lgica
- Basada en la inferencia automtica en
(un subconjunto de) lgica de 1
er
orden
- Programar:
definir hechos (predicados bsicos)
disear implicaciones para definir predicados
complejos
determinar la verdad de los predicados para
individuos concretos
46
Programacin lgica
padre(juan, antonio).
padre(antonio, pepe).
antecesor(X,Y) padre(X,Y).
antecesor(X,Z)
padre(X,Y) . antecesor(Y,Z) .
Ejemplo: determinar antecesores en Prolog
- Programa:
? antecesor(pepe, juan) no
? antecesor(A, pepe) A = antonio;
A = juan
- Ejecucin:
47
Paradigmas y
lenguajes
Prog.
Imperativa
Prog.
Lgica
(P.Declarativa)
Prog.
Funcional
(P.Declarativa)
Prog. orientada
a objetos
Prolog++
CLOS
Smalltalk
C++
Java
Eiffel
Prog.
Concurrente
Ada-95
Haskel
Dephi
LISP
Prolog
Pascal FC
C
PASCAL
Fortran
COBOL
Ada
Hope
Ciao-Prolog
48
1.3 Desarrollo sistemtico de
aplicaciones
49
Ingeniera del
Software
- Definicin-1 (Bauer, 1969):
el establecimiento y uso de principios
robustos de la ingeniera a fin de obtener
econmicamente software que sea fiable y
que funcione eficientemente sobre mquinas
reales
- Definicin-2 (IEEE, 1993):
la aplicacin de un enfoque sistemtico,
disciplinado y cuantificable hacia desarrollo,
operacin y mantenimiento de software
50
Fases de un
desarrollo sistemtico
- Planificacin
- Anlisis
- Diseo
- Codificacin
- Validacin
- Mantenimiento
51
Planificacin
- Determinar las necesidades de
programacin
- Estimacin de recursos de desarrollo
- Prediccin aproximada de coste y tiempo
- Determinar si el desarrollo del software es
viable econmicamente
52
Anlisis de
requerimientos
- Definir detalladamente las funciones de
cada mdulo, de acuerdo con los deseos
del cliente
- Definir detalladamente el trabajo conjunto
de los distintos mdulos
- Definir criterios y sistema de validacin
- Redactar especificaciones detalladas del
funcionamiento general del software
53
Diseo
- Disear el conjunto de bloques o
mdulos
- Se dividen en partes o tareas
- Se asignan tareas a equipos de trabajo,
que las desarrollan y prueban
54
Codificacin
- Escribir los algoritmos en el lenguaje de
programacin elegido
- Integrar las partes para que formen un
programa completo
55
Validacin
- Aplicar el sistema de pruebas descrito en
la fase de anlisis de requerimientos
- Mtodos de validacin
pruebas (tests), inspecciones ...
verificacin formal
- Objetos de validacin:
los mdulos de programa
las conexiones entre ellos (integracin)
la aplicacin entera
56
Mantenimiento
- Redactar la documentacin actualizada
- Iniciar la explotacin
- Detectar y subsanar errores cometidos en
etapas anteriores
- Adaptar la aplicacin a requisitos
cambiados