Descomposición funcional, ¿para qué es útil y cuáles son sus ventajas y desventajas? ¿Dónde hay algunos ejemplos trabajados de cómo se usa?¿Qué es la descomposición funcional?
Respuesta
Descomposición funcional es el proceso de tomar un proceso complejo y descomponerlo en partes más pequeñas y simples.
Por ejemplo, piense en usar un cajero automático. Se podría descomponer el proceso en:
caminar hasta el cajero automático
Inserte su tarjeta bancaria
introduzca el PIN de
así ... se obtiene la punto.
Puede pensar en programar de la misma manera. Piense en el software que se ejecuta que ATM:
Códigopara la lectura de la tarjeta
verificación del PIN
proceso de transferencia
Cada uno de los cuales se puede dividir aún más. Una vez que ha llegado a las piezas más descompuestas de un subsistema, puede pensar cómo comenzar a codificar esas piezas. Luego, componen esas partes pequeñas en el todo mayor. Echa un vistazo a este artículo de Wikipedia:
El beneficio de descomposición funcional es que una vez que comience la codificación, se está trabajando en los componentes más simples que posiblemente puede trabajar para su aplicación. Por lo tanto, desarrollar y probar esos componentes se vuelve mucho más fácil (sin mencionar que es más capaz de diseñar su código y proyectarlo para satisfacer sus necesidades).
El inconveniente obvio es la inversión de tiempo. Para realizar la descomposición funcional en un sistema complejo se necesita más que una cantidad trivial de tiempo ANTES de que comience la codificación.
Personalmente, creo que la cantidad de tiempo vale la pena.
Me gustaría agregar que no solo se usa para descomponer procesos en sus funciones, sino que también se puede usar para descomponer todo un sistema en sus funciones más pequeñas. Cuando se usa correctamente, una descomposición funcional puede ser una de las formas más rápidas de especificar el alcance y la funcionalidad del sistema, comunicarse y lograr un acuerdo entre los diferentes interesados. Normalmente a las personas se les enseña a hacer uso de un diagrama, similar a un WBS, pero en mi experiencia, las listas de viñetas jerárquicas se comunican con la misma eficacia y es mucho más fácil y rápido redactar y editar. –
Aquí hay un ejemplo: su compilador de C.
Primero está el preprocesador: maneja #include
y #define
y todas las macros. Le das un nombre de archivo y algunas opciones y devuelve una cadena realmente larga. Llamemos a esta función preprocess(filename)
.
Luego está el analizador léxico. Toma una cuerda y la divide en tokens. Llámalo lex(string)
. El analizador toma símbolos y los convierte en un árbol, llámalo parse(tokens)
. Luego hay una función para convertir un árbol a un DAG de bloques, llámalo dag(tree)
. Llame al emisor de código emit(dag)
, que toma un DAG de bloques y escupe al ensamblador.
El compilador es entonces:
emit(dag(parse(lex(preprocess(filename)))));
Hemos descompuso un grande, difícil de entender la función (la función compile
) en un montón de pequeño, más fácil de entender funciones. Usted no tiene que hacerlo como un oleoducto, se podría escribir su programa como:
process_data(parse_input(), parse_config())
Esto es más típico; los compiladores son programas bastante profundos, la mayoría de los programas son amplios en comparación.
La descomposición funcional es una forma de descomponer el problema complejo en problemas más simples en función de las tareas que se deben realizar en lugar de las relaciones de datos. Este término generalmente se asocia con el diseño orientado al procedimiento anterior.
A short description about the difference between procedure-oriented and object-oriented design.
Es la misma medida que las estructuras WorkBreakDown (WBS), y de arriba hacia abajo MindMapping desarrollo - básicamente romper un gran problema en pequeños sub-partes, más comprensibles.
Pros
- permite un enfoque proactivo para la programación (resiting el impulso de código)
- ayuda a identificar las áreas complejas y/o de riesgo de un proyecto (en el ejemplo ATM, la seguridad es probablemente la componente más complejo)
- ayuda a identificar TODOS los componentes de un proyecto - la causa n. ° 1 de falla de proyecto/código (a través de Capers Jones) le faltan piezas, cosas en las que no se pensó hasta tarde en el proyecto (caramba, no me di cuenta Tuve que verificar el saldo de la persona antes de repartir $)
- permite la disociación de los componentes para una mejor programación, el intercambio de código y distribución del trabajo
Contras - No existen CONS reales en hacer una descomposición, sin embargo hay algunos errores comunes
- no derribar lo suficientemente lejos o rompiéndose hasta el final - cada persona necesita determinar el feliz nivel de detalle necesario para proporcionarles la información del componente sin exagerar (no desglosar en las líneas de programación de código ...)
- no utilizando módulos de códigos/patrones preexistentes en consideración (reproceso)
- no revisar con los clientes para asegurar el alcance es correcta
- no usar la falla cuando en realidad la codificación (como el diseño de una casa que olvidar el plan y que acaba de empezar a clavar unas tablas juntos)
descomposición funcional es útil antes de crear documentos de requisitos funcionales. Si necesita software para algo, la descomposición funcional responde a la pregunta "¿Cuáles son las funciones que debe proporcionar este software?". La descomposición es necesaria para definir funciones de grano fino. "Necesito software para medir la eficiencia energética" es demasiado general. Es por eso que dividimos esto en pedazos más pequeños hasta el punto en que entendemos claramente todas las funciones que los sistemas deben proporcionar. Esto puede usarse luego como una lista de verificación para la integridad de un sistema.
Un documento de requisitos funcionales (FD) es básicamente una representación textual de la descomposición funcional. Codificar directamente desde el FD puede estar bien para lenguajes de procedimiento, pero no es lo suficientemente bueno para soluciones orientadas a objetos, porque no identifica objetos. Ninguno de los dos es bueno para la planificación y prueba de usabilidad.
Mi opinión es que debe tomarse un tiempo para crear un FD, pero no para usarlo demasiado. Consulte a cada persona que conoce el proceso que está siguiendo con su sistema para encontrar todas las funciones necesarias.
Tengo mucha experiencia en el diseño, desarrollo y venta de software, y utilizo la descomposición funcional como el primer paso del desarrollo. Lo uso como base para el contrato, por lo que el cliente sabe lo que recibirá y sé lo que debo proporcionarle.
- 1. ¿Qué es la descomposición de objetos?
- 2. ¿Qué es SVD (descomposición del valor singular)
- 3. ¿Por qué es buena la programación funcional?
- 4. ¿Qué es zip (programación funcional?)
- 5. ¿Qué es un estilo sin puntos en la programación funcional?
- 6. ¿A qué tipo de problema es adecuada la programación funcional?
- 7. Descomposición en java, ¿cuándo es suficiente?
- 8. Descomposición BCNF
- 9. descomposición con pérdida
- 10. ¿Qué tan práctico es incorporar el núcleo de un lenguaje con un espacio funcional funcional (como ML) en Haskell?
- 11. Sin pérdida Unirse a la descomposición
- 12. defn vs. let respecto a la descomposición
- 13. Descomposición de un encabezado IP
- 14. Svg matriz de descomposición
- 15. Descomposición de Oaxaca en R
- 16. ¿XSLT es un lenguaje de programación funcional?
- 17. ¿La programación funcional es un subconjunto de la programación imperativa?
- 18. ¿cuál es la diferencia entre fundición c-funcional y fundición funcional?
- 19. ¿Cuál es la diferencia formal entre un lenguaje de nivel funcional y uno funcional?
- 20. Descomposición (modularidad) en los lenguajes funcionales
- 21. ¿Es Erlang realmente un lenguaje funcional?
- 22. ¿Qué árbol de autoequilibrio es el más simple en la programación funcional?
- 23. Descomposición de valores singulares (SVD) en PHP
- 24. Descomposición de la coincidencia de Scala en el operador infijo
- 25. matriz de la descomposición de los punteros en las plantillas
- 26. ¿Cuál es la forma más simple de trazar un árbol de descomposición en Mathematica?
- 27. Scala: Descomposición de tuplas de argumentos de la función
- 28. Descomposición en tercera forma normal (3NF)
- 29. ¿Qué lenguaje de programación funcional debería elegir como primer lenguaje de programación funcional?
- 30. ¿javascript funcional?
Lo pregunté porque todavía no hay una respuesta en SO, y hay algunas críticas de FD como método de diseño en http://stackoverflow.com/questions/250044/design-pattern-or-code-smell-denormalised -data-as-a-result-of-functional-decompo/250132 # 250132 –
¿Dónde dice que no se debe hacer ninguna pregunta sobre SO a menos que tenga pocos hits en Google? –