Pular para o conteúdo

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.
Edvaldo Silva de Almeida Júnior EdDeAlmeida
Hits: 47.419 Categoria: Linux Subcategoria: Software
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução
   2. PE ou POO?
   3. Unidades básicas
   4. O princípio da caixa-preta
   5. Critério nº 01: Reusabilidade / FAN-IN
   6. Critério nº 02: Baixa complexidade / FAN-OUT
   7. Critério nº 03: Acoplamento
   8. Critério nº 04: Coesão
   9. Conclusão

Como a Tecnologia pode ajudar a Democracia?

Livre não precisa ser gratuito

O "Linux Tinha Chapéu"

Programação (I) - Planejamento e Otimização

KDE em um PC "primitivo"

MySQL, Apache2, PHP5, phpMyAdmin e o driver de conexão com o NetBeans no OpenSUSE 11.2

Instalando o Ultra Servidor no Debian Lenny

NGINX Open Source com Balanceamento de Carga e Persistência de Sessão

Instalação e configuração do MON

Arch Linux com LVM e encriptação na raiz - Instalação

#1 Comentário enviado por bjaraujo em 05/05/2008 - 14:04h
parabéns, cara; acho que ainda tenho sequelas pela exposição ao BASIC. ahuahuaha
#2 Comentário enviado por stremer em 05/05/2008 - 19:03h
excelente. O dificil é mesmo conhecendo tudo isto conseguir implementar nos prazos malucos que os gerentes de TI e pessoal do marketing impõe (rs)
#3 Comentário enviado por rafastv em 05/05/2008 - 19:17h
De leitura agradável e rápida, parabéns!
#4 Comentário enviado por kabalido em 05/05/2008 - 21:53h
Parabéns cara! Continue assim, os seus artigos são muito bons.
Valeu!!
#5 Comentário enviado por EdDeAlmeida em 06/05/2008 - 08:51h
stremer,

Tem de fazer ouvido de mercador para os caras que ficam pressionando para acelerar o trabalho. Se você foge dos esquemas bem definidos, acaba perdendo mais tempo no final.

Abraço e oobrigado a todos!
#6 Comentário enviado por douglascrp em 06/05/2008 - 09:04h
excelente artigo... assim como o primeiro artigo, depois que se começa a ler, é impossível parar até terminar...

parabéns
#7 Comentário enviado por leowalker em 06/05/2008 - 15:18h
muito bom, estou esperando o proximo para dar continuidade...

Abraço e parabens.
#8 Comentário enviado por vodooo em 07/05/2008 - 09:57h
Cara, parabéns, realmente de leitura muito agradável!

Abraços
#9 Comentário enviado por EdDeAlmeida em 07/05/2008 - 19:12h
O próximo artigo já está no forno... deve estar pronto para ser postado no início da semana que vem. Aí é só esperar a fila andar. Mais uma vez obrigado pelos comentários e pelo apoio de todos.
#10 Comentário enviado por rl27 em 09/05/2008 - 11:14h
Parabéns pela série de artigos. Muito boa mesmo!

Estou ansioso pela continuação. Com certeza ainda darei minhas contribuições à comunidade.

Valeu!
#11 Comentário enviado por joaomc em 09/05/2008 - 13:53h
O princípio da caixa preta é bonito na teoria, mas na prática a coisa não é bem assim. Muitas vezes você *precisa* saber o que há por trás daquele método que está chamando, para, por exemplo, saber os efeitos colaterais, se o método é thread-safe, etc.

Mas estou só sendo chato, o artigo ficou bom, parabéns :)
#12 Comentário enviado por EdDeAlmeida em 09/05/2008 - 19:43h
joaomc,

Concordo em parte. Mas saber se um método é thread-safe não viola necessariamente o princípio da caixa-preta. O que viola é escrever código que dependa do algoritmo usado por essa ou aquela função. Isso é uma violação grave, que cria dependência. A questão de ser ou não thread-safe é mais relacionada com o conhecimento dos requisitos do módulo. Vamos discutir isso quando formos falar em análise de requisitos.


rl27,

Obrigado pelo comentário. E tenho certeza que em breve estarei também lendo seus artigos aqui. Basta estudar e estar com a mente aberta para aprender.


Ed
#13 Comentário enviado por marcio_paim em 14/02/2012 - 22:14h
Excelente série de artigos.

Contribuir com comentário

Entre na sua conta para comentar.