PDF de programación - Desarrollo de programas

<<>>
Imágen de pdf Desarrollo de programas

Desarrollo de programasgráfica de visualizaciones

Publicado el 13 de Junio del 2019
796 visualizaciones desde el 13 de Junio del 2019
1,7 MB
15 paginas
Desarrollo de programas

Desarrollo de programas

Dos ideas previas sencillas:

� El objetivo de un programa es resolver un problema.
� El ordenador no piensa, solo ejecuta un programa dado.

Un programa tiene que estar bien escrito de acuerdo con la
sintaxis del lenguaje, para que pueda ser ejecutado.

Pero además debe ser correcto

¿Qué significa que un programa sea correcto?

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Programas correctos (I)

Un programa es correcto si hace exactamente la tarea para la
que ha sido diseñado.

Formalmente: es correcto si se comporta exactamente según
una especificación dada. La especificación define o describe lo
que debe hacer hacer el programa.

A su vez la especificación puede ser:

� Formal (utilizando lenguajes formales de especificación, que
utilizan la lógica matemática). Por ejemplo, con el modelo
de precondición y postcondición y la lógica de Hoare.

� Menos formal, utilizando lenguaje natural.

En cualquier caso la especificación debe ser absolutamente
precisa a la hora de describir qué debe hacer el programa.

Programas correctos (II)

En particular, un programa correcto:

� Debe funcionar para todos los casos previstos, dando el

resultado esperado según la especificación
� Debe estar completamente libre de errores.
� Debe terminar adecuadamente

Además, la buena metodología de programación busca que los
programas:

� Estén bien estructurados (bloques de código bien

organizados)

� Sean eficientes en tiempo de ejecución y en consumo de

memoria (en general, en consumo de recursos).

� Estén escritos de forma clara y bien documentados. Con

ello se consigue que sean más fáciles de entender, reutilizar
y mantener.

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Desarrollo de programas. Metodología.
1. Análisis y Especificación del problema (¿QUÉ?):

� extraer información relevante, eliminar ambig¨uedades del

planteamiento

� identificar los datos de entrada o input y los datos de salida o output y

qué hay que hacer

2. Diseño de un algoritmo (¿C ÓMO?): precisar los pasos para obtener la

solución requerida (output) a partir de la entrada (input).

� Partir de planteamiento general prescindiendo de detalles (dejar pendientes
subproblemas más pequeños). Después abordar estos subproblemas con la
misma técnica � Diseño descendente o divide y vencerás o aproximación
por refinamientos sucesivos.

3. Implementar el algoritmo en un lenguaje concreto (como C#, en nuestro

caso). Compilarlo, corregir posibles errores de sintáxis, ...

4. Probar y depurar (test): comprobar el funcionamiento del programa con

una batería de ejemplos intentando cubrir toda la casuística posible.
� Otra alternativa verificación formal de la corrección del algoritmo �

demostración formal (matemática) utilizando la lógica de Hoare,
verificadores (semi)-automáticos de programas...

Desarrollo de programas (II)

Es habitual completar las 4 fases anteriores e iterar, es decir,
volver a la fase 1, repasar la especificación (a veces el diseño del
algoritmo o la propia implementación requieren modificar la
especificación), adaptar la implementación, etc....
En en el ciclo de vida de un programa, puede incluirse la fase 5:

� Mantenimiento: modificaciones y actualizaciones de

programa para satisfacer nuevos requisitos o aumentar
prestaciones (o corregir errores no detectados).

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Ejemplo (I)

Problema:

averiguar el más pequeño entre dos números dados en cualquier orden

Primer paso, Análisis y especificación:

� Información irrelevante?: “dados en cualquier orden”
� Ambig¨uedad?: ¿cuál es el más pequeño entre 6 y 6?...

� suponemos que el usuario (cliente) desea 6 como respuesta

(o se lo preguntamos para aclararlo)

� Imprecisión?: los números dados, ¿son naturales, enteros,

reales, complejos?...

� supondremos que son enteros (o preguntamos al cliente)

Ejemplo (II)

Especificación (distintas formas de hacerla):

� en lenguaje natural (español), pero precisa:

determinar el mínimo entre dos enteros dados
� más formal, apoyada en lenguaje lógico/matemático:

y

si x ≤ y
en otro caso

� completamente formal, p.e., en estilo funcional:

dados x, y ∈ Z determinar z = min(x, y) siendo
min(x, y) =� x
se nos pide una función f : (Z, Z) → Z que verifique:
f (x, y) =� x

si x ≤ y
en otro caso

y

Identificamos entrada y salida (input/output):

� input: dos números enteros, x, y
� output: el más pequeño de ellos, mínimo entre x y y.

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Ejemplo (III)

Segundo paso, diseño del algoritmo: secuencia de acciones a
realizar.

� Aproximación I:

solicitar de teclado los números de entrada x e y
calcular en z el mínimo de x e y
escribir z en pantalla

� Aproximación II (refinamiento de I):

