Aportación Java México - PCJ - "Factores a Considerar en el diseño de software"

“No debes dar al mundo lo que pide, pero sí lo que necesita.”

Pues bien como primer factor hablemos de la alta cohesión, una cualidad fundamental en el diseño de software ya que en ocasiones se le asigna demasiada funcionalidad a un objeto esto conlleva a asignar tareas especificas a cada objeto, es decir, es importante descomponer todas las funcionalidades de un software, en objetos que poseen específicamente atributos y métodos y estos a su vez en funcionalidades para cada objeto en específico. Esto permite comprender mejor el diseño del software además de la reutilización de los objetos y clases.

“Cada objeto hace una cosa bien sin intentar demasiadas cosas ”.

El término Acoplamiento se refiere al: “Grado de interdependencia entre las unidades de software (módulos, funciones, subrutinas, bibliotecas, etc.) de un sistema informático.” Esto nos da a demostrar el grado de dependencia de unidades de software entre sí, es decir el grado en el que una unidad puede funcionar sin recurrir a otras.

Se dice que el nivel más bajo de acoplamiento es cuando una función puede realizar completamente su tarea sin recurrir a otra.

Es necesario en el diseño de un sistema informático que las partes que lo integran contengan menos grados de dependencia entre sí. Pero aclaro a mi juicio y creo que al de la mayoría, es imposible un desacoplamiento total de las unidades de software.

El bajo acoplamiento permite darle mantenimiento a todas las unidades de software, además de reutilizarlas, también cabe mencionar en que en ocasiones puede propagarse en las demás unidades de software complicando aún más la detección y solución del problema.

Otro término importante es la modularidad: “que es la capacidad que tiene un sistema de ser estudiado, visto o entendido como la unión de varias partes que interactúan entre sí y que trabajan para alcanzar un objetivo común, realizando cada una de ellas una tarea necesaria para la consecución de dicho objetivo”. La división de un sistema informático en módulos y submódulos, permiten desarrollar funciones más especificas, permitiendo así la repartición de tareas si se esta trabajando con un equipo de desarrolladores, esto permite ir alcanzando los objetivos del desarrollo de los sistemas y la asignación de dichas tareas a cada uno de los miembros del equipo de trabajo.

Tal vez nosotros nos hemos preguntado como desarrolladores seremos eternos para un sistema en especifico, es verdad que otra persona vendrá después de nosotros para darle seguimiento al proyecto como agregarle módulos o funciones. El sistema tanto en el código como en el diseño esta totalmente claro para darle posibilidad a que un nuevo desarrollador se integre y puede hacerle cambios o modificaciones. ¿Dado el efecto domino que tendrá como consecuencia al modificar alguna parte del sistema ?. Considero que seria un gran dolor cabeza realizar un cambio al sistema si no si quiera se conoce a profundidad las relaciones que este pueda tener con otros módulos. Además en términos de escalabilidad es posible que el sistema informático cuente con la posibilidad de extenderse sin perder la calidad deseada y en los servicios que este ofrece. ¿Es conveniente agregar más programadores cuando se atrase un proyecto de software?. O es mejor seguir trabajando con el mismo grupo de trabajo, sin la necesidad de recurrir a gente que no esta familiarizado con el proyecto desarrollo. A mi sincera opinión creo que estos son algunos de los factores a considerar para el diseño de un sistema informático.

Bueno a gracias por el espacio a Java México, además de mis sinceras felicitaciones a todos los instructores y colaboradores para el proyecto PJC, es de admirar las ganas por compartir su conocimiento. Muchas Gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

PCJ

Interesante artículo, sobre todo porque la gente que viene con dudas a los foros generalmente quiere tratar solamente código y piensan que todo es puro código, cuando muchos de sus problemas salen de un mal diseño. Es muy importante conocer y aplicar estos conceptos de alta cohesión y bajo acoplamiento, no importa si se hace arquitectura de sistemas o se está desarrollando un pequeño componente para invocar un stored procedure.

Imagen de Jhanno

Ganador Lugar PCJ

Queremos anunciarte que eres uno de los seleccionados para ser alumno en PCJ. Felicidades.

Imagen de ale_imp

Muchas Gracias!!

Muchisimas Gracias la verdad se siente mucha alegría poder partcipar en este proyecto. Gracias a Java México y a todos los intructores. Nos vemos por ahí el 8.

Imagen de skuarch

La interdependencia

antes de leer este articulo yo tuve que aprender en base a errores, por ejemplo creaba una clase pero esa clase dependia de otras clase que a su vez esas otras clase dependian de otras, entonce me di cuanta que nececitaba casi copiar los proyectos para poder generar nuevos proyectos, con la practica aprendi a realizar las cosas mas independientes, tal vez si hubiera leido este tipo de articulos antes de programar mis programas (hace unos dos años) hubieran sido mas practicos.

gracias por el aporte

GRASP son patrones generales de software

mas detalles sobe este tema googleen buscando GRASP son patrones generales de software