Temos um conjunto de modelos descrevendo o software. Agora é hora de colocar a mão na massa… ou melhor, no código!
Continuando a série A saga do herói… Ou melhor, do software!, hoje vamos falar sobre implementação, a quarta atividade do desenvolvimento de software. Passamos por uma série de etapas que nos permitiram compreender as necessidades do usuário e refletir sobre o que o software deve fazer e como isso será feito. Mas só agora, durante a implementação, é que todo o material produzido se concretiza na forma de um software. É nesse momento que o desenvolvedor “traduz” os modelos gerados para algo que pode ser compreendido e executado pelo computador.
O primeiro ponto a ser discutido são os algoritmos. Eles são uma sequência finita de instruções bem definidas e não ambíguas, em que cada instrução deve ser executada mecânica ou eletronicamente em um intervalo de tempo finito e com uma quantidade de esforço finita. Ou seja, um algoritmo nada mais é do que uma sequência de passos necessários para realizar uma tarefa.
Para ilustrar, pense na seguinte situação: alguém te pergunta como seguir de carro até a padaria mais próxima do seu trabalho. Sua reação seria responder algo como:
- Siga reto até chegar na rua A
- Quando chegar na rua A, vire à direita
- Se o sinal estiver aberto, siga reto. Se estiver fechado, vire à esquerda
- Se você seguiu reto, vire à esquerda na segunda rua
- Se você seguiu à esquerda, vire à direita na terceira rua
- Siga reto e você chega na padaria.
E, somente com essa fala, você acabou de detalhar um algoritmo! Fácil de entender, né? Os softwares fazem isso o tempo todo, só que de forma muito mais rápida do que a gente consegue acompanhar.
Pelo exemplo, é possível perceber que, além de determinarem uma sequência de instruções, os algoritmos também possibilitam a repetição de passos (como em “Siga reto até chegar na rua A” – você não pode parar de andar até chegar lá!) e necessidade de decisões (como em “Se o sinal estiver aberto, siga reto. Caso contrário, vire à esquerda”).
Mas vocês podem estar se perguntando: Se a coisa é tão simples, por que a gente não foi direto para a implementação? Por que gastamos tanto tempo com coisas não divertidas?
Minha resposta é que existem diferentes maneiras de realizar a mesma tarefa. “Gastar” um tempo refletindo sobre o software faz com que você chegue a um conjunto diferenciado de instruções que levam a menos tempo, espaço ou esforço do que outros.
Outro exemplo para ilustrar isso. Qual dos dois algoritmos seria mais interessante de ser seguido se precisássemos ensinar uma criança a se vestir?
Alternativa 1 | Alternativa 2 |
|
|
Não sei vocês, mas eu ficaria com a segunda alternativa, apesar de ambas levarem ao mesmo resultado!
Além disso, no nosso exemplo de dirigir até a padaria, o que aconteceria se quem te perguntou visse que o sinal está azul? Você consegue achar alguma indicação no algoritmo sobre como agir numa situação dessas? Se estivéssemos utilizando um software, poderíamos receber um erro na tela ou até mesmo o software poderia fechar sem que o usuário solicitasse isso. Soa familiar? Esses problemas indicam que não foram previstas todas as situações possíveis de uso. Daí a importância de uma reflexão minuciosa sobre o software antes de sua construção.
Bem, os algoritmos são a base para a construção do software, mas sua representação através de descrição narrativa ou do que chamamos de pseudocódigo não pode ser compreendida pelos computadores.
Já as linguagens de programação são usadas para expressar algoritmos com precisão. É um método padronizado para comunicar instruções de forma que o computador consiga compreendê-las. Como qualquer linguagem, elas possuem regras léxicas (símbolos), sintáticas (forma) e semânticas (significado), que são aplicadas na escrita de um software. Isso permite que se especifique precisamente sobre quais dados ele vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias.
E não existem poucas linguagens de programação! A Wikipedia apresenta um pequeno (grande) catálogo delas (acho que não conheço detalhes de 10% dessas linguagens, e vocês?). Essas linguagens de programação possuem regras e propósitos distintos, não havendo uma linguagem melhor ou pior que outras, apenas mais ou menos adequadas para determinadas situações.
Além das linguagens de programação, o desenvolvedor também precisa conhecer e considerar quais são os dados necessários e como serão manipulados pelo software. Também precisa conhecer e considerar o ambiente (infraestrutura) que receberá esse software. Tudo isso permite que o resultado da atividade de implementação (software) seja entregue para os usuários. Através desse software os usuários poderão realizar suas atividades e ter as necessidades que expressaram durante o levantamento de requisitos atendidas… ou não. Discussões sobre isso nos próximos textos ?