Análise do problema e algoritmo de solução
Todo aplicativo se destina a automatizar um processo que poderia ser executado manualmente, ou a resolver algum problema que se poderia resolver com raciocínio lógico - mesmo que isso fosse levar muito tempo. Acreditamos que isso é verdadeiro em qualquer âmbito.
Entendemos por ‘processo’ ou ‘problema’ qualquer situação que se apresente para o programador ‘automatizar’. Programar é resolver o problema proposto etapa por etapa e codificar cada passo, até a solução. Ou seja, um programa é uma referência a um problema previamente resolvido. O que chamamos de algoritmo é simplesmente a sequência lógica de ações que levam ao resultado esperado (a solução do problema). Naturalmente, é necessária uma análise detalhada do problema, sem a qual não há a menor possibilidade de se desenvolver um algoritmo funcional.
Por exemplo, vamos supor que queremos que determinada página em nosso site seja acessada apenas por usuários com login e senha cadastrados no banco de dados. Para analisar este ‘problema’ vamos transportar a situação para o âmbito humano e pensar no site como uma casa, um local de diversão aberto ao público. Vamos imaginar que nessa casa há uma sala muito especial onde só entram certas pessoas selecionadas, cujos nomes estão em uma lista de convidados. Na lista, para cada convidado ainda há uma senha secreta que o mesmo tem que saber, senão não entra.
Ficou mais fácil, não? Se alguém pedisse que você ficasse na porta e controlasse a entrada dos convidados, aposto que não haveria problemas, você saberia o que fazer…
Veja este diálogo:
- Boa noite, sou convidado.
- Nome, por favor…
- Alberto.
- Deixe-me ver… ah sim! Alberto está na lista. Qual é a sua senha?
- Hum, ‘gato preto’.
- Senhor, infelizmente a senha cadastrada não é ‘gato preto’. Quer tentar novamente?
- Bem, foi minha mulher que fez esse cadastro… tente ‘bolinha’.
- Perfeitamente, senhor. Pode entrar, a senha está correta.
Então o porteiro abre a porta.
O diálogo acima contêm tudo que precisamos para implementar o programa solicitado. Precisamos apenas transportar de volta a nossa abstração para o universo real do problema.
| Abstração humana | Universo real |
| o porteiro | o programa em si |
| o convidado | o usuário |
| a lista | o banco de dados |
| verificar o nome na lista | ver se há o login fornecido no banco |
| verificar a senha de alberto | ver se a senha correspende ao login |
| abrir a porta | mostrar a página |
Para organizar as etapas da solução em uma sequência lógica, vamos escrevê-la na forma de um pseudo-código.
Pseudo-código
Um pseudo-código é uma lista de ações, organizadas numa sequência lógica, para resolver determinado problema. É a formalização do algoritmo, o próprio programa escrito em linguagem humana. É extremamente útil, pois nos ajuda a identificar as possíveis falhas na lógica utilizada.
Existem algumas regras simples para tornar o seu pseudo-código mais inteligível:
- seja direto e objetivo
- use apenas um verbo por frase
- não use palavras de sentido ambíguo
- use frases curtas
O nosso algoritmo é simples e curto: começa quando o usuário clica no link que leva à nossa página protegida e termina quando o acesso é liberado ou negado. Existem algumas condições que ficaram implícitas no diálogo, mas temos que explicitá-las para o computador entender. São essas condições que determinarão se o acesso será permitido ou negado. Vamos ver o exemplo acima escrito dessa forma:
- Pedir login e senha
- Verificar se o par login/senha recebido corresponde a algum registro no banco
- Caso negativo: voltar ao início (pedir login e senha)
- Caso positivo: mostrar a página
O pseudo-código acima descreve um sistema que testa o par login-senha como uma coisa única. Funcionaria perfeitamente, mas em caso de erro, o script não saberia se o erro foi do login, da senha ou de ambos, o que não seria muito elegante - e não corresponde ao diálogo de nosso educado porteiro com o convidado. Podemos então fazer dois testes separados e enviar ao usuário uma mensagem de erro personalizada para cada caso:
- Pedir login e senha
- Verificar se o login recebido corresponde a algum registro no banco
- Caso negativo: imprimir ‘login inexistente’ e voltar ao início
- Caso positivo: comparar a senha digitada com a senha do banco
- Caso negativo: imprimir ’senha incorreta’ e voltar ao início
- Caso positivo: mostrar a página
É exatamente isso que queremos que o script faça: enquanto o usuário não acertar o login e a senha, o sistema continua solicitando esses dados. Qualquer pessoa ao ler esse pseudo-código é capaz de entender o que ele faz e de que forma, pois a linguagem adotada é humana. Existe uma outra forma de representar o algorítmo com uma linguagem gráfica, os diagramas de blocos.
Diagramas de blocos
| Símbolo | Significado |
![]() |
início ou fim do programa |
![]() |
entrada de dados |
![]() |
condição |
![]() |
processamento |
![]() |
saída de dados |
Partindo da pressuposto de que um programa deve receber dados e processá-los de acordo com certas condições para então retornar o resultado, com os símbolos acima podemos representar qualquer algoritmo. Vamos então criar o diagrama para o exemplo acima (o primeiro):

Poderíamos também ter usado termos mais técnicos como os nomes das funções que pretendemos usar em cada etapa, mas essa não era a minha intenção, portanto ficaremos por aqui. O importante é perceber como funciona a lógica de construir uma funcionalidade em forma de algoritmo, pois mais adiante não precisaremos mais escrever o algoritmo antes de começar a programar, mas nunca deixaremos de fazê-lo em pensamento.
Esperamos ter ajudado…















O texto acima foi escrito há algum tempo para um curso de PHP que nunca aconteceu…
Finalmente ele teve um destino (espero…) útil.
Por Administrator em 2006-11-21 09:23:48, terça
Conteúdo excelente para iniciantes na área… Muito interessante e esclarecedor.
Encontrei pelo iEvolution Fóruns.
Abraços…
Por Rick em 2006-11-21 09:23:48, terça