Antecedentes: mis colaboradores y yo estamos escribiendo un artículo para una revista académica. En el curso de nuestra investigación, escribimos un programa de simulación en Java. Queremos que el programa de simulación esté disponible gratuitamente para que otros lo usen. Hemos decidido alojar el código en un repositorio de GitHub. Para facilitar el uso de otros, queremos escribir buena documentación para nuestro programa, que incluye:
- Javadocs para cada clase y método
- Cómo usar el código
- Describir la estructura de alto nivel del código.
Mi pregunta de alto nivel es: ¿Podría proporcionar un buen ejemplo de las palabras y los diagramas que se pueden usar para describir la estructura de alto nivel de un programa? Esto incluye como subpreguntas:
- ¿Cómo mostramos qué clases están contenidas en qué paquetes?
- ¿Cómo mostramos qué paquetes dependen de otros paquetes?
- ¿Cómo mostramos cómo funcionan juntos los objetos / clases en el programa?
- Hemos tratado de usar principios de diseño basados en dominios en el diseño de mi código. ¿Cómo mostramos la correspondencia entre los objetos en el dominio y los archivos de código fuente particulares que codifican estos objetos? (Vea la descripción de mi "lenguaje ubicuo" del proyecto a continuación).
Lo que he hecho hasta ahora
Lengua ubicua
Ponemos una descripción de "lenguaje ubicuo" del código en un archivo ubiquitous-language.md
, contenido a continuación.
El propósito de este proyecto es estudiar qué tan bien funciona una política de reabastecimiento en una cadena de suministro simple con una sola instalación, bajo diferentes modelos de tiempo de entrega, retrasos en los informes y modelos de demanda.
En cada período, ocurren los siguientes eventos:
- Si un envío está programado para llegar a la instalación en el período actual, entonces el nivel de inventario de la instalación se incrementa en X unidades.
- Si el cronograma indica que el período actual es un período de informe, la instalación presenta un informe al proveedor . El proveedor puede recibir el informe instantáneamente o con un retraso de varias semanas, según lo especificado en el cronograma .
- Si el proveedor ha recibido un informe , basado en la política de reabastecimiento , calculará una cantidad de reabastecimiento de X unidades. Se programará que llegue un envío de X unidades del producto después de un tiempo de espera de 1 período.
- Los clientes llegan a las instalaciones y exigen X unidades del producto. Cualquier demanda no satisfecha se pierde.
Estructura del código fuente
Ponemos una descripción incompleta "de alto nivel" del código en un archivo structure.md
, contenido a continuación.
Estructura de nivel de paquete
En el nivel más alto, el código fuente se organiza en tres paquetes.
com.gly.sfs
La clase principal con elmain
método reside en este paquete.com.gly.sfs.model
Las clases de modelo de dominio residen en este paquete.com.gly.sfs.util
Las clases de ayuda residen en este paquete.