Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ndice
2
O que Jess
Recursos Aplicaes do Jess Formas de utilizao A Linguagem Jess Simbologia em Jess Controle de Fluxo Trabalhando com Funes
diegocharles.basilio@yahoo.com.br
O que Jess
3
diegocharles.basilio@yahoo.com.br
O que Jess
4
Recursos: Plataforma de Edio Java 2 Pacote Jess Java Virtual Machine com HotSpot
Mensagem de inicializao do prompt: Jess, the Expert System Shell Copyright 2003 E.J. Friedman Hill and the Sandia Corporation Jess Version 6.1 4/9/2003 Jess>
diegocharles.basilio@yahoo.com.br
Recursos
5
Utilizando o Jess em um Pentium III 800MHz possvel: Processar 80,000 regras por segundo 600,000 operaes matemticas Trabalhar mais de 100,00 fatos na memria de trabalho Executar um lao com 400,000 iteraes por segundo
diegocharles.basilio@yahoo.com.br
Aplicaes
6
Jess tem sido usado em grande escala no desenvolvimento de softwares comerciais, incluindo:
Sistemas Especialistas que avaliam requisies de
segurana e aplicaes financeiras; Agente que predizem preos de produtos em estoque, compra e venda com segurana; Deteco de invaso em networks e auditoria de segurana; Switches em pequenas redes de telecomunicao Servidores que executam regras de negcios Sites de comrcio eletrnico inteligente Jogos
diegocharles.basilio@yahoo.com.br
Aplicaes
7
Formas de utilizao:
Podemos usar Jess como um motor de regras. Um programa baseado em regras pode conter centenas ou milhares de regras, e Jess ir continuamente aplic-las aos seus dados, constituindo um sistema especialista.
Jess comumente utilizado como script dinmico ou como ambiente para desenvolvimento rpido de aplicaes. Jess possibilita a interpretao e execuo de cdigo Java sem a necessidade de compilao. Jess pode ser utilizado como em linha de comando, aplicaes GUI servlets e applets ou embarcado sob controle de cdigo Java.
diegocharles.basilio@yahoo.com.br
A linguagem Jess
8
Suporte
Caractersticas
Simblica Formulrio Livre
diegocharles.basilio@yahoo.com.br
A linguagem Jess
9
Variveis:
?a ?all-values ?counter
Comuns
Jess> (bind ?x O valor O valor
Globais
Jess> (defglobal ?*x* = 3) TRUE
Visualizao
diegocharles.basilio@yahoo.com.br
Jess> ?a 4
A linguagem Jess
10
Acessando o valor
Jess> ( printout t (nth$ 2 ?lista-mantimentos) (pao)
A linguagem Jess
11
Controle de Fluxo
apply Chama uma funo dados os argumentos
verdadeira
diegocharles.basilio@yahoo.com.br
A linguagem Jess
12
Foreach
Jess> (bind ?lista-mantimentos (creat$ ovos leite pao)) (ovos leite pao) Jess> (foreach ?e ?lista-mantimentos (printout t ?e crlf))
while
Jess> (bind ?i 1) 1 Jess> (bind ?sum 0) 0 Jess> (while (<= ?i 10) do (bind ?sum (+ ?sum ?i)) (bind ?i (+ ?i 1)))
diegocharles.basilio@yahoo.com.br
FALSE
A linguagem Jess
13
If/then/else
Jess> (bind ?lista-mantimentos (create$ ovos leite pao)) (ovos leite pao) Jess>(if (member$ ovos ?lista-mantimentos) then (printout t Preciso comprar ovos. crlf) else (printout t Ovos no, obrigado! crlf))
diegocharles.basilio@yahoo.com.br
A linguagem Jess
14
Progn
Jess> (bind ?n 2) 2 Jess> (while (progn (bind ?n (*?n ?n) (< 1000)) do (printout t ?n crlf))
4 16 256 FALSE
diegocharles.basilio@yahoo.com.br
A linguagem Jess
15
Apply
Jess> (apply (read) 1 2 3) +
Eval
Jess> (bind ?x (+ 1 2 3)) (+ 1 2 3) Jess> (eval ?x)
Build
Usada para montar regras!
diegocharles.basilio@yahoo.com.br
A linguagem Jess
16
Definindo funes
Jess>(deffunction distancia (?x1 ?y1 ?z1 ?x2 ?y2 ?z2) Calcula a distancia entre dois pontos no espaco (bind ?x(- ?x1 ?x2)) (bind ?y(- ?y1 ?y2)) (bind ?x(- ?z1 ?z2)) (bind ?distancia(sqrt (+ (* ?x ?x) (* ?y ?y) (* ?z ?z)))) (return ?distancia))
TRUE
Chamando
Jess> (distancia 10 0 0 2 0 0)
diegocharles.basilio@yahoo.com.br
A linguagem Jess
17
TRUE
O mesmo que:
Jess> (deffunctions prox (?a ?b) (if (< ?a ?b) then ?a else ?b))
TRUE
diegocharles.basilio@yahoo.com.br
A linguagem Jess
18
Antes
diegocharles.basilio@yahoo.com.br
A linguagem Jess
19
TRUE feijao
diegocharles.basilio@yahoo.com.br
Criando objetos Java Tipos de dados Chamando mtodos Java Colees Overloaded Data members Excees
diegocharles.basilio@yahoo.com.br
A partir do cdigo Java, voc pode acessar todas as partes da biblioteca Jess, de modo que seja muito fcil encaixar Jess em qualquer aplicao Java, servlet, applet, ou outro sistema.
Do mesmo modo, a partir da linguagem Jess, todo o poder de Java est diretamente disponvel.
diegocharles.basilio@yahoo.com.br
Atravs da funo new do Jess podemos criar instncias para as classes Java
Atravs da instncia podemos criar um objeto de uma classe e armazen-lo em uma varivel Jess. Ex. Criar um hashMap
Jess> (bind ?precos (new java.util.HashMap)) <External-Address: java.util.HashMap>
diegocharles.basilio@yahoo.com.br
diegocharles.basilio@yahoo.com.br
RU.LONG
RU.LIST
Um array Java
diegocharles.basilio@yahoo.com.br
24
Tipo Jess
25
varivel Jess podemos invocar qualquer mtodo deste objeto utilizando a funo call.
Jess> Jess> Jess> Jess> 1.99 (call (call (call (call ?precos ?precos ?precos ?prices put put put get pao 0.99) ervilhas 1.99) feijao 1.79) ervilhas)
segundo argumento o nome do mtodo a ser invocado. O restante so parmetros passados para o mtodo Java.
diegocharles.basilio@yahoo.com.br
O mesmo que:
Jess> (?precos put pao 0.99)
Quando o primeiro elemento de uma chamada de funo um objeto Java, Jess admite que deve incluir o smbolo call e invocar a funo no objeto.
diegocharles.basilio@yahoo.com.br
diegocharles.basilio@yahoo.com.br
Mtodos statics ou class no cdigo Java so aqueles mtodos que podem ser chamados sem referncia a um objeto especfico. Em Java como no cdigo Jess, voc pode usar apenas o nome da classe Java para invocar algum dos mtodos estticos. Ex. mtodo java.lang.thread.Sleep
diegocharles.basilio@yahoo.com.br
Eles so frequentemente chamados acessores e modificadores, ou getters e setters. Eles so muito comuns em Java e formam uma importante parte da especificao JavaBeans. Jess inclui as funes set e get, que podem ser usadas como alternativa para call, para aplicar e adquirir.
diegocharles.basilio@yahoo.com.br
equivalentes:
Jess> (bind ?b (new javax.swing.JButton)) <External-Address: javax.swing.JButton> Jess> (?b setText Pressione me)
ou
Jess> (set ?b text Pressione me)
ou
Colees
32
Trabalhando com Array (vetores) Jess automaticamente converte vetores Java para plain lists ( valores do tipo RU.LIST)
Voc pode usar o mtodo toArray na
java.util.collection para extrair todas as chaves de um HashMap para uma lista Jess.
Jess> (bind ?lista-mantimentos ((?precos keySet)toArray)) (pao ervilhas feijao)
diegocharles.basilio@yahoo.com.br
Colees
33
Disponibilidades
Passar listas Jess para
Possibilidades
Criar funes em cdigo
arrays multidimensionais
diegocharles.basilio@yahoo.com.br
Colees
34
Ex. Passando uma plain list como argumento para um construtor JComboBox
Jess> (import javax.swing.JComboBox) Jess> (bind ?jcb (new JComboBox ?lista-mantimentos)) <External-Address: javax.swing.JComboBox>
?Lista-mantimentos
Jess Java
diegocharles.basilio@yahoo.com.br
JComboBox
?jcb
RU.EXTERNAL-ADDRESS
Overloaded
35
Mtodos Sobrecarregados Jess menos restrito sobre tipos de dados do que Java Ex. Em Java, voc no pode armazenar um float em um HashMap, mas em Jess pode, pois este automaticamente convertido em um tipo java.lang.Double
diegocharles.basilio@yahoo.com.br
Overloaded
36
Mtodos Sobrecarregados Problema! Quando voc necessita chamar um conjunto de mtodos Java sobrecarregados.
Mtodo sobrecarregado: mltiplos mtodos com o mesmo nome e diferente lista de argumentos disponveis no mesmo objeto Ex.
void println() void println(boolean x) void println(char x) void println(char[] x) void println(double x) void println(float x) void println(int x) void println(long x) void println(Object x) void println(String x)
diegocharles.basilio@yahoo.com.br
Overloaded
37
Mtodos Sobrecarregados Escolha do mtodo: Jess no procura por uma melhor combinao - este usa o primeiro mtodo disponvel que combina com a lista de argumentos passada.
No importa qual mtodo seja utilizado, pois um conjunto de mtodos sobrecarregados geralmente fazem a mesma coisa.
diegocharles.basilio@yahoo.com.br
Overloaded
38
Mtodos Sobrecarregados Problema! Algumas vezes, entretanto, voc pode querer chamar um especfico mtodo sobrecarregado e circunstncias podem conspirar para tornar isto impossvel.
Como no sabemos qual overload Jess ir escolher,
podemos criar e passar um objeto de uma classe especfica assim Jess o passar em um tipo definido.
diegocharles.basilio@yahoo.com.br
Overloaded
39
Mtodos Sobrecarregados Ex. Passar a string TRUE para um mtodo sobrecarregado qualquer como boolean ou String. Soluo: Criar e passar um objeto java.lang.Boolean Jess ir converter java.lang.Boolean para boolean e no String.
As vezes chamando mtodos Java no o bastante, talvez seja necessrio trabalhar diretamente com uma varivel membro do objeto ou uma varivel membro de classes estticas.
diegocharles.basilio@yahoo.com.br
Data Members
40
Objetos
System.out
NORTH (java.awt.BorderLayout)
diegocharles.basilio@yahoo.com.br
Data Members
41
Acessando dados membros em Java Variveis de instncia: membros de uma classe que pertencem a um nico objeto, cada objeto possui uma cpia deste tipo de varivel.
Jess pode alcanar instncias de variveis pblicas usando as funes get-member e set-member.
diegocharles.basilio@yahoo.com.br
Data Members
42
Acessando data members em Java A classe java.awt.Point possui duas variveis membro x e y pblicas , neste exemplo, um objeto Point alocado, e seus membros x e y so ajustados e em seguida lidos:
Jess> (bind ?pt (new java.awt.Point)) <Endereco externo:java.awt.Point> Jess> (set-member ?pt x 37) 37 Jess> (set-member ?pt y 42) 42 Jess> (get-member ?pt x) 37
diegocharles.basilio@yahoo.com.br
Data Members
43
Acessando dados membros em Java As variveis da classe tambm so acessveis atravs de get-member e set-member:
Ex.
Jess> (get-member System out) <External-Address:java.io.PrintStream> Jess> (get-member java.awt.BorderLayout NORTH) "North"
Ao invs do objeto especificamos o nome da classe como primeiro argumento das funes.
diegocharles.basilio@yahoo.com.br
Data Members
44
Acessando data members em Java Quando se est trabalhando com objetos em Java, os mtodos geralmente retornam um valor ao seu chamador, no entanto, as vezes, estes mtodos no retornam e acabam de preferncia - lanando excees.
diegocharles.basilio@yahoo.com.br
Excees
45
Trabalhando com excees Uma exceo apenas um objeto em Java, que pretende ser tratado como uma mensagem do cdigo falhado ao cdigo chamador Quando um construtor ou um mtodo em Java joga uma exceo, Jess recebe ou trava a mensagem e a torna disponvel para voc sempre que voc chama um mtodo que possa jogar uma exceo, voc deve fornecer um handler para executar em resposta exceo no lugar do handler padro do Jess.
diegocharles.basilio@yahoo.com.br
Excees
46
diegocharles.basilio@yahoo.com.br
Excees
47
Trabalhando com excees A funo do try avaliar as expresses no primeiro bloco, uma de cada vez. Se pelo menos uma das expresses lanar uma exceo, esse bloco abandonado, e o try comea a avaliar as expresses que seguem o smbolo catch, se aparecer. Voc pode tambm ter o bloco finally seguindo o bloco cacth.
diegocharles.basilio@yahoo.com.br
Excees
48
Excees
49
usando a varivel especial ?ERROR, que sempre definida por voc em um bloco catch e inicializada por Jess no ponto que a exceo for travada Em Jess podemos ter somente um bloco catch em uma try, no entanto podemos utilizar a varivel ?ERROR junto com a funo instanceof para obter uma distino entre excees.
diegocharles.basilio@yahoo.com.br
Excees
50
Trabalhando com excees Ex. Utilizando a funo lookup da classe java.rmi.Naming para conectar objetos remotos via protocolo RMI podem ocorrer as seguintes excees:
NotBoundException RemoteException AccessException
possvel emitir mensagens de erro especficas para cada uma das excees.
diegocharles.basilio@yahoo.com.br
Jess> (import java.rmi.*) TRUE Jess> (import java.net.MalformedURLException) TRUE Jess> (try (bind ?server (call Naming lookup "rmi://snarf.blat.com/Survice")) (printout t Conecao Estabelecida." crlf) catch (if (instanceof ?ERROR NotBoundException) then (printout t Servio nao Disponivel" crlf) else (if (instanceof ?ERROR MalformedURLException) then (printout t Endereo Desconhecido" crlf) else (if (instanceof ?ERROR AccessException) then (printout t Acesso Negado" crlf) else (if (instanceof ?ERROR RemoteException) then (printout t Problemas na Rede" crlf) else (printout t Erro Desconhecido" crlf)))))) Servio nao Disponivel.
diegocharles.basilio@yahoo.com.br
Excees
52
Trabalhando com excees A funo throw em Jess permite jogar excees Java a partir do cdigo Jess. Funciona como a palavra-chave throw em Java: O nico argumento deve ser uma instncia de uma classe Java que estenda de java.lang.Throwable.
diegocharles.basilio@yahoo.com.br
Excees
53
diegocharles.basilio@yahoo.com.br
54
Dvidas?
diegocharles.basilio@yahoo.com.br
Referncias
55
diegocharles.basilio@yahoo.com.br
Obrigado