De cima para baixo e de baixo para cima (em inglês, top-down e bottom-up, respectivamente) são estratégias de processamento de informação e ordenação do conhecimento, usadas em vários campos, incluindo software, humanística, teorias científicas, gestão e organização. Na prática, eles podem ser vistos como uma abordagem de pensamento e ensino.

Uma abordagem de cima para baixo (também conhecida como stepwise design e decomposition, em inglês; e em tradução livre, “projeto passo a passo” e “decomposição”, respectivamente) é essencialmente a fragmentação de um sistema para promover compreensão da composição de seus subsistemas. Numa abordagem de cima para baixo, é formulada uma visão geral do sistema, partindo de uma instância final para a inicial, como uma engenharia reversa. Cada nível vai sendo detalhado, do mais alto ao mais baixo, de forma a se chegar nas especificações dos níveis mais básicos do elemento abordado.

Uma abordagem de baixo para cima é a “colcha de retalhos” do sistema para dar rumo a sistemas mais complexos. Tornando assim, a cada passo, os sistemas originais em subsistemas de um sistema final maior. Um processamento de baixo para cima é um tipo de processamento de informação baseado em dados de entrada vindos do meio ao qual o sistema pertence para formar uma percepção. A informação entra nos olhos e segue por uma direção (entrada); e é transformada em imagem pelo cérebro, que pode interpretar e reconhecer como uma percepção (saída). Numa abordagem de baixo para cima, os elementos básicos são inicialmente descritos em detalhes. Esses elementos são associados para formar um subsistema maior, que então pode ser associado a outros elementos em muitos outros níveis eventualmente até completar o nível mais alto do sistema objetivo. Essa estratégia se assemelha a um modelo de "semente", de forma a começar pequeno com elementos básicos e ir crescendo ao longo de completações e associações.

Haveria também uma terceira abordagem, menos difundida, denominada middle out, com o intuito de se visualizar um problema não somente de cima para baixo ou vice-versa, mas sim do seu núcleo para suas extremidades. Ou seja, por exemplo, numa organização empresarial, uma consultoria poderia não somente se basear no organograma para analisar uma empresa, mas observar suas principais áreas, ou o foco do problema; e a partir daí verificar qual o impacto dos níveis superiores, ou inferiores, que teria nessa área.

Projeto de produto e desenvolvimento

Ao decorrer de um projeto e desenvolvimento de novos produtos, projetistas e engenheiros contam tanto com a abordagem "de baixo para cima" quanto a de "cima para baixo". A abordagem de "baixo para cima" tem sido utilizada quando componentes existentes ou não disponíveis no mercado são selecionados a integrar um produto. Um exemplo seria escolher um dado parafuso e projetar a entrada em componentes nos quais este parafuso se fixe corretamente neste. Numa abordagem de "cima para baixo", um parafuso seria customizado de acordo com uma dada entrada de parafuso de um componente. Para um produto com requerimentos mais restritivos (como peso, geometria, segurança, ambiente, etc.), como o espaço que ocupa, uma abordagem de cima para baixo pode ser mais adequada ao projeto. No entanto, como é mais importante minimizar custo e incrementar viabilidade, como fabricação de equipamentos, uma abordagem de baixo para cima seria utilizada.

Ciência da computação Desenvolvimento de software Parte dessa seção é de Perl Design Patterns Book.

No processo de desenvolvimento de software, as abordagens de cima para baixo e de baixo para cima têm um papel chave.

Abordagens de cima para baixo enfatizam o planejamento e uma compreensão completa do sistema. Nenhum código pode começar até que um nível de detalhe necessário tenha sido atingido na concepção do sistema. Abordagens de cima para baixo são implementadas, anexando os tocos no lugar do módulo. Isto, no entanto, atrasa os testes das unidades funcionais finais da criação de um sistema. "De baixo para cima" dá foco à codificação e testes iniciais, o que pode começar assim que o primeiro módulo foi especificado. Esta abordagem, no entanto, corre o risco de que os módulos possam ser codificados sem ter uma ideia clara de como eles se ligam a outras partes do sistema; e que tal ligação pode não ser tão fácil à primeira vista. Reutilização de código é um dos principais benefícios da abordagem bottom-up (de baixo para cima).

O projeto top-down foi promovido em 1970 pelos pesquisadores da IBM Harlan Mills e Niklaus Wirth. Mills desenvolveu conceitos de programação estruturada para o uso prático e testou-os em um projeto de 1969 para automatizar o obituário do New York Times. O sucesso de engenharia e gestão deste projeto levou à disseminação da abordagem de cima para baixo através da IBM e o resto da indústria de computadores. Entre outras conquistas, Niklaus Wirth, o desenvolvedor da linguagem de programação Pascal, escreveu o jornal Programa de Desenvolvimento influente por Stepwise Requinte. Desde que Niklaus Wirth passou a desenvolver linguagens como Modula e Oberon (onde se podia definir um módulo antes de saber sobre toda a especificação do programa), pode-se inferir que a abordagem de cima para baixo não era estritamente o que ele promoveu. Métodos de cima para baixo foram favorecidos em engenharia de software até o final de 1980; e programação orientada a objetos assistida em demonstrar a ideia de que ambos os aspectos de top-down e bottom-up podem ser utilizados à programação.

Abordagens de projeto de software modernos costumam combinar tanto abordagens de cima para baixo quanto de baixo para cima. Embora a compreensão de todo o sistema é geralmente considerada necessária para um bom design, resultando teoricamente em uma abordagem de cima para baixo, a maioria dos projetos de software tentam fazer uso de código existente em algum grau. Módulos preexistentes dão ao projeto um pouco da abordagem "de baixo para cima". Algumas abordagens de design também usam uma abordagem em que um sistema parcialmente funcional é projetado e codificado à conclusão; e este sistema é, então, expandido para cumprir todos os requisitos do projeto.

Programação thumb|esquerda|Os blocos de construção são um exemplo de projeto de "baixo para cima", pois as peças são criadas primeiro e depois montadas, sem levar em consideração como as peças funcionarão na montagem. Top-down é um estilo de programação, o pilar de linguagens procedurais tradicionais, em que o design começa especificando peças complexas e, em seguida, dividindo-as em pedaços menores sucessivamente. A técnica para escrever um programa usando métodos de cima para baixo é escrever um procedimento principal que nomeia todas as principais funções de que necessitará. Mais tarde, a equipe de programação olha para os requisitos de cada uma dessas funções e o processo é repetido. Estas sub-rotinas compartimentadas, eventualmente, irão realizar ações tão simples que podem ser facilmente e de forma concisa codificadas. Quando todas as suas diversas sub-rotinas foram codificadas, o programa está pronto para o teste. Ao definir como o aplicativo vem junto a um nível elevado, o trabalho de nível inferior pode ser autossuficiente. Ao definir como as abstrações de nível mais baixo são esperadas para integrar os de nível superior, as interfaces tornam-se claramente definidas.

Em uma abordagem bottom-up, os elementos de base individuais do sistema são especificados primeiro bem detalhadamente. Estes elementos são, então, ligados entre si para formar subsistemas maiores, que em seguida, por sua vez, estão ligados, por vezes, em vários níveis, até um sistema completo de nível superior ser formado. Essa estratégia se assemelha a um modelo de "semente", como citado anteriormente na definição de bottom-up. No começo, esses subsistemas são pequenos, mas eventualmente crescem em complexidade e completude. Programação orientada a objetos (POO) é um paradigma que usa "objetos" para projetar aplicativos e programas de computador. Em engenharia mecânica, com programas como o Pro/ENGINEER e SolidWorks, os usuários do Autodesk Inventor podem projetar produtos como peças que não fazem parte do todo; e depois adicionar os pedaços juntos para formar conjuntos como a construção com LEGO. Engenheiros chamam isso de projeto de peça.

Esta abordagem de baixo para cima tem um ponto fraco. É necessário ter boa intuição para decidir a funcionalidade que deve ser fornecida pelo módulo. Se um sistema está a ser construído a partir do sistema existente, esta abordagem é mais adequada, já que começa a partir de alguns módulos existentes.

Parsing Em tradução livre, análise parsing é o processo de análise de uma sequência de entrada (tais como a leitura a partir de um arquivo ou de um teclado), a fim de determinar a sua estrutura gramatical. Este método é utilizado na análise de linguagens naturais e linguagens de computador, como em um compilador.

O parsing na abordagem bottom-up é uma estratégia para a análise de relações de dados desconhecidos, que tenta identificar as unidades mais fundamentais em primeiro lugar; e, em seguida, para inferir estruturas de ordem superior a partir deles. Parsers ("Analisadores" em tradução livre) de top-down, por outro lado, usam a hipótese geral da árvore de análise estrutural e, em seguida, consideram se as estruturas fundamentais conhecidas são compatíveis com a hipótese.

Nanotecnologia

O Top-down e bottom-up são duas abordagens para a fabricação de produtos. Esses termos foram aplicados pela primeira vez ao campo da nanotecnologia pelo Instituto Foresight em 1989, a fim de distinguir entre a manufatura molecular (para produzir, em massa, objetos grandes e atomicamente precisos) e fabricação convencional (que pode produzir em massa objetos grandes que não são atomicamente precisos). As abordagens bottom-up buscam ter menores componentes (geralmente moleculares) edificados em conjuntos mais complexos, enquanto que as abordagens top-down procuram criar dispositivos em nanoescala usando componentes maiores, externamente controlados para dirigir sua montagem.

A abordagem top-down, muitas vezes, usa workshops tradicionais ou métodos de micro-fabricação onde as ferramentas externamente controladas são usadas para cortar, dividir e moldar materiais na forma e ordem desejada. Técnicas de micropatterning, como fotolitografia e jato de tinta de impressão, pertencem a esta categoria.

Abordagens bottom-up, ao contrário, usam propriedades químicas de moléculas simples para fazer com que componentes de moléculas simples se auto-organizem ou se auto-montem em algumas conformações úteis; ou contem com montagem posicional. Essas abordagens utilizam os conceitos de auto-montagem molecular e/ou reconhecimento molecular. (Veja também: Química supramolecular). Tais abordagens bottom-up devem, de um modo geral, ser capazes de produzir dispositivos em paralelo e muito mais baratos do que os métodos top-down, mas poderia ser potencialmente esmagada na medida em que o tamanho e a complexidade da montagem desejada aumentam.

Neurociência e psicologia Esses termos também são empregados em neurociência, neurociência cognitiva e psicologia cognitiva para discutir o fluxo de informações no processamento.Palmer 134 Normalmente, o sensorial de entrada é considerado "down"; e os mais altos processos cognitivos que têm mais informações de outras fontes, são considerados "up". Um processo bottom-up é caracterizado por uma ausência de nível de direção mais alto no processamento sensorial, enquanto que um processo top-down é caracterizado por um alto nível de direção de processamento sensorial por mais cognição, tais como objetivos ou metas (Beiderman, 19).