Programação (II) - Modularização
Continuando a série sobre programação, vamos falar sobre modularização. Como dividir adequadamente um sistema? Qual a unidade ideal? Como quebrar funções? Como saber se um módulo está realmente bom? Esse artigo vai tentar responder algumas dessas questões e dar argumentos para pensarmos em muitas outras.
Parte 4: O princípio da caixa-preta
Quando a fatalidade provoca um acidente de aviação, todos ouvimos falar durante muitos dias sobre a análise da caixa-preta do aparelho, que pode revelar a causa do acidente. A caixa-preta dos aviões, no entanto, não é preta, mas sim pintada de uma cor laranja fosforescente, para facilitar as buscas.
Não é desse tipo de caixa-preta, no entanto, que vamos falar.
Em programação, o Princípio da Caixa-Preta nos diz que ao planejar bons módulos devemos conhecer apenas o input e o output de cada um, ignorando completamente o funcionamento interno dos módulos.
Assim, quando especificamos um módulo, não devemos estar preocupados, por exemplo, com o algoritmo que será usado na implementação, mas apenas com o que temos de fornecer ao módulos (input), ou seja, os parâmetros de entrada, e com o que podemos obter dele (output).
O princípio da caixa-preta é extremamente valioso, pois ele torna nossos módulos independentes de implementação.
Você pode estar se perguntando qual a vantagem em termos módulos assim?
Pois bem, tomemos um exemplo:
Imagine que queremos escrever um sistema contábil que usa uma procedure X para calcular o imposto a pagar de uma lista de contribuintes da Receita Federal.
É bem sabido que a Receita Federal muda as regras do Imposto de Renda todos os anos, de forma que a procedure X tem de ser alterada anualmente.
Imagine a confusão que haveria em todo o sistema se outros módulos se baseassem no algoritmo interno da procedure X para realizarem suas tarefas. Cada vez que a procedure X fosse alterada, todos os demais módulos do sistema passariam a funcionar de modo diferente, com novos erros... Coisa de deixar qualquer um maluco! Acreditem em mim, pois já passei por isso...
Porém, se os arquitetos do sistema contábil tivessem usado o princípio da caixa-preta, não haveria problema. A procedure X receberia o CPF do contribuinte (input), pesquisaria os dados necessários para o cálculo e faria o cálculo desejado de acordo com as regras atuais (processing) e retornaria o valor do imposto a pagar (output).
Os módulos do sistema que usassem a a procedure X saberiam apenas que têm de mandar o CPF quando a chamam e que ela retorna o valor do imposto a pagar. Conheceriam o input e o output, mas o processing seria transparente para eles. Assim, quando as regras da Receita Federal mudassem o funcionamento desses módulos não seria afetado pelas mudanças da procedure X.
Portanto, o uso do Princípio da Caixa-Preta é essencial para a facilidade de manutenção, inclusive a manutenção do juízo dos programadores!
Não é desse tipo de caixa-preta, no entanto, que vamos falar.
Em programação, o Princípio da Caixa-Preta nos diz que ao planejar bons módulos devemos conhecer apenas o input e o output de cada um, ignorando completamente o funcionamento interno dos módulos.
Assim, quando especificamos um módulo, não devemos estar preocupados, por exemplo, com o algoritmo que será usado na implementação, mas apenas com o que temos de fornecer ao módulos (input), ou seja, os parâmetros de entrada, e com o que podemos obter dele (output).
O princípio da caixa-preta é extremamente valioso, pois ele torna nossos módulos independentes de implementação.
Você pode estar se perguntando qual a vantagem em termos módulos assim?
Pois bem, tomemos um exemplo:
Imagine que queremos escrever um sistema contábil que usa uma procedure X para calcular o imposto a pagar de uma lista de contribuintes da Receita Federal.
É bem sabido que a Receita Federal muda as regras do Imposto de Renda todos os anos, de forma que a procedure X tem de ser alterada anualmente.
Imagine a confusão que haveria em todo o sistema se outros módulos se baseassem no algoritmo interno da procedure X para realizarem suas tarefas. Cada vez que a procedure X fosse alterada, todos os demais módulos do sistema passariam a funcionar de modo diferente, com novos erros... Coisa de deixar qualquer um maluco! Acreditem em mim, pois já passei por isso...
Porém, se os arquitetos do sistema contábil tivessem usado o princípio da caixa-preta, não haveria problema. A procedure X receberia o CPF do contribuinte (input), pesquisaria os dados necessários para o cálculo e faria o cálculo desejado de acordo com as regras atuais (processing) e retornaria o valor do imposto a pagar (output).
Os módulos do sistema que usassem a a procedure X saberiam apenas que têm de mandar o CPF quando a chamam e que ela retorna o valor do imposto a pagar. Conheceriam o input e o output, mas o processing seria transparente para eles. Assim, quando as regras da Receita Federal mudassem o funcionamento desses módulos não seria afetado pelas mudanças da procedure X.
Portanto, o uso do Princípio da Caixa-Preta é essencial para a facilidade de manutenção, inclusive a manutenção do juízo dos programadores!