solicitar de teclado los números de entrada x e y
si x ≤ y hacer z = x
en caso contrario hacer z = y
escribir z en pantalla

Ejemplo (III)

� Aproximación III (refinamiento de II):

escribir ’x? ’ en pantalla
leer el valor de x de teclado
escribir ‘y? ‘ en pantalla
leer el valor de y de teclado
si x ≤ y hacer z = x
en caso contrario hacer z = y
escribir ’z =’ en pantalla
escribir el valor de z en pantalla

En este nivel de refinamiento se ha detallado suficientemente el
algoritmo, si no, se continuaría.

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Diagramas de flujo para algoritmos: otra forma de presentar los
algoritmos (no la utilizaremos habitualmente):

Ejemplo (IV)

Ahora habría que hacer la implementación en un lenguaje
concreto. Por ejemplo, en Python se podría hacer como (ahora
no nos importan los detalles del lenguaje):

print "Primer entero: ",
x = int(input())
print "Segundo entero: ",
y = int(input())
if x <= y:

z = x

else:

z = y

print "El menor es: ", z









Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Ejemplo (V)

Quinto paso, test.

Primer entero:
Segundo entero:
El menor es:

-17

8

-17

Esto es simplemente un test, no un prueba de corrección.

Verificación formal:
{P0 ≡ x, y, z ∈ Z}

precondición

programa

−→

postcondición

if (x<=y) then z:=x
else z:=y

{P1 ≡ z = min(x, y)}

La lógica de Hoare define el comportamiento de cada instrucción.

Ejemplo (VI)

Mantenimiento. El usuario pide solicita cambios:

� Cambio en la especificación: los números en vez de enteros

que sean reales (ampliación de la funcionalidad).

� Cambios de petición y presentación de datos: que pida los

dos números a la vez, que escriba en salida también los
números de entrada.

En general, en grandes programas a veces hay pequeños (o
grandes) errores. Una parte del mantenimiento también
consiste en corregir estos errores.

Esta secuencia es lo que habitualmente se denomina ciclo de
vida del Software.

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Otro ejemplo

Problema:

calcular la suma de los n primeros naturales

� Análisis y especificación:

dado n ∈ N evaluar 1 + 2 + . . . + n (en términos

matemáticos Σn
input: n ∈ N; output: 1 + 2 + . . . + n

i=1i)

� Algoritmo: (sin aplicar la fórmula conocida)

Aproximación I:

solicitar de teclado el valor n
calcular Suma = 1 + 2 + . . . + n
escribir Suma en pantalla

Refinamiento

Refinamiento I (sólo del cálculo en sí):

inicializar Suma = 0
repetir desde i = 1 hasta n

Suma = Suma + i

Implementación (ahora en Pascal):

{Este programa calcula la suma...}
program sumatorio;
var i,n,suma: integer;
begin

write(’valor de n: ’); readln(n);
suma:=0;
for i:=1 to n do

{inicialización del acumulador}
{se va incrementando el acumulador}
{sumando los valores de i}

suma:=suma+i;

writeln(’la suma es: ’, suma);

end.

Luego depuración, mantenimiento...

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Compiladores

Nuestro primer programa en C#: “hola mundo!”



using System;
class HolaMundo
{

static void Main()
{

Console.WriteLine ("Hola mundo!!");

}

}✝

No es necesario entender este programa por ahora...





� Lo escribimos en nuestro editor de texto favorito (emacs,

gedit, notepad, ...)

� Lo guardamos en un archivo holaMundo.cs
� Cómo lo ejecutamos?

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Compilando desde línea de comandos (I)

La línea de comandos todavía existe! (en Linux, Windows,
Mac...)

Compilando desde línea de comandos (II)

� Compilación desde línea de comandos (desde un terminal):

> mcs holaMundo.cs

� Esto produce un ejecutable holaMundo.exe
� Para ejecutar el programa, desde línea de comandos:

> holaMundo.exe

� Y produce el resultado esperado... acabamos de escribir, compilar y

ejecutar nuestro primer programa!

Jaime Sánchez. Sistemas Informáticos y Computación, UCMJaime Sánchez. Sistemas Informáticos y Computación, UCM Pero...

� ¿Qué significa exactamente compilar un programa?
� ¿Qué es un compilador?
� ¿Qué significa ejecutar un programa?
� ¿Quién compila?
� ¿Quién ejecuta?

¿Qué significa exactamente compilar un programa?
Compilar es traducir: se traduce el código fuente escrito en un
lenguaje de programación (como C#) código objeto. Este
código objeto:

� puede ser código binario para una máquina real (CPU)
directamente ejecutable por la misma (ceros y unos que
“entiende” el ordenador, i.e., instrucciones para el
microprocesador)

� o puede ser código para una máquina virtual (bytecode),
que puede ser fácilmente convertible en código ejecutable
de manera eficien
  • Links de descarga
http://lwp-l.com/pdf16115

Comentarios de: Desarrollo de programas (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad