21
Organización de un programa Álvaro Sánchez Miralles Carlos Mateo

Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

Organización de un programa

Álvaro Sánchez Miralles

Carlos Mateo

Page 2: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 3: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 4: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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?

Page 5: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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?

Page 6: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 7: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 8: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 9: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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?

Page 10: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 11: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 12: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

Organización de un programa - 12

Diseño. Herramientas I

Objetos grandes Objetos pequeños

A

B C

Ir de A a C

Page 13: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 14: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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();

}

Page 15: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

Organización de un programa - 15

Diseño. Herramientas IV

SeguidorPared

OrientaHaciaObstaculo Gira

AvanzaHaciaObstaculo Avanza

OrientaParaleloPared Gira

SeguimientoPared Velocidades

• Árbol de funciones

Page 16: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 17: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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.

Page 18: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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!!

Page 19: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 20: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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

Page 21: Organización de un programa · Organización de un programa - 18 Implementación • Cada función es programada y probada por separado – Aislar problemas desde el primer momento

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