Download
princ pios da programa o em prolog n.
Skip this Video
Loading SlideShow in 5 Seconds..
Princípios da Programação em Prolog PowerPoint Presentation
Download Presentation
Princípios da Programação em Prolog

Princípios da Programação em Prolog

93 Vues Download Presentation
Télécharger la présentation

Princípios da Programação em Prolog

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Princípios da Programação em Prolog • princípios gerais da programação Os critérios usualmente adoptados para avaliar a qualidade de um programa incluem a verificar as seguintes propriedades: • Correcção Um programa deve fazer o que é suposto fazer. • Eficiência Um programa deve minimizar o tempo de execução e o espaço em memória. • Legibilidade/Transparência Um programa deve ser legível e fácil de interpretar. • Robustez A introdução de dados incorrectos ou inesperados deve ser prevista pelo programa. A ocorrência destes erros deve ser notificada e não deve interromper a execução do programa. • Documentação Um programa deve estar devidamente documentado (o texto do programa e os comentários constituem a documentação mínima associada ao programa).

  2. Princípios da Programação em Prolog • A importância destes critérios depende do problema, das circunstâncias em que o programa é escrito e do contexto onde é suposto ser utilizado. No entanto, a correcção é, sem dúvida, o critério mais importante. • Como escrever programas que satisfaçam algumas (as mais importantes num determinado contexto) ou, preferencialmente, todas estas propriedades? • interpretar/raciocinar (linguagem de especificação) • codificar (linguagem de programação) • Devemos, primeiro, interpretar o problema, desenvolver e analisar (numa linguagem de especificação) soluções e, após ser definida a "melhor" solução, devemos passar à codificação (numa linguagem de programação).

  3. Princípios da Programação em PrologRefinamento gradual • refinamento gradual Para transformar (gradualmente) a especificação (e.g. na linguagem natural ou numa linguagem de especificação) de um problema num programa codificado numa linguagem de programação, é usual utilizar o Refinamento Gradual (Top-Down), i.e. um programa é obtido após uma sequência de transformações (ou refinamentos) – aplicadas tanto às definições dos procedimentos como às estruturas de dados  equivalentes que traduzem um aumento de detalhe no sentido da aproximação à linguagem de programação. • Vantagens • Permite a formulação de rascunhos de soluções em termos do que é mais relevante para a resolução do problema. • Cada solução é sucinta, simples e correcta. • Cada refinamento representa um pequeno passo na resolução do problema; o refinamento de uma solução correcta gera uma (nova) solução num nível mais detalhado, i.e. menos abstracto.

  4. metodologia de programação na P.L. • No caso da programação em lógica o refinamento incide sobre a definição das relações que constituem o programa. Se a natureza do problema sugere uma aproximação algorítmica, então deve ser aplicado um refinamento gradual algorítmico, adoptando a perspectiva procedimental do PROLOG. • O processo de desenvolvimento de uma solução para um problema consiste em decompor o problema em (sub) problemas mais simples (i.e. de menor complexidade). • Como encontrar os subproblemas mais adequados? • Recursividade Dividir o problema em casos pertencentes aos dois grupos seguintes: • trivial ou casos limite; • casos gerais onde a solução é construída a partir de versões mais simples do problema original.

  5. Uma razão pela qual a recursividade é aplicada à definição de relações no PROLOG tem a ver com a natureza da estrutura recursiva dos dados. • generalização • É conveniente generalizar o problema original, sendo assim, possível construir uma solução recursiva mais abrangente. Portanto, a solução para o problema original é um caso particular de um problema mais geral. • A generalização de uma relação tipicamente envolve um aumento do seu número de argumentos. Este processo é acompanhado de um aprofundamento do problema de forma a conseguir obter a generalização mais adequada.

  6. Representações Gráficas • Quando desenvolvemos uma solução para um problema é usual recorrer a representações gráficas para ajudar a identificar as relações essenciais entre os objectos. • Vantagens • O PROLOG é particularmente adequado para problemas que envolvam relações entre objectos. Os grafos, onde os nós representam os objectos e os arcos as relações entre os objectos, são particularmente apropriados para a representação dos problemas. • As estruturas de dados em PROLOG são representadas por árvores. • A natureza declarativa do PROLOG facilita a tradução da representação gráfica para o PROLOG.

  7. convenções estilísticas • Regras estilísticas • O corpo de uma cláusula de programa não deve ter muitos literais. • Os procedimentos não devem conter muitas cláusulas. • Os nomes utilizados para os procedimentos e variáveis devem indicar o significado das relações e a adequação das estruturas de dados. • Devem ser utilizados espaços, linhas em branco e indentação. As cláusulas que pertencem a um procedimento devem estar agrupadas: cada cláusula e cada literal do corpo da cláusula devem estar numa linha separada. Cada procedimento deve ser separado por uma linha em branco. • Os cortes e procedimento not devem ser utilizados com prudência. • A modificação do programa com os procedimentos pré-definidos assert e retract deve ser cautelosa. • A utilização do ponto e vírgula diminui a transparência do programa. A legibilidade, neste caso, é aumentada dividindo a cláusula. • Vantagens • Reduzir os erros de programação. • Produzir programas que sejam mais legíveis, fáceis de interpretar, testar e modificar.

  8. Comentários nos programas • Em geral a seguinte informação deve ser incluída nos comentários dos programas: • o que é que o programa faz (objectivo do programa), • como deve ser utilizado (e.g. qual o objectivo a ser introduzido para iniciar a execução do programa e os resultados esperados após a sua execução (possivelmente parcial)); • como estão representados os principais objectos; • o tempo de execução e a memória exigidos pelo programa; • quais as limitações do programa; • qual o significado de cada predicado; quais são os seus argumentos (identificando os de input e os de output);

  9. debugging • debugging- Implementação, nas linguagens de programação, de um conjunto de procedimentos que auxiliam o programador a detectar nos programas (ou em partes (módulos) dos programas) a ocorrência de erros, durante a execução dos programas. • Geralmente estes procedimentos acompanham o desenvolvimento da computação desde o seu início e permitem suspender a execução sempre que desejado (possivelmente para verificar, por exemplo, se os resultados da computação são diferentes dos esperados naquele ponto do programa). • Em consequência da adopção generalizada da técnica bottom-up para a construção de uma implementação para um programa, é natural que a técnica de debugging seja utilizada, primeiro, no teste de pequenas partes do programa e, depois, em partes gradualmente maiores (ou eventualmente no programa completo) tendo, previamente a garantia de que as partes mais pequenas estão isentas de erros.

  10. debugging em PROLOG • No PROLOG a técnica (designada por tracing) que suporta o debugging fornece a visualização gradual (passo a passo) do progresso (comportamento relacionado com a satisfação dos objectivos) do programa durante a sua execução. • Existem alguns procedimentos pré-definidos (depende da implementação do PROLOG) para o debugging tais como: • trace (notrace) Activa (Desactiva) a visualização do comportamento do programa para os objectivos que se seguem. • spy(P) (nospy(P)) Activa (Desactiva) a visualização do comportamento do predicado P para os objectivos que se seguem.

  11. optimização dos programas PROLOG • Para optimizar a eficiência (tempo/memória) da execução de um programa em PROLOG é necessário estudar os aspectos da sua interpretação procedimental (capítulo 3 (Interpretação Procedimental) dos Fundamentos da Programação em lógica). • Alguns aspectos da interpretação procedimental de um programa PROLOG estão directamente relacionados com formas de optimização, que são usualmente utilizadas no desenvolvimento dos programas, tais como: • alterar a ordem dos procedimentos no programa; • alterar a ordem das cláusulas nos procedimentos; • utilizar a técnica do corte; • adicionar ao programa, através das variantes do procedimento assert, resultados que, posteriormente, optimizam o programa para outros objectivos; • (optimização baseada na representação dos objectos) definir estruturas de dados mais adequadas para representar os objectos.