SWNE Uma Linguagem Baseada em Predicados Alex Abate Biral Número USP Orientador: Marco Dimas Gubitoso
Despacho Linguagens Orientadas a Objeto introduziram o Despacho Dinâmico sobre classe. Generalizações: Despacho Múltiplo, Classes Predicativas, Despacho por Padrões. Caso mais genérico: Despacho por Predicados.
Predicados Predicados dinâmicos são definidos por uma simples função booleana. Predicados estáticos são conjuntos de objetos. Predicados estáticos podem definir a estrutura de seus membros. Um predicado pode implicar em outros, ou ser mutualmente exclusivo. Isto cria uma ordenação parcial.
Objetos Todos os substantivos do sistema são objetos. Objetos “imutáveis” são valores, e podem ser representados de diversas maneiras. Objetos mutáveis são entidades, e possuem uma identidade constante.
Variáveis Quando uma variável é declarada, podemos limitála a uma lista de predicados. Isso permite que o compilador procure por erros de lógica em tempo de compilação. Também pode funcionar como asserts em tempo de execução (mas é lento). Como usamos clausuras, os predicados também podem representar assinaturas.
Dinâmica de Despacho Ordenamos os predicados de maneira a criar uma ordem total. A partir desta ordenação, ordenamos todas as assinaturas de uma função. A ordenação garante que uma assinatura mais específica é checada primeiro. Fora a isso, o sistema usa a ordem inversa de declaração.
Conclusões É possível montar uma linguagem onde o despacho por predicados é a mecânica principal. Não é necessáriamente bom reduzir uma mecânica a sua forma mais genérica, mas pode ser útil para criar um sistema mais expressivo. É possível melhorar o sistema de despacho, mas é necessário desenvolver bem o algoritmo.
Trabalhos Futuros Usar predicados para visualisar versões das funções. Desenvolver um sistema lógico similar a prolog para trabalhar com os algoritmos. Tornar a linguagem auto-referencial, permitindo que predicados e variáveis usem também o despacho por predicados.