Tutoriais e Programação
AoA - Cap.2 - Programação e equações booleanas
Sex 23 Fev 2007 11:06 |
- Detalhes
- Categoria: Art of Assembly
- Atualização: Domingo, 19 Abril 2009 20:24
- Autor: vovó Vicki
- Acessos: 8959
O que é que as equações booleanas têm a ver com programação?
Se tivermos registradores, contadores e registradores de deslocamento, podemos construir máquinas de estado. A implementação de um algoritmo no hardware utilizando máquinas de estado está fora do escopo deste texto contudo, um ponto importante referente a este sistema eletrônico precisa ser destacado - qualquer algoritmo que possa ser implementado em software também pode ser implementado diretamente em hardware. Isto sugere que a lógica booleana é a base da computação em todos os sistemas modernos de computadores e que podemos classificar qualquer programa como uma sequência de equações booleanas.
É claro que é muito mais difícil elaborar uma solução para um problema de programação utilizando equações booleanas do que usando linguagens como C, Pascal ou até mesmo a linguagem Assembly. Exatamente por este motivo não é razoável implementar um programa inteiro utilizando um conjunto de máquinas de estado e outros sistemas de circuitos eletrônicos. Todavia, há ocasiões em que a implementação em hardware é melhor, isto porque uma solução em hardware pode ser muitíssimo mais rápida do que uma solução equivalente em software. É por isto que, em algumas situações, operações de tempo crítico requerem uma solução em hardware.
Um fato ainda mais interessante é que o oposto da afirmação acima também é verdade. Podemos não só implementar todas as funções de software em hardware, como também podemos implementar todas as funções de hardware em software. Esta é uma revelação importante porque muitas operações que normalmente seriam implementadas em hardware são muito mais baratas de implementar utilizando software num microprocessador. Na realidade, este é o uso primário da linguagem Assembly nos sistemas modernos - para substituir, a custo zero, um circuito eletrônico complexo. Frequentemente é possível fazer muita economia substituindo componentes eletrônicos caríssimos por um simples chip microcomputador muito barato. Sistemas embutidos são sistemas de computador embutidos em outros produtos. Por exemplo, muitos fornos microondas, aparelhos de TV, video games, CD players e outros dispositivos de consumo contém um ou mais sistemas completos cujo único propósito é o de substituir um projeto de hardware complexo. Engenheiros utilizam computadores com este propósito porque são mais baratos e mais fáceis de desenvolver do que sistemas eletrônicos tradicionais.
Você pode facilmente desenvolver software que leia interruptores (variáveis de entrada) e que ligue motores, LEDs ou luzes, trave ou destrave portas, etc. (funções de saída). Para escrever tal software, é preciso entender de funções booleanas e de como implementar tais funções em software.
É claro que há outras razões para estudar funções booleanas, mesmo se você nunca pretender escrever software para sistemas embutidos ou escrever software que manipule dispositivos do mundo real. Muitas linguagens de alto nível processam expressões da álgebra booleana (por exemplo, aquelas expressões que controlam uma declaração if ou um laço while). Geralmente é possível melhorar a performance de um código numa linguagem de alto nível aplicando transformações como os teoremas de DeMorgan ou fazendo uma otimização por mapeamento. Portanto, estudar funções booleanas é importante, mesmo que você nunca pretenda desenvolver um circuito eletrônico. Elas podem ajudar a escrever um código melhor nas linguagens de programação tradicionais.
Por exemplo, suponha que você tenha a seguinte expressão em Pascal:
if ((x=y) and (a <> b)) or ((x=y) and (c <= d)) then AlgumaInstr;
Você pode utilizar a lei distributiva para simplificar a expressão:
if ((x=y) and ((a <> b) or (c <= d)) then AlgumaInstr;
Da mesma forma, podemos utilizar o teorema de DeMorgan para reduzir:
while (not((a=b) and (c=d)) do AlgumaCoisa;
para
while (a <> b) or (c <> d) do AlgumaCoisa;
Fonte
- Art of Assembly de Randall Hyde.
- Tradução meio que livre da vovó Vicki.