O que é decomposição funcional?

Decomposição funcional, para que é útil e quais são os seus prós e contras? Onde estão alguns exemplos trabalhados de como ele é usado?

Author: Don Branson, 2009-06-04

5 answers

A decomposição funcional é o processo de tomar um processo complexo e dividi-lo em partes menores e mais simples. Por exemplo, pense em usar um ATM. Você poderia decompor o processo em:
  1. Vai até ao Multibanco.

  2. Inserir o seu cartão bancário

  3. Introduza o seu pin

Bem...já percebeste. Podes pensar em Programar da mesma maneira. Pense no software que está executando ATM:
  1. Código de leitura da carta

  2. Verificação do PIN

  3. Processamento De Transferências

Cada um dos quais pode ser dividido mais. Uma vez que você chegou às peças mais decompostas de um subsistema, você pode pensar em como começar a codificar essas peças. Então você compõe essas pequenas partes no todo maior. Confira este artigo do Wikipedia:

Decomposição (programação)

O benefício da funcionalidade decomposição é que uma vez que você começa a codificar, você está trabalhando nos componentes mais simples que você pode possivelmente trabalhar com para a sua aplicação. Portanto, desenvolver e testar esses componentes torna-se muito mais fácil (para não mencionar que você é mais capaz de arquitectar o seu código e projeto para atender às suas necessidades).

O lado negativo óbvio é o investimento no tempo. Para executar a decomposição funcional em um sistema complexo leva mais do que uma quantidade trivial de tempo antes que a codificação comece. Pessoalmente, Eu... acho que essa quantidade de tempo vale bem a pena.
 60
Author: Justin Niessner, 2009-06-03 23:51:14
É o mesmo que estruturas de quebra de trabalho (WBS), mapeamento de mentes e desenvolvimento de cima para baixo - basicamente quebrando um grande problema em sub-partes menores e mais compreensíveis.

Prós

  • permite uma abordagem proactiva da programação (resiting the urge to code)
  • ajuda a identificar as áreas complexas e / ou de risco de um projecto (no exemplo ATM, a segurança é provavelmente o componente mais complexo)
  • ajuda a identificar todos os componentes de um projecto-a Causa # 1 de falha de projeto / código (via Capers Jones) está faltando peças-coisas que não foram pensadas até o final do projeto (gee, eu não percebi que eu tinha que verificar o saldo da pessoa antes de distribuir o$)
  • permite a dissociação de componentes para uma melhor programação, partilha de códigos e distribuição do trabalho

Cons-não há CONS reais em fazer uma decomposição, no entanto há alguns erros comuns {[[2]}

  • não se está a decompor o suficiente ou a decompor - se até ao extremo de cada um. a pessoa precisa determinar o nível feliz de detalhe necessário para fornecer-lhes o insight para o componente sem exagerá-lo (não quebre em linhas de programação de código...)
  • não utilizar modelos/módulos de código pré-existentes em consideração (retrabalho)
  • não rever com os clientes para garantir que o âmbito está correcto
  • Não usar o colapso quando se codifica (como desenhar uma casa do que esquecer o plano e começar a pregar algumas tábuas juntos)
 6
Author: meade, 2009-06-04 15:07:52
Aqui está um exemplo: o seu compilador C. Primeiro há o pré-processador: trata de #include e #define e de todas as macros. Você dá - lhe um nome de arquivo e algumas opções e ele retorna uma cadeia realmente longa. Vamos chamar a esta função preprocess(filename). Depois há o analisador lexical. Pega numa corda e parte-a em fichas. Chama-o. O analisador toma fichas e transforma - as numa árvore, chama-lhe parse(tokens). Depois há uma função para converter uma árvore a um monte de blocos., chama-o. Chama o emissor de código emit(dag), que pega num saco de blocos e cospe o montador.

O compilador é então:

emit(dag(parse(lex(preprocess(filename)))));

Decompusemos uma função Grande, difícil de entender (a função compile) em um grupo de funções menores, mais fáceis de entender. Você não tem que fazer isso como um pipeline, você poderia escrever o seu programa como: [[12]}

process_data(parse_input(), parse_config())

Isto é mais típico; compiladores são programas bastante profundos, a maioria dos programas são amplos por comparação.

 3
Author: Dietrich Epp, 2009-06-03 23:58:14
A decomposição funcional é uma forma de dividir o problema complexo em problemas mais simples baseados nas tarefas que precisam ser realizadas em vez das relações de dados. Este termo é geralmente associado com o design mais antigo orientado para procedimentos.

Uma breve descrição sobre a diferença entre o projeto orientado a procedimentos e o projeto orientado a objetos.

 3
Author: Mark, 2009-06-04 00:08:26

A decomposição funcional é útil antes de criar documentos de requisitos funcionais. Se você precisa de software para algo, a decomposição funcional responde à pergunta "Quais são as funções que este software deve fornecer". A decomposição é necessária para definir funções de grão fino. "I need software for energy efficiency measurement" é demasiado geral. É por isso que dividimos isto em partes menores até ao ponto em que compreendemos claramente todas as funções que os sistemas precisam fornecer. Presente pode ser usado mais tarde como uma lista de verificação para a completude de um sistema.

Um documento de requisitos funcionais (FD) é basicamente uma representação textual da decomposição funcional. Codificar diretamente a partir do FD pode ser ok para linguagens processuais, mas não é bom o suficiente para soluções orientadas a objetos, porque ele não identifica objetos. Nem é bom para o planejamento e teste de usabilidade.

A minha opinião é que você deve tomar algum tempo para criar um FD, mas não usá-lo muito do tempo. Consulte cada pessoa que conhece o processo que você está seguindo com o seu sistema para encontrar todas as funções necessárias.

Tenho muita experiência em design de software, desenvolvimento e venda, e uso a decomposição funcional como o primeiro passo de desenvolvimento. Uso-o como base para o contrato, para que o cliente saiba o que vai receber e sei o que devo fornecer.
 2
Author: Ljubomir Đokić, 2017-05-29 22:28:54