DIAGRAMA DE WARNIER ORRMETODOLOGIA DIAGRAMAS DE WARNIER/ORR ~1~ Los diagramas de Warnier/Orr (también conocidos como construcción lógica de programas/construcción lógica de sistemas) fueron desarrollados inicialmente en Francia por Jean Dominique Warnier y en los Estados Unidos por Kenneth Orr. Este método ayuda al diseño de estructuras de programas identificando la salida y resultado del procedimiento, y entonces trabaja hacia atrás para determinar los pasos y combinaciones de entrada necesarios para producirlos. Los sencillos métodos gráficos usados en los diagramas de Warnier/Orr hacen evidentes los niveles en un sistema y más 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 jerárquica ; 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 relación 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 iteración, selección de alternativas o el tratamiento de casos individuales. Tanto los diagramas de flujo estructurado y los métodos del español estructurado logran eso también. 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 diseño de sistemas lógicos. Para desarrollar un diagrama de Warnier/Orr , el analista trabaja hacia atrás, empezando con la salida del sistema y usando un análisis 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 inclusión por medio de una llave, se definen los pasos necesarios para producir la salida. A su vez, cada paso se define un poco más. 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 fáciles de entender. Aun así, son poderosas herramientas de diseño. Tienen la ventaja de mostrar agrupaciones de procesos y los datos que deben transferirse de nivel a nivel. Además, la secuencia del trabajo hacia atrás garantiza que el sistema estará orientado hacia el resultado. DIAGRAMA DE WARNIER ORR Ejemplo: METODOLOGIA ~2~ . N) Acompañar invitado al salón Nota.N) Decir “Buenas noches” (1.N) + Por la noche? (1.N) Decir “Buenos días” (1.N) + Por la tarde? (1.DIAGRAMA DE WARNIER ORR METODOLOGIA ~3~ Ejemplo de un robot encargado de dar la bienvenida a los invitados de una fiesta Saludar invitado Por la mañana? (1. + Se utiliza para disyuntivas + Se utiliza en el caso de concurrencia de sentencias .N) Colgar el abrigo en el perchero (1.N) + Dar la bienvenida (1.N) Coger el abrigo del invitado Ayudar al invitado a quitarse el abrigo (1.N) Decir “Buenas tardes” (1. */ int cont. que * nos permitirá generar números pseudoaleatorios. El resultado lo metemos * en la variable d.nextDouble(). cont < 100000. /* Repetición de las operaciones 100000 veces. Para el ejemplo de Pi-Montecarlo cuyo código pongo a continuación. crear el diagrama de Warrier Orr /* Importamos la clase externa Random para utilizarla luego. */ Random gna = new Random(System. * @param args No se utilizan. /* Hacemos el cálculo de la raíz cuadrada de la * suma de los cuadrados de x e y. cont++) { /* Generamos dos valores pseudoaleatorios entre * 0 y 1. de modo * que escogemos el tipo double para sendas * variables. * */ double x = gna. * es. El * método de Montecarlo se basa en repetir muchas veces * un resultado aleatorio. por lo tanto. * @author Curso_programador * */ public class PiMontecarlo { /** * El método main() sirve para poder ejecutar el programa. Deben ser valores con decimales.y) al * origen de coordenadas.sqrt(x*x + y*y). double y = gna. */ for (cont = 0. La * clase Random sirve para generar números pseudoaleatorios.DIAGRAMA DE WARNIER ORR METODOLOGIA ~4~ EJEMPLO . son * valores con decimales comprendidos entre 0 y 1.nextDouble(). */ double d = Math.util. contando cuántas de esas * veces es favorable. El criterio es que * la distancia d debe ser menor que 1. */ public static void main(String[] args) { /* La variable entera cont servirá para contabilizar * el número de veces que repetimos la operación. de tipo double. * Los números pseudoaleatorios los produce el * objeto gna mediante su método nextDouble(). /* La variable dentro servirá para contabilizar aquellos * puntos que caigan dentro del cuadrante. /* Aquí decidimos si el resultado es favorable o no * para el método de Montecarlo. Es * el número de disparos que hacemos. /** * La clase PiMontecarlo tan solo contiene una rutina para * estimar el número PI según una variante del método de * Montecarlo.currentTimeMillis()). */ int dentro = 0. */ import java. obligatorio ponerlo. en cuyo . /* La variable gna es un objeto de la clase Random.Random. que se * corresponde con la distancia del punto (x. out.1) (1.println(pi).0 * dentro / cont.N) y=random(0.N) X=random(0. */ System.N) d= + (1. hacemos el cálculo de la estimación de PI.N) d>=1 (1. /* Imprimimos por pantalla el resultado obtenido.N) +y2) Punto dentro?? (1.*/ double pi = 4. Valor del reloj des sistema + (1.1) (1.DIAGRAMA DE WARNIER ORR METODOLOGIA ~5~ * caso se considera que el punto cayó dentro del * cuadrante.N) Incrementar dentro Pi=4*(dentro/cont) Cálculo final Mostrar resultado pi .N) Incrementar cont d<=1 (1. } } /* Ya fuera del bucle y después de contabilizar los * puntos.N) Calcular pi Disparar punto (100000) Calcular coordenadas (1. */ if (d < 1.N) Inicializar operador de números pseudoaleatorios Semilla. } } Inicialización Cont = 0 (1. contabilizamos.0) { // Si cayó dentro del cuadrante. dentro++.N) Dentro = 0 (1. DIAGRAMA DE WARNIER ORR METODOLOGIA ~6~ EJEMPLO. Realizar el diagrama de Warnier Orr para una máquina de café (sencilla). como la vista en el Diagrama de actividad siguiente . DIAGRAMA DE WARNIER ORR METODOLOGIA ~7~ Insertar monedas (1…*) Teclear artículo Selección Selección y cobro Ajustar cantidad de azúcar (1….*) Saldo suficiente?? si + No Más azúcar + Menos azúcar Mostrar importe Preparacion= true Colocar vaso Moler café Café Calentar agua Filtrar cafe Máquina de café Preparación Preparación==true? Café c/ leche + Preparar mezcla Moler café Calentar agua Calentar leche Filtrar cafe Añadir leche Descafeinado Añadir agitador …………. + Desbloquear puerta Recogida Aviso acústico Nota. En este diagrama se añaden algunos elementos como el del azúcar y el descafeinado . DIAGRAMA DE WARNIER ORR METODOLOGIA ~8~ 2010-07-21 Estructura de un programa “sencillo” Estructura de datos Procesamiento de los datos + Generación de los resultados El punto de entrada: En Java método main( ) En C/C++función main( ) EJEMPLO Así para el caso del cálculo de factores primos tendríamos un Diagrama como el que sigue: Solicitar número esPrimo( ) Main ( ) FactoresPrimos( ) Mostrar resultados .