Para aprender a programar é importante que os alunos entendam o conceito de restrição. Segundo dicionário, uma restrição é um ato ou efeito de restringir. Restringir por sua vez  é determinar estritamente as condições; é limitar. Em programação sempre lidamos com restrições, com limites que o programa deve obedecer. Esses limites podem ser dar por conta da estrutura física do hardware que executará o programa, por limitações do software (por exemplo, o programa deverá funcionar somente em dispositivos móveis com sistema operacional iOS, para Iphone). A restrição também pode ocorrer pelo problema que se deseja resolver. Por exemplo, em um programa para digitar as notas de provas dos alunos e calcular a sua média, o programa deve receber somente duas notas, não mais que isso. Em acréscimo, as notas devem ser digitadas dentro de um limite de valor que vai de 0 a 10, com apenas um digito decimal. Essas e outras restrições envolvem o desenvolvimento da lógica de programação para implementação do programa.

Segundo Spraul (2012) é muito importante que se desenvolva em conjunto a isso a habilidade da analogia. Uma solução que deu certo para um problema X pode ser usada para o problema Y. É comum os alunos trabalharem com problemas clássicos, ou quebra-cabeças para entenderem a lógica para resolução de problemas com o uso de restrições. Vamos ver um exemplo disso:

Exemplo do lobo, ovelha e repolho.

Este problema aparece com outros personagens também como a raposa, galinha e o saco de milho. O problema consiste na situação em que um homem precisa cruzar um rio com um pequeno barco e levar o lobo, a ovelha e o repolho para a outra margem. A restrição neste caso ocorre pelo fato de que o barco só acomoda o homem e mais um passageiro, além de que não pode deixar o lobo sozinho com a ovelha e esta sozinha com o repolho. Caso leve primeiro o repolho, deixando o lobo com a ovelha, o primeiro irá devorar o indefeso animal. Caso leve primeiro o lobo, a ovelha comerá o repolho. Isso ocorre também se os deixar na mesma situação na outra margem. Como resolver este problema?

Neste caso, o homem deve levar primeiro a ovelha e voltar para buscar o repolho. Ao deixar o repolho na outra margem, deve trazer de volta a ovelha para a margem inicial. Em seguida pegar o lobo e levá-lo para a outra margem deixando o lobo e o repolho. Assim ele pode voltar sozinho e buscar então a ovelha. Parece uma solução simples, mas que leva muitas vezes o aluno a entender o conceito da restrição. Para conhecer esse problema, há um jogo no site Racha Cuca, que o apresenta: https://rachacuca.com.br/jogos/o-lobo-e-a-ovelha/

Exemplo dos missionários e canibais

Outro exemplo com o uso de restrições são dos missionários e canibais. Da mesma forma que o problema anterior, é necessário levar três missionários e três canibais até a outra margem do rio. A restrição aqui é que não se deve deixar em nenhuma das margens um número de missionários menor que o número de canibais, pois estes irão devorar assim os missionários. Para resolver este problema acesse o site do Racha Cuca para ter acesso ao jogo: https://rachacuca.com.br/jogos/missionarios-e-canibais/

Vamos tentar resolver?

Bibliografia:

FERRIRA, AURELIO B. H. Dicionário da língua portuguesa.  8. Ed. Curitiba. Positivo. 2010.

SPRAUL. V. Anton. Think Like a Programmer. No Starch Press. 2012.