Beruflich Dokumente
Kultur Dokumente
~1~
Los diagramas de Warnier/Orr (tambin conocidos como construccin lgica de programas/construccin lgica de sistemas) fueron desarrollados inicialmente en Francia por Jean Dominique Warnier y en los Estados Unidos por Kenneth Orr. Este mtodo ayuda al diseo de estructuras de programas identificando la salida y resultado del procedimiento, y entonces trabaja hacia atrs para determinar los pasos y combinaciones de entrada necesarios para producirlos. Los sencillos mtodos grficos usados en los diagramas de Warnier/Orr hacen evidentes los niveles en un sistema y ms claros los movimientos de los datos en dichos niveles. ELEMENTOS BASICOS Los diagramas de Warnier/Orr muestran los procesos y la secuencia en que se realizan. Cada proceso se define de una manera jerrquica ; es decir, consta de conjuntos de subprocesos que lo definen, en cada nivel, el proceso se muestra en una llave que agrupa a sus componentes. Puesto que un proceso puede tener muchos subprocesos distintos, un diagrama de Warnier/Orr usa un conjunto de llaves para mostrar cada nivel del sistema. Conjuntos: { Subconjuntos: Cardinalidad: (1,n) Condicionalidad: (0,1) Secuencia de acciones mutuamente excluyentes: + USO DE DIAGRAMAS DE WARNIER/ORR La capacidad de mostrar la relacin entre procesos y pasos de un proceso no es exclusiva de los diagramas de Warnier/Orr, as como tampoco lo es el uso de la iteracin, seleccin de alternativas o el tratamiento de casos individuales. Tanto los diagramas de flujo estructurado y los mtodos del espaol estructurado logran eso tambin. Sin embargo, el enfoque que se usa para desarrollar las definiciones de un sistema por medio de estos diagramas es distinto y se adapta y se adaptan bien a los que se usan en el diseo de sistemas lgicos. Para desarrollar un diagrama de Warnier/Orr , el analista trabaja hacia atrs, empezando con la salida del sistema y usando un anlisis orientado hacia la salida. En el papel el desarrollo se mueve de izquierda a derecha. En primer lugar, se definen la salida o resultados esperados del procedimiento. En el nivel siguiente, mostrado mediante la inclusin por medio de una llave, se definen los pasos necesarios para producir la salida. A su vez, cada paso se define un poco ms. Las llaves adicionales agrupan los procesos requeridos para producir el resultado en el siguiente nivel. Los diagramas de Warnier/Orr ofrecen a los expertos en sistemas algunas ventajas distintivas. Son simples en apariencia y fciles de entender. Aun as, son poderosas herramientas de diseo. Tienen la ventaja de mostrar agrupaciones de procesos y los datos que deben transferirse de nivel a nivel. Adems, la secuencia del trabajo hacia atrs garantiza que el sistema estar orientado hacia el resultado.
METODOLOGIA
~2~
METODOLOGIA
~3~
Saludar invitado
Decir Buenos das (1,N) Decir Buenas tardes (1,N) Decir Buenas noches (1,N)
METODOLOGIA
~4~
EJEMPLO . Para el ejemplo de Pi-Montecarlo cuyo cdigo pongo a continuacin, crear el diagrama de Warrier Orr
/* Importamos la clase externa Random para utilizarla luego. La * clase Random sirve para generar nmeros pseudoaleatorios. */ import java.util.Random; /** * La clase PiMontecarlo tan solo contiene una rutina para * estimar el nmero PI segn una variante del mtodo de * Montecarlo. * @author Curso_programador * */ public class PiMontecarlo { /** * El mtodo main() sirve para poder ejecutar el programa; * es, por lo tanto, obligatorio ponerlo. * @param args No se utilizan. */ public static void main(String[] args) { /* La variable entera cont servir para contabilizar * el nmero de veces que repetimos la operacin. Es * el nmero de disparos que hacemos. */ int cont; /* La variable dentro servir para contabilizar aquellos * puntos que caigan dentro del cuadrante. */ int dentro = 0; /* La variable gna es un objeto de la clase Random, que * nos permitir generar nmeros pseudoaleatorios. */ Random gna = new Random(System.currentTimeMillis()); /* Repeticin de las operaciones 100000 veces. El * mtodo de Montecarlo se basa en repetir muchas veces * un resultado aleatorio, contando cuntas de esas * veces es favorable. */ for (cont = 0; cont < 100000; cont++) { /* Generamos dos valores pseudoaleatorios entre * 0 y 1. Deben ser valores con decimales, de modo * que escogemos el tipo double para sendas * variables. * Los nmeros pseudoaleatorios los produce el * objeto gna mediante su mtodo nextDouble(); son * valores con decimales comprendidos entre 0 y 1. * */ double x = gna.nextDouble(); double y = gna.nextDouble(); /* Hacemos el clculo de la raz cuadrada de la * suma de los cuadrados de x e y, que se * corresponde con la distancia del punto (x,y) al * origen de coordenadas. El resultado lo metemos * en la variable d, de tipo double. */ double d = Math.sqrt(x*x + y*y); /* Aqu decidimos si el resultado es favorable o no * para el mtodo de Montecarlo. El criterio es que * la distancia d debe ser menor que 1, en cuyo
METODOLOGIA
~5~
* caso se considera que el punto cay dentro del * cuadrante. */ if (d < 1.0) { // Si cay dentro del cuadrante, contabilizamos. dentro++; } } /* Ya fuera del bucle y despus de contabilizar los * puntos, hacemos el clculo de la estimacin de PI.*/ double pi = 4.0 * dentro / cont; /* Imprimimos por pantalla el resultado obtenido. */ System.out.println(pi); } }
Inicializacin
Calcular pi
Incrementar dentro
METODOLOGIA
~6~
EJEMPLO. Realizar el diagrama de Warnier Orr para una mquina de caf (sencilla), como la vista en el Diagrama de actividad siguiente
METODOLOGIA
~7~
Insertar monedas (1*) Teclear artculo Seleccin Seleccin y cobro Ajustar cantidad de azcar (1.*) Saldo suficiente?? si + No Ms azcar + Menos azcar Mostrar importe
Preparacion= true
Colocar vaso Moler caf Caf Calentar agua Filtrar cafe Mquina de caf Preparacin Preparacin==true? Caf c/ leche + Preparar mezcla Moler caf Calentar agua Calentar leche Filtrar cafe Aadir leche Descafeinado Aadir agitador .
Nota. En este diagrama se aaden algunos elementos como el del azcar y el descafeinado
METODOLOGIA
~8~
2010-07-21 Estructura de un programa sencillo Estructura de datos Procesamiento de los datos + Generacin de los resultados
El punto de entrada: En Java mtodo main( ) En C/C++funcin main( ) EJEMPLO As para el caso del clculo de factores primos tendramos un Diagrama como el que sigue: Solicitar nmero esPrimo( ) Main ( ) FactoresPrimos( ) Mostrar resultados