quinta-feira, 25 de agosto de 2011

Modularização

O uso de uma técnica de refinamentos sucessivos nos possibilita, já nas etapas iniciais do desenvolvimento de uma solução para um problema computacional, certas abstrações sobre as tarefas a serem executadas no algoritmo. Estas abstrações são definidas apenas pelo seu efeito e constituem uma definição funcional da tarefa. Nas etapas posteriores, cada descrição funcional é substituída por trechos mais elaborados que especificam as etapas do processo: os módulos.

Identificado também por Programação top-down, temos nessa técnica uma estratégia que busca a solução de um problema a partir "do todo" observando em seguida as "particularidades" necessárias à resolução.

Quando desenvolvemos um algoritmo por refinamentos sucessivos procuramos dividir o algoritmo em unidades que representam as tarefas mais elementares, que se possa detectar e, para compor a solução do problema.

Um algoritmo projetado dessa forma será composto de módulos, que representam grupos de comandos que executam uma tarefa específica: no corpo do algoritmo ou espalhados em módulos independentes.

Vejamos um exemplo com a solução do problema em pseudocódigo e depois sua tradução para Linguagem C.

Problema: "elaborar um programa para cálculo da Folha de Pagamento de uma Empresa"

Solução:
1ª etapa: um algoritmo simples seria 

PROGRAMA Folha
     LEIA "dados do funcionário"
     Determine o Salário
     ESCREVA "Salário Calculado"
FIM

Precisamos refinar o comando "Determine o Salário", resultando:

PROGRAMA Determine o salário
     Calcule os proventos
     Calcule as deduções
     Calcule o Salário Líquido
FIM

Ao elaborar o refinamento não houve preocupação de como o processo de cálculo dos proventos e das deduções seria efetuado. Essas ações constituem funções bem definidas no programa e serão executadas por módulos específicos. Nessa fase podemos optar pelo desenvolvimento de módulos para o cálculo dos proventos e das deduções. Obtemos:

PROGRAMA Determine o salário
     proventos
     deduções
     Calcule o Salário Líquido
FIM

Correspondendo aos módulos:

PROGRAMA proventos
     Determina o Salário Bruto
FIM

PROGRAMA deduções
     Determina as deduções salariais
FIM

Vejamos como ficam esses módulos sabendo que:
- o cálculo dos proventos junta o salário bruto (horas trabalhadas * salário-hora) com o salário família
- as deduções representam os descontos de INSS e IRPF a partir dos cálculos:
     - desconto INSS = salário bruto * alíquota
     - desconto IRPF = (salário bruto - desconto INSS) * alíquota - desconto tabela IRPF
     - tabelas com alíquotas e descontos baseados nas faixas de salário:

 

PROGRAMA proventos
     Salário Bruto horas trabalhadas * salário-hora
     Salário Família número de filhos * valor referência de salário família
     Proventos Salário Bruto + Salário Família
FIM

PROGRAMA deduções
     INSS Salário Bruto * alíquota INSS
     IRPF (Salário Bruto - INSS) * alíquota IRPF - desconto_IRPF
     Deduções INSS + IRPF
FIM

detalhando os cálculos de alíquotas e descontos;

PROGRAMA alíquota INSS
     SE Salário Bruto <= 1000
          ENTÃO Alíquota 8%
          SENÃO SE Salário Bruto <= 2500
               ENTÃO Alíquota 10%
               SENÃO Alíquota 12%
FIM

PROGRAMA alíquota IRPF
     SE (Salário Bruto - INSS) <= 1000
          ENTÃO Alíquota 0%
          SENÃO SE (Salário Bruto - INSS) <= 2500
               ENTÃO Alíquota 15%
               SENÃO Alíquota 27%
FIM

PROGRAMA
desconto_IRPF
     SE (Salário Bruto - INSS) <= 1000
          ENTÃO Desconto 0
          SENÃO SE (Salário Bruto - INSS) <= 2500
               ENTÃO Desconto 100
               SENÃO Desconto 300
FIM

Assim, completamos nosso desenvolvimento obtendo:
     - módulos para cálculo de alíquotas e descontos;
     - módulos para cálculo de proventos e deduções.

PROGRAMA Determine o salário
     proventos
     deduções
     Salário Líquido Proventos - Deduções
FIM

PROGRAMA Folha
     LEIA "dados do funcionário"
     Determine o Salário
     ESCREVA "Salário Calculado"
FIM

0 comentários:

Postar um comentário