Planeación en proyectos de programación orientada a objetos

Diseño y análisis.
Cuando el problema es bien conocido no se requiere de un análisis muy profundo o de detenerse demasiado en el diseño.
Pero cuando el problema no es bien conocido se requiere de analizar cómo abordarlo pero caer en un estado de análisis-parálisis, dedicando mucho tiempo a detalles que aun no se conocen bien.

-          Fase 0: Hacer un plan.
Primero hay que decidir qué pasos se van a dar en el proceso.
Existen varios métodos o estructuras que se usan comúnmente, incluso inconscientemente (modo vacaciones xP), pero es necesario utilizar una estructura bien establecida para resolver el problema de forma seria y audaz. Un buen método es  separar el problema en pequeñas partes que son más fáciles de abordar y depurar.

-          Fase 1:¿Qué estamos haciendo?
Es importante contar con algunas cosas para iniciar un proyecto.
n  Lista de directrices para saber cuándo ah hecho su trabajo y el cliente estará satisfecho.
n  Haga una descripción de lo que hará el programa (no como) por satisfacer los requisitos.
Mantener los documentos iniciales pequeños y concisos (listas y diagramas básicos) nos dará siempre una buena guía para no perdernos en el camino.
n  Casos de uso:
Los casos de uso son encontrados al responder a las siguientes preguntas:
¿Quién usara el sistema?
¿Qué pueden hacer estos actores con el sistema?
¿Cómo puede este actor hacer eso con el sistema?
¿Cómo podría alguien más hacer este trabajo si alguien más estuviera haciéndolo, o el mismo actor tuviera n objetivo diferente? (variaciones)
¿Qué problemas podrían ocurrir mientras hace esto el sistema? (excepciones)
Lo bueno de centrarse en casos de uso es que siempre le lleva de vuelta a lo esencial y le mantiene alejado  de los asuntos no críticos para conseguir terminar el trabajo.
En este punto es importante hacer algún tipo de estimación de tiempo básico.
-          Fase 2:¿Cómo podemos construirlo?
Técnica Clase-Responsabilidad-Colaboración.
“Determinando las clases” CRC
Empiza con una colección de 3 a 5 tarjetas en blanco y se escribe sobre ellas, cada tarjeta representa una única clase, y en ella se escribe:
n  Nombre de la clase: Referente a su función.
n  Las responsabilidades de la clase: Qué debe hacer. ¿Qué objetos quiere aparezcan por arte de magia para resolver su problema?
n  Las colaciones de la clase: ¿Qué otras clases interactúan con ésta?
Las fichas deben ser pequeñas para mantenerlas sencillas y sin mucho detalle. Si no se puede apuntar todo en una pequeña ficha, la clase es demasiada compleja (está poniendo demasiados detalles, o debería de crear más clases).
n  5 Etapas del diseño de objetos.
1.       Descubrimientos de objetos:
Los objetos pueden descubrirse vendo los factores eternos, y los limites, duplicación de elementos en el sistema, y las uniones conceptuales más pequeñas.
2.       Montaje de objetos:
Las necesidades internas del objeto pueden requerir otras clases que den soporte.
3.       Construcción del sistema:
Conforme aprende, evolucionan sus objetos. La necesidad de comunicación e interconexión con otros objetos en el sistema puede cambiar las necesidades de sus clases o requerir clases nuevas.
4.       Extensión de sistema:
Al añadir nuevas características a un sistema puede reestructurar pates para que el diseño soporte extensiones sencillas del sistema.
5.       Reutilización de objetos:
Objetos comunes entre programas tienden a resolver problemas más generales para ser reutilizables.

-          Fase 3: Construir el núcleo:
El objetivo es encontrar el núcleo de la arquitectura de un sistema que hay que implementar para generar un sistema funcional, sin importar lo incompleto que esté el sistema en la pasada inicial.
Probablemente descubrirá cambios y mejoras que se pueden hacer en la arquitectura original, cosas que podría no haber aprendido sin implementar el sistema.
Cuando el núcleo de sus sistema sea estable, estará preparado para progresar y añadir mas funcionalidad.

-          Fase 4: Iterar los casos de uso:
Añada una colección de características durante cada iteración, en un periodo razonablemente corto de desarrollo.
En cada iteración atienda a un único naso de uso, este dará un paquete de funcionalidades relacionada que se pueden construir en un sistema de una vez, a lo largo de una iteración.
Se deja de iterar cuando se consigue la funcionalidad deseada o se acaba el plazo impuesto y el cliente está satisfecho con la versión actual.
-          Fase 5: Evolución:
Esa es la etapa en la surgen nuevas cuestiones o detalles a corregir, que permiten ir puliendo el producto final para mejorase en ciertos aspectos.
También se debe tener la sensación de que la estructura del programa sobrevivirá a los cambios que inevitablemente habrá durante su ciclo de vida, y que estos cambios puedan hacerse fácil.


0 comentarios:

Primeros Pasos en C++

Esta vez decidí comenzar mas encerio, después de haber rodeado demasiado sobre miles de tutoriales y libros (pdf) sobre opengl, opencv y demás en mi vida, eh llegado al punto en el que todo wannabe developer debe llegar xP, aprender por buena ley c++ xP.

Siendo un poco muy temprano de este dia, es tiempo de tomar un buen material (eso significa gratis y maso bien) de c++ que eh encontrado en la red, los cuales comparto con el mundo.

Al parecer por las primeras ojeadas parecen unos libros bastante serios, que saben lo que hacen y que manejan tecnicas sanas de programacion, y del lenguaje c++, y gracias a Dios en español xP (lo digo porque es mas facil que traducirlo en tu mente jeje xP).

El libro consta de 2 tomos:
http://arco.esi.uclm.es/~david.villa/pensar_en_C++/pensar_en_cpp-vol1.pdf
http://arco.esi.uclm.es/~david.villa/pensar_en_C++/pensar_en_cpp-vol2.pdf

Por ahora me dedicare a devorarme estos 2, y aportare algunas cosas que me resulten interesante y de ayuda de estos.

0 comentarios:

Comienzo de un nuevo proyecto...

Esta es la primer publicación que realizo en el blog, este blog fue empezado con la idea de compartir mi experiencia con tecnologías de desarrollo de software en el área de multimedia, principalmente en el manejo de imágenes y desarrollo en 3D con OpenGl.

Con esto busco el compartir mis experiencias y ayudar a cualquiera que requiera la información, así como mantener un historial de mi aprendizaje y habilidades adquiridas, para proyectos futuros.

Espero poder ser de ayuda para alguien en un futuro y compartir con personas interesadas en temas similares puntos de opinión.

0 comentarios: