organización de un programa · organización de un programa - 18 implementación • cada función...
TRANSCRIPT
Organización de un programa
Álvaro Sánchez Miralles
Carlos Mateo
Organización de un programa - 2
Problema
• Desarrollar un robot que clasifica objetos de distinto tipo:– Coge los objetos de un lugar
– Deja cada objeto en un lugar distinto dependiendo del tipo
Organización de un programa - 3
Análisis
• Responde a la pregunta ¿qué tiene que hacer?– Fase de especificación
• Ahora no interesa cómo se va a hacer el programa
Organización de un programa - 4
Análisis. Especificaciones I
• Del entorno– Tipos de objetos
– ¿Cómo es el entorno?
– ¿Dónde están los lugares?
– ¿Hay obstáculos móviles?
– ¿Hay obstáculos no conocidos?
• Del robot– ¿Qué cinemática tiene el robot?
– ¿Qué tipo de sensores y actuadores puede tener el robot? ¿se pueden considerar ideales?
Organización de un programa - 5
Análisis. Especificaciones II
• Del modo– ¿El orden importa? ¿hay prioridades?
– ¿Qué tiempo se tiene para clasificar?
– ¿Hay que entregar algún informe?
– ¿Cuándo se considera terminada la tarea?
– ¿Qué hacer cuando se termina?
– ¿Se conoce la posición inicial del robot?
Organización de un programa - 6
Análisis. Especificaciones III
• Robot como el de práctica 1
• Entorno siguiente
Objetos grandes Objetos pequeños
A
B C
Organización de un programa - 7
Diseño
• Responde a la pregunta ¿cómo resolverlo?– Dividir en subproblemas más sencillos, repetir la misma operación con cada uno de ellos, hasta conseguir que cada uno de ellos se pueda resolver fácilmente programando
– Versión actualizada de
DIVIDE Y VENCERÁS
DISEÑO TOP-DOWN
Organización de un programa - 8
Diseño. Modularización I
• Organización del problema en módulos
• ¿Quiénes dependen de la cinemática?
Odometría
Posicionador
Entorno
Gestor de entorno
Planificador a largo
Planificador cortoactuadoresSensores
exteroceptivos
Sensores propioceptivos
Organización de un programa - 9
Diseño. Modularización II
• Las posibles variaciones en el sistema que se pudieran dar a corto plazo.
• Hay que sopesar– Si no suponen un gran coste
– Si una futura modificación podría suponer tirar gran parte del sistema
• Para ello, revisar las preguntas de la especificación y valorar posibles otras respuestas– ¿Puede cambiar la cinemática?
Organización de un programa - 10
Diseño. Modularización III
• Cada vez se detalla más
Planificador a cortoactuadoresSensores
exteroceptivos
Seguidor de pared
Evitador de obstáculos
Ir recto
Consignas
Organización de un programa - 11
Diseño. Modularización IV
Planificador a largo
Ir de A a B
Ir de A a C
Ir de B a A
Ir de C a A
Organización de un programa - 12
Diseño. Herramientas I
Objetos grandes Objetos pequeños
A
B C
Ir de A a C
Organización de un programa - 13
Sigue la pared
d
Diseño. Herramientas II
0
1
2
3
0
1
2
3
Seguidor de pared
Orientate paralelo a la paredAvanza en línea recta
Busca obstaculo más cercano
y
orientate perpendicular a él
Organización de un programa - 14
• Pseudocodigo
Diseño. Herramientas III
medidaMinUS, sensorMinUS = GetMedidaMin();
if (Estado == 0)
OrientaHaciaObstaculo();
else if (Estado == 1)
AvanzaHaciaObstaculo();
else if (Estado == 2)
OrientaParaleloPared();
else if (Estado == 3)
SeguimientoPared();
void AvanzaHaciaObstaculo(){
if (medidaMinUS < d)
Estado = 2;
else Avanza();
}
Organización de un programa - 15
Diseño. Herramientas IV
SeguidorPared
OrientaHaciaObstaculo Gira
AvanzaHaciaObstaculo Avanza
OrientaParaleloPared Gira
SeguimientoPared Velocidades
• Árbol de funciones
Organización de un programa - 16
Implementación
SeguidorPared
OrientaHaciaObstaculo Gira
AvanzaHaciaObstaculo Avanza
OrientaParaleloPared Gira
SeguimientoPared Velocidades
Análisis y Diseño TOP-DOWN
Implementación DOWN-TOP
Organización de un programa - 17
Implementación
• Se inicia con las funciones inferiores en el árbol de funciones
• ¿Por qué?– Son funciones con una labor concreta totalmente determinada
– Es fácil probar que funcionan porque no dependen de otras
– Su programación puede sugerir cambios en funciones superiores
• Si no se hiciera así el trabajo puede ser doble: programar de arriba abajo, sin probar, y cuando llegas abajo tener que cambiar las de arriba porque hay problemillas.
Organización de un programa - 18
Implementación
• Cada función es programada y probada por separado– Aislar problemas desde el primer momento
– No es lo mismo verificar un programa de 1000 líneas con funciones que se llaman unas a otras, y sin ninguna confianza de funcionamiento, que probar una función de máximo 20 líneas.
• ¡¡Alegría de que esto va funcionando poco a poco!!
Organización de un programa - 19
Implementación. Organización en módulos
plan_largo.h
#ifndef plan_largo_h
#define plan_largo_h
#include "plan_corto.h"
void IrBC(...);
void IrAC(...);
#endif
plan_largo.cpp
#include "plan_largo.h"
void IrBC(...){
...
} ...
plan_corto.h
#ifndef plan_corto_h
#define plan_corto_h
void SeguidorPared(...);
void Giro(...);
#endif
plan_corto.cpp
#include "plan_corto.h"
int SeguidorPared(...){
...
}
...
dllsencilla.dll
#include "plan_largo.h"
void CalculaMando() {
...
}
Módulo planificador a corto Módulo planificador a largo
Organización de un programa - 20
Resumen de las fases de desarrollo
• Primero: Análisis– Tener claro lo que hay que hacer
• Segundo: Diseño– Dividir en módulos
– Diseñar módulos con:
• Estados
• Pseudocódigo
• Árbol de funciones
• Tercero: Implementación– Funciones inferiores del árbol de funciones: más sencillas
– Funciones cortas: no más de 30 líneas de código real
– Probar cada función por separado mediante su programa de prueba
Organización de un programa - 21
Máximas de la programación
• Divide y vencerás
• Si reutilizas, trabajarás menos
• Detrás de cada copiar y pegar hay una función
• Antes de hacer una función, búscala en la biblioteca
• Programar no es ponerse moreno delante de la pantalla
• Pensé, y luego, programé
• Cuando requieras añadir código, piensa cuál es el lugar adecuado