Top-down y bottom-up
Top-down y Bottom-up son estrategias de procesamiento de información más que todo en las ciencias de la información. Involucrando software. Y por extensión otras ciencias humanas y científicas.
En el modelo Top-down se formula un resumen del sistema, sin especificar detalles. Cada parte del sistema se refina diseñando con mayor detalle. Cada parte nueva es entonces redefinida, cada vez con mayor detalle hasta que la especificación completa es lo suficientemente detallada para validar el modelo. El modelo "Top-down" se diseña con frecuencia con la ayuda de "cajas negras" que hacen más fácil llenar requerimientos aunque estas cajas negras no expliquen en detalle los componentes individuales.
En contraste, en el diseño Bottom-up las partes individuales se diseñan con detalle y luego se enlazan para formar componentes más grandes, que a su vez se enlazan hasta que se forma el sistema completo. Las estrategias basadas en el flujo de información "bottom-up" paracen potencialmente necesarias y suficientes porque se basan en el conocimiento de todas las variables que pueden afectar los elementos del sistema.
Ciencias de la computación
En el proceso de desarrollo de software, los enfoques Top-down y Bottom-up juegan un papel crucial.
El diseño Top-down fue promovido en los 1970s por los investigadores de IBM Harlan Mills y Niklaus Wirth. Mills desarrolló los conceptos de programación estructurada para usos prácticos y los probó en un proyecto en 1969 para automatizar el índice de la morgue del New York Times. El éxito administrativo e ingenieril del proyecto hicieron que el enfoque top-down se esparciera por IBM y por el resto de la industria de los computadores. Niklaus Wirth, que entre sus logros está el desarrollo del lenguaje de programación Pascal, escribió el paper Program Development by Stepwise Refinement, que tuvo mucha influencia. Los métodos Top-down fueron favorecidos en la ingeniería de software hasta que llegó la programación orientada a objetos a finales de los 1980s.
El enfoque top-down enfatiza la planificación y conocimiento completo del sistema. Se entiende que la codificación no puede comenzar hasta que no se haya alcanzado un nivel de detalle suficiente, al menos en alguna parte del sistema. Esto retrasa las pruebas de las unidades funcionales del sistema hasta que gran parte del diseño se ha completado.
Bottom-up hace énfasis en la programación y pruebas tempranas, que pueden comenzar tan pronto se ha especificado el primer módulo. Este enfoque tiene el riesgo de programar cosas sin saber como se van a conectar al resto del sistema, y esta conexión puede no ser tan fácil como se creyó al comienzo. El reuso del código es uno de los mayores beneficios del enfoque bottom-up.
El desarrollo de software moderno usualmente combina tanto Top-down como Bottom-up. Aunque un conocimiento completo del sistema se considera usualmente necesario para un buen diseño, haciendo que teóricamente sea un enfoque top-down, la mayoría de proyectos de desarrollo de software tratan de usar código existente en algún grado. El uso de módulos existentes le dan al diseño un sabor 'bottom-up'. Algunos enfoques usan un enfoque en el que un sistema parcialmente funcional es diseñado y programado completamente, y este sistema se va expandiendo para llenar los requisitos del proyecto.
Algunas partes de este artículo fueron tomadas del Perl Design Patterns Book
Neurociencia y Psicología
Estos términos se emplean también en neurociencia y psicología. El estudio de la atención visual proporciona un ejemplo. Si la atención de una persona se centra en una flor situada en un prado, puede ser simplemente debido a que la flor es el elemento más destacado del entorno. La información que atrae la atención de la persona hacia la flor opera de un modo bottom-up: el conocimiento previo de la flor no era imprescindible; el estímulo exterior era suficiente. La situación cambia si la persona estaba buscando una flor. En ese caso poseía una represenctación previa de lo que andaba buscando. Al aparecer el objeto buscado, éste destaca: ese sería el ejemplo del uso top-down de la información.