sexta-feira, 19 de novembro de 2010

Modelagem de Problema X Modelagem de Software

"Modelagem de problema computável" é o mesmo que "modelagem de software"?

Todos os problemas são solúveis por algoritmos? Sabemos que não. Nas disciplinas de algoritmos trabalhamos somente com "problemas computáveis", ou seja, problemas solúveis por dispositivos computacionais. Sinônimos de problema computável: problema solúvel, problema decidível, problema tratável e problema algorítimico.

No contexto da computação podemos encontrar dois tipos de modelagem que as vezes se confundem: "modelagem de programa (software)" e "modelagem de problema (computável)".

(1) Modelagem de Software. Sabemos que quando um software é desenvolvido é porque se pretende resolver um problema também. Neste caso utiliza-se a modelagem para compreender o problema, organizar as informações, estruturar o desenvolvimento, etc. Uma forma comum de modelagem de programas procedurais (não orientados a objeto) é através de fluxogramas, enquanto que a modelagem de programas orientados a objeto normalmente usam UML. Notem que também podemos utilizar este recurso para desenvolver ou compreender um algoritmo, principalmente fluxograma. Neste contexto de modelagem de sistemas também encontramos: DFD (Diagrama de Fluxos de Dados), DER (Diagrama Entidade-Relacionamento), organograma, diagrama de blocos, etc.

(2) Modelagem de Problema Computável. No contexto de desenvolvimento de algoritmo, modelar um problema signfica encontrar um modelo formal que "substitui" o problema do mundo real para ser "introduzido" na máquina (computador). Neste caso, uma fez que temos o modelo o passo seguinte é necessário encontrar um ALGORITMO para resolver o modelo. Exemplo de modelos formais: programação matemática, grafos e equações matemáticas. Este tipo de modelagem também tem sido chamado de Modelagem Computacional (http://pt.wikipedia.org/wiki/Modelagem_computacional)

Em (1) o modelo auxilia a compreender o problema real enquanto que em (2) o modelo substitui o problema real. No caso (1) o modelo irá auxíliar o programador na implementação, ou seja, é para ser utilizado por "ser humano", já no caso (2) o modelo é para ser utilizado pela máquina (computador), ou seja, o computador irá utilizar o algoritmo para solucionar o modelo. Em (1) o modelo é para humano, mas em (2) é para máquina.

Sabemos que existem ferramentas que o programador pode fazer a modelagem gráfica a partir do qual o código é gerado automaticamente em alguma linguagem. Mas isso é só para facilitar a vida do programador (humano), logo entra no caso (1) acima.

quinta-feira, 28 de outubro de 2010

Receita de bolo é um algoritmo?

Quantas vezes você já ouviu falar que "uma receita de bolo" é um algoritmo?

Um algoritmo pode ser definido como uma sequência finita e não ambígua de instruções (computáveis) para solucionar um problema.

A NÃO ambiguidade implica dizer que cada instrução do algoritmo deve ser precisamente definida, sem permitir mais de uma interpretação de seu significado. Neste caso, algoritmos devem se basear no uso de um conjunto de instruções bem definido, que constituem um vocabulário de símbolos LIMITADO.

Pseudo-Algoritmos são aproximações de algoritmos, onde existe um grau de ambiguidade não nulo em sua definição. Na realização de tarefas cotidianas usamos implicitamente vários pseudo-algoritmos. Utilizamos um vocabulário de termos aberto para descrever os pseudo-algoritmos. Por isto eles não são algoritmos de fato, devido ao elevado grau de ambiguidade na forma aberta com que são definidos. Para fazê-los de forma precisa e não ambígua seria necessário definir toda a mecânica contida em cada uma das ações corriqueiras como fritar ovos, andar, falar, cozinhar, apertar um botão, etc. Isto tornaria a construção de algoritmos cotidianos extremamente extensa e provavelmente inútil, pois quando dispostos a cooperar, realizamos tais ações complexas (andar, falar, etc.) de forma automática, devido à nossa elevada capacidade e plasticidade cognitiva.

Logo, um algoritmo deve ser constituído de operações computáveis, ou seja, de operações que podem escritas em alguma linguagem de programação. Portanto, uma "receita de bolo" não pode ser considerada um algoritmo.

Eventualmente, usamos o termo algoritmo para designar conjuntamente os algoritmos "computáveis" e os pseudo-algoritmos, deixando implícito que atividades realizadas por humanos são de fato pseudo-algorítmos.

É comum professores utilizarem o exemplo de receita de bolo para introduzir o conceito de algoritmo. Mas uma vez que o aluno já tenha associado o conceito formal de algoritmo computacional, acredito que a associação com "receita de bolo" deva ser eliminada.

Quem sou eu

Minha foto
Professor Titular do Departamento de Informática da Universidade Estadual de Maringá - Paraná, foi pesquisador visitante na University of Nottingham, UK. Bolsista produtividade em desenvolvimento tecnológico e inovação pelo CNPq (órgão federal). Membro do conselho técnico do Núcleo de Inovação Tecnológica da UEM.