SlideShare uma empresa Scribd logo
1 de 45
Drools Expert :
                                           Programação
                                           Orientada a Regras
                                                      Fábio Santos
                                                  Setembro de 2010




Fábrica de Software
Sistemas e aplicações sob medida para as
necessidades do seu negócio.
Agenda


 Introdução à Programação Orientada a Regras
 Quando aplicar?
 Drools Expert – Visão Geral
 Um exemplo de uso
Drools – Família de Produtos


  Drools Expert: Rules Engine


  Drools Fusion: Complex Event Processing


  Drools Flow: Workflow / Business Process


  Drools Guvnor: Centralised Knowledge Repository


  Drools Planner: Solves Planning Problems
Drools – Família de Produtos


  Drools Expert: Rules Engine


  Drools Fusion: Complex Event Processing


  Drools Flow: Workflow / Business Process


  Drools Guvnor: Centralised Knowledge Repository


  Drools Solver: Solves Planning Problems
Orientação a Regras


  Paradigma de Programação Estruturada
  O código-fonte determina o que deve ser feito, quando e como.
     Faça isso, depois faça aquilo...
Orientação a Regras


  Paradigma de Programação Orientada a Regras
  O código-fonte determina regras que dizem o que deve ser
    feito quando determinada condição for satisfeita.
     Faça isso quando aquilo ocorrer...
Orientação a Regras



Em determinado instante,   Quando
deseja-se executar um      Um conjunto
conjunto de regras         de condições
                           é satisfeito   Estado do
                                           Sistema




                                              Então
                                              Um conjunto
                                              de ações são
                                              realizadas
Orientação a Regras


  Orientação a Regras × Orientação a Eventos
  Orientação a Regras: As condições (o “quando”) são definidas
    de acordo com o estado do sistema.
  Orientação a Eventos: As condições são definidas por ações
    tomadas no sistema.
Orientação a Regras


  Nos casos de distinção mais difícil:
  Orientação a Regras: Pressupõe que um conjunto de ações
    precisam ser tomadas em um determinado instante e o atual
    estado do sistema será usado para descobrir quais ações
    devem ser realizadas.
  Orientação a Eventos: Pressupõe que a condição original
    independe da ação que será disparada em decorrência do
    evento disparado.
Orientação a Regras

  Como em todo paradigma diferente, é preciso mudar a
    abordagem
     Use a abordagem mais adequada para o problema em questão


  Uma abordagem não consegue resolver todos os problemas
   da forma mais organizada e legível possível
     O uso de regras pode tornar trivialmente legível
       a solução de problemas muito complexos,
       mas pode tornar praticamente ilegível
       a solução de um problema simples
Orientação a Regras


  Regras são determinísticas, ou seja, podem ser testadas
  A quebra de uma solução complexa em um conjunto de regras
    simples facilita a implementação de testes automatizados
  Provavelmente, seu sistema não será inteiramente
    implementado usando regras, mas o uso de regras pode ser
    relevante em determinados lugares
Quando Aplicar?


 Problemas Complexos
 O uso de regras possibilita a quebra de um problema complexo
   em um conjunto de regras simples e independentes que,
   quando aplicadas em conjunto, resolvem elegantemente o
   problema em questão
Quando Aplicar?


 Regras de Negócio Voláteis
 A separação entre dados e lógica é muito bem determinada (os
   dados são os seus objetos de domínio, a lógica são as regras)
 As regras podem ser facilmente alteradas sem a alteração da
   estrutura de dados
 As regras podem ser alteradas dinamicamente (por um
   exemplo: um conjunto de regras para um cliente específico)
 A organização das regras permite melhor administração da
   base de conhecimento
Quando Aplicar?


 Outras considerações
    Desempenho
        A execução de regras através do Drools Expert pode superar a
          programação estruturada comum em desempenho, mas não
          alcança a performance de algoritmos suficientemente otimizados
    Integração
        Regras podem ser modeladas através de ferramentas visuais
         (Eclipse) e podem ser utilizadas como tomada de decisão em
         workflows (Drools Flow)
    Legibilidade e Compreensividade
        Regras podem ser descritas em linguagem natural (DSL)
    O Drools Expert é capaz de registrar as decisões tomadas com base nas
      regras que foram executadas
Quando Aplicar?


 Aplique orientação a regras quando:
    For necessário solucionar um problema, mesmo que não muito complexo,
      que possua uma solução frágil ou volátil
    For necessário solucionar um problema que não tem um algoritmo
      completamente compreendido
    For necessário solucionar um problema que muda com frequência
    A solução do problema tenha que ser escrita por especialistas no
      domínio do problema, e não em software
    Sintoma: muitos “ifs” e “switches” ou, em casos mais elaborados,
      muitos “strategies” no código
Quando Aplicar?


 Exemplos de uso:
    Validação
       Uma determinada pessoa pode obter um empréstimo pessoal?
    Cálculo
       Calcular o prêmio de um seguro
       Calcular o valor da tarifa de uma ligação telefônica
    Roteamento e Filtragem
       Filtragem de mensagens (e-mails, SMS, etc)
Processo de manutenção


 As regras forman uma base de conhecimento fora do código
   fonte Java
 Quem mantém as regras?
 É importante definir um processo para a manutenção das
    regras em produção
    Papéis: Desenvolvedores? Especialistas no negócio? Outros?
    Workflow: Implementação/Testes/Deploy...




“   Most IT departments seem to exist for the purpose of preventing 
    software being rolled out.”
Drools Expert


  Começando com um exemplo bem simples – Avaliação de
    Crédito
  As regras envolvidas em um processo de avaliação de crédito
    são complexas e voláteis
  No entanto, podemos começar a criar uma base de
    conhecimento a partir de regras bem simples
  Exemplo: O candidato não pode ter menos de 18 anos idade
Drools Expert


  public class Candidato {
     private String nome;
     private int idade;
     ...
     public void negarCredito() {
        ...
     }
  }


  rule "Maioridade"
  when
     $candidato : Candidato ( idade < 18 )
  then
     $candidato.negarCredito();
  end
Drools Expert


  As condições da regra são denominadas fatos
     Ou seja, para que a parte then seja executada, os fatos relacionados na
       parte when devem todos ser satisfeitos

  No exemplo, deve existir uma instância de objeto da classe
    Candidato com o campo idade com valor superior a 18
     Se a condição for satisfeita, o método negarCredito() do(s) objeto(s) da
       classe Candidato encontrado(s) será(ão) executado(s)
Drools Expert

  Adicionando nova regra:

    rule "Bloqueio Serasa"
    when
       $canditato : Candidato ( bloqueios.size() > 0 )
    then
       $candidato.negarCredito();
    end
Drools Expert – Arquitetura
Drools Expert – Arquitetura

  Production Memory
     Conjunto de regras que serão verificadas

  Working Memory
     Conjunto de objetos sobre os quais as regras serão verificadas
     Representam os fatos, aquilo que se considera “estado do sistema”

  Pattern Matcher
     Motor que faz a junção entre regras e fatos, definindo quais regras serão
       executadas

  Agenda
     Motor que executa as regras (possui inteligência para evitar execuções
       duplicadas, por exemplo)
Drools Expert – Detalhes

  Construindo a Production Memory

  KnowledgeBuilder kbuilder =
      KnowledgeBuilderFactory.newKnowledgeBuilder();

  kbuilder.add(ResourceFactory.newClassPathResource(
      "licenseApplication.drl", getClass()), ResourceType.DRL);

  KnowledgeBase kbase =
      KnowledgeBaseFactory.newKnowledgeBase();

  kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

     O arquivo referenciado será carregado do classpath
Drools Expert – Detalhes

  Arquivo de Regras
  A maneira padrão e mais simples para o armazenamento de
    regras é através de um arquivo de texto, que pode conter
    uma ou mais regras
     O arquivo deve conter, em seu início, a declaração do pacote:
     package com.dominio.rules
     Pode conter também a declaração de importações de classes e interfaces
       (não é preciso importar classes e interfaces do mesmo pacote)
     Pode conter a declaração de uma ou mais regras
     Cada regra deve possuir um nome único neste pacote, dentro da mesma
       Production Memory
Drools Expert – Detalhes

  Construindo a Working Memory

  StatelessKnowledgeSession ksession =
      kbase.newStatelessKnowledgeSession();

  Candidato candidato = new Candidato("Joao da Silva", 16);

  ksession.insert(candidato);

  ksession.fireAllRules();


     Mais de um objeto pode ser atribuído à Working Memory
Drools Expert – Working Memory

 Stateless
    Os fatos são adicionados à Working Memory
    As regras são executadas somente uma vez
        (não exatamente uma única vez por que as próprias regras podem
          alterar a Working Memory)
 Statefull
    Os fatos podem ser adicionados, removidos ou alterados na Working
      Memory
    As regras podem ser executadas múltiplas vezes, de acordo com as
      mudanças detectadas na Working Memory
    Útil para soluções de monitoração, diagnóstico de problemas, logística
      em real-time, etc.
Exemplo de Uso

 Segurança de Dados
   A especificação JAAS atende aos requisitos de segurança que demandem
     controle por funcionalidade e perfil. Ou seja, frases do tipo “ Somente
     administradores do sistema podem cadastrar novos usuários ” podem
     ser facilmente formuladas através deste padrão.
   No entanto, as frases abaixo não podem ser formuladas sem codificação
     específica:
       “Somente o professor titular de uma turma pode atribuir notas aos
         respectivos alunos”
       “Somente o médico responsável pode emitir o laudo de um
         paciente”
   Nestes casos, não basta possuir o perfil de professor ou médico em um
     sistema, pois a permissão de acesso somente deverá ser dada no
     contexto de negócio em que a operação é realizada.
Exemplo de Uso


 Em geral, estas regras são implementadas no código-fonte da
   própria aplicação
    Mas, e se estas regras forem voláteis?
    E se for difícil determiná-las a priori? É possível adicioná-las
       posteriormente sem alterar o sistema inteiro?


 Talvez seja um bom lugar para usar regras, não?
Exemplo de Uso


 Caso 1: Pressupondo a existência das classes Professor,
   Turma e Aluno:

                              Turma
    Professor                                      Aluno
                    - titular : Professor
                    - alunos : Collection<Aluno>




 Pressuponha também a existência da classe Constraint que
   define se o acesso será autorizado (allow()) ou bloqueado
   (deny()) para a tentativa de acesso em questão, com uma
   instância na Working Memory.
Exemplo de Uso

 Exemplo de regra (supondo uma instância de Aluno e uma de
   Professor na Working Memory)

  rule "Atribuicao de nota a aluno"
  when
     $aluno : Aluno()
     $professor : Professor()
     Turma ( titular == $professor, alunos contains $aluno )
     $constraint : Constraint()
  then
     $constraint.allow();
  end
Exemplo de Uso


 Caso 2: Pressupondo a existência das classes Paciente e
   Médico:


           Medico                Paciente
                           - responsavel : Medico
Exemplo de Uso


 Exemplo de regra (supondo uma instância de Paciente e uma
   de Médico na Working Memory)

   rule "Emissao de Laudo"
   when
      $medico : Medico()
      $paciente : Paciente( responsavel != $medico)
      $constraint : Constraint()
   then
      $constraint.deny();
   end
Exemplo de Uso

 Caso 3: Monitoramento de Aplicações

 rule "Free memory"
 when
    Machine( freeMemory < 100.0 )
    $alarm : Alarm()
 then
    $alarm.increaseRisk();
 end

 rule "Response time"
 when
    Application( responseTime > 1200 )
    $alarm : Alarm()
 then
    $alarm.increaseRisk();
 end
Exemplo de Uso

 rule "Fire e-mail alarm"
    timer (int: 0s 5m)
 when
    $alarm : Alarm( risk == 1 )
 then
    channels.notifyByMail($alarm);
 end

 rule "Fire SMS alarm"
    timer (cron:* 0/5 * * * ?)
 when
    $alarm : Alarm( risk == 2)
 then
    channels.notifyBySMS($alarm);
 end
Exemplo de Uso

 Caso 4: Regras de Negócio

 rule "Promocao de dia das maes"
 when
    $carrinho : CarrinhoDeCompra( valorTotal > 350.0 )
    $item : Item( valor > 50.0 ) from $carrinho
 then
    $item.aplicaDesconto(0.10)
 end


  rule "Se for troca, cancela desconto"
  when
     $item : Item( troca == true)
  then
     $item.cancelaDesconto()
  end
Exemplo de Uso

 E no caso de sobreposição lógica?

 rule "Promocao de dia das maes"
 when
    $carrinho : CarrinhoDeCompra( valorTotal > 350.0 )
    $item : Item( valor > 50.0 ) from $carrinho
 then
    $item.aplicaDesconto(0.10)
 end


  rule "Se for troca, cancela desconto"
     salience -1
  when
     $item : Item( troca == true)
  then
     $item.cancelaDesconto()
  end
DSL – Domain Specific Language


 O Drools Expert possibilita a criação de DSLs para descrever
   regras
    O objetivo do uso de uma DSL é permitir a elaboração de regras por
      analistas de negócio que entendam muito pouco de orientação a
      objetos ou da especificação da Rule Language
 O uso de uma DSL facilita bastante a parametrização de regras
 O uso de uma DSL, no entanto, pode ser inviável se as regras
   forem muito voláteis em sua estrutura, e não somente em
   sua parametrização
DSL

 Exemplo (um gostinho...):

    [when]Candidato é maior de idade=Candidato (idade > 18)


 A regra ilustrada no início da apresentação ficaria:

      rule “Maioridade”
      when
         Candidato é maior de idade
      …


 O arquivo contendo a especificação da DSL deve ser também
   adicionado à Production Memory
DSL

 rule "Atribuicao de nota a aluno"
 when
    $aluno : Aluno()
    $professor : Professor()
    Turma ( titular == $professor, alunos contains $aluno )
    $constraint : Constraint()
 then
    $constraint.allow();
 end

 rule "Atribuicao de nota a aluno com DSL"
 when
    Professor é titular da turma do aluno
    $constraint : Constraint()
 then
    $constraint.allow();
 end
Authoring

 Eclipse com DSL code completion
Authoring

 Guided Editor
Authoring

 Decision Tables (Excel ou OpenOffice)
Dúvidas, questões, críticas,
comentários, observações...
Obrigado!




            www.dextra.com.br

            contato@dextra-sw.com
                 (11) 2824-6722

                 (19) 3256-6722

Mais conteúdo relacionado

Semelhante a Maratona JBoss 2010 - Drools Expert : Programação Orientada a Regras

Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de SoftwareRalph Rassweiler
 
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RADExtreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RADCesar Romero
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes ExploratóriosAlan Carlos
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2lfernandomcj
 
10 Dicas para Implementacao do OracleAS
10 Dicas para Implementacao do OracleAS10 Dicas para Implementacao do OracleAS
10 Dicas para Implementacao do OracleASacsvianabr
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...Toni Esteves
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutóriaarmeniocardoso
 
Técnicas de Análise Contextual - Livro de Walter Cybis
Técnicas de Análise Contextual - Livro de Walter CybisTécnicas de Análise Contextual - Livro de Walter Cybis
Técnicas de Análise Contextual - Livro de Walter CybisLuiz Agner
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaGraziella Bonizi
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 

Semelhante a Maratona JBoss 2010 - Drools Expert : Programação Orientada a Regras (20)

Jboss Night
Jboss NightJboss Night
Jboss Night
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Oracleplsql
OracleplsqlOracleplsql
Oracleplsql
 
Especificação de Requisitos de Software
Especificação de Requisitos de SoftwareEspecificação de Requisitos de Software
Especificação de Requisitos de Software
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
 
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RADExtreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
 
ALM - Testes Exploratórios
ALM - Testes ExploratóriosALM - Testes Exploratórios
ALM - Testes Exploratórios
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
10 Dicas para Implementacao do OracleAS
10 Dicas para Implementacao do OracleAS10 Dicas para Implementacao do OracleAS
10 Dicas para Implementacao do OracleAS
 
A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...A influência do Test-Driven Design no projeto de classes e no design em siste...
A influência do Test-Driven Design no projeto de classes e no design em siste...
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
Domain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem IntrodutóriaDomain-Driven Design - Uma Abordagem Introdutória
Domain-Driven Design - Uma Abordagem Introdutória
 
Tutorial struts
Tutorial strutsTutorial struts
Tutorial struts
 
Técnicas de Análise Contextual - Livro de Walter Cybis
Técnicas de Análise Contextual - Livro de Walter CybisTécnicas de Análise Contextual - Livro de Walter Cybis
Técnicas de Análise Contextual - Livro de Walter Cybis
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 

Mais de Dextra

Digital Acceleration por Bill Coutinho
Digital Acceleration por Bill CoutinhoDigital Acceleration por Bill Coutinho
Digital Acceleration por Bill CoutinhoDextra
 
Dextra | Como acelerar o Digital na sua empresa usando Tecnologias em Nuvem
Dextra | Como acelerar o Digital na sua empresa usando Tecnologias em NuvemDextra | Como acelerar o Digital na sua empresa usando Tecnologias em Nuvem
Dextra | Como acelerar o Digital na sua empresa usando Tecnologias em NuvemDextra
 
Digital Acceleration
Digital AccelerationDigital Acceleration
Digital AccelerationDextra
 
Innovator's dilemma
Innovator's dilemma Innovator's dilemma
Innovator's dilemma Dextra
 
Design Thinking | Course Material
Design Thinking | Course MaterialDesign Thinking | Course Material
Design Thinking | Course MaterialDextra
 
Dextra mud-sustaining architecture withrefactoring
Dextra mud-sustaining architecture withrefactoringDextra mud-sustaining architecture withrefactoring
Dextra mud-sustaining architecture withrefactoringDextra
 
Classificação de documentos
Classificação de documentosClassificação de documentos
Classificação de documentosDextra
 
Recomendação de conteúdo com apache mahout
Recomendação de conteúdo com apache mahoutRecomendação de conteúdo com apache mahout
Recomendação de conteúdo com apache mahoutDextra
 
Ux na vida real deedz
Ux na vida real  deedzUx na vida real  deedz
Ux na vida real deedzDextra
 
IT For Digital Business | Transformação digital na Natura.
IT For Digital Business | Transformação digital na Natura.IT For Digital Business | Transformação digital na Natura.
IT For Digital Business | Transformação digital na Natura.Dextra
 
IT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos Kroton
IT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos KrotonIT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos Kroton
IT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos KrotonDextra
 
IT4DBiz - Inovação e Renovação: a nova agenda da TI moderna
IT4DBiz - Inovação e Renovação: a nova agenda da TI modernaIT4DBiz - Inovação e Renovação: a nova agenda da TI moderna
IT4DBiz - Inovação e Renovação: a nova agenda da TI modernaDextra
 
Desenvolvendo aplicações de negócio na velocidade do Google
Desenvolvendo aplicações de negócio na velocidade do GoogleDesenvolvendo aplicações de negócio na velocidade do Google
Desenvolvendo aplicações de negócio na velocidade do GoogleDextra
 
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...Dextra
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBADextra
 
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...Dextra
 
IT for Digital Business 2014 - TI baseada em Valores
IT for Digital Business 2014 - TI baseada em ValoresIT for Digital Business 2014 - TI baseada em Valores
IT for Digital Business 2014 - TI baseada em ValoresDextra
 
It for Digital Business 2014 - Negócios Digitais e a Nova TI
It for Digital Business 2014 - Negócios Digitais e a Nova TIIt for Digital Business 2014 - Negócios Digitais e a Nova TI
It for Digital Business 2014 - Negócios Digitais e a Nova TIDextra
 
MobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill Coutinho
MobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill CoutinhoMobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill Coutinho
MobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill CoutinhoDextra
 
MobCamp 2014 :: Android em Tablets - Neto Marin
MobCamp 2014 :: Android em Tablets - Neto MarinMobCamp 2014 :: Android em Tablets - Neto Marin
MobCamp 2014 :: Android em Tablets - Neto MarinDextra
 

Mais de Dextra (20)

Digital Acceleration por Bill Coutinho
Digital Acceleration por Bill CoutinhoDigital Acceleration por Bill Coutinho
Digital Acceleration por Bill Coutinho
 
Dextra | Como acelerar o Digital na sua empresa usando Tecnologias em Nuvem
Dextra | Como acelerar o Digital na sua empresa usando Tecnologias em NuvemDextra | Como acelerar o Digital na sua empresa usando Tecnologias em Nuvem
Dextra | Como acelerar o Digital na sua empresa usando Tecnologias em Nuvem
 
Digital Acceleration
Digital AccelerationDigital Acceleration
Digital Acceleration
 
Innovator's dilemma
Innovator's dilemma Innovator's dilemma
Innovator's dilemma
 
Design Thinking | Course Material
Design Thinking | Course MaterialDesign Thinking | Course Material
Design Thinking | Course Material
 
Dextra mud-sustaining architecture withrefactoring
Dextra mud-sustaining architecture withrefactoringDextra mud-sustaining architecture withrefactoring
Dextra mud-sustaining architecture withrefactoring
 
Classificação de documentos
Classificação de documentosClassificação de documentos
Classificação de documentos
 
Recomendação de conteúdo com apache mahout
Recomendação de conteúdo com apache mahoutRecomendação de conteúdo com apache mahout
Recomendação de conteúdo com apache mahout
 
Ux na vida real deedz
Ux na vida real  deedzUx na vida real  deedz
Ux na vida real deedz
 
IT For Digital Business | Transformação digital na Natura.
IT For Digital Business | Transformação digital na Natura.IT For Digital Business | Transformação digital na Natura.
IT For Digital Business | Transformação digital na Natura.
 
IT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos Kroton
IT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos KrotonIT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos Kroton
IT4DBiz - Tecnologia digital para melhorar a empregabilidade dos alunos Kroton
 
IT4DBiz - Inovação e Renovação: a nova agenda da TI moderna
IT4DBiz - Inovação e Renovação: a nova agenda da TI modernaIT4DBiz - Inovação e Renovação: a nova agenda da TI moderna
IT4DBiz - Inovação e Renovação: a nova agenda da TI moderna
 
Desenvolvendo aplicações de negócio na velocidade do Google
Desenvolvendo aplicações de negócio na velocidade do GoogleDesenvolvendo aplicações de negócio na velocidade do Google
Desenvolvendo aplicações de negócio na velocidade do Google
 
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
 
PGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBAPGAnalytics - Facilitando sua vida do DBA
PGAnalytics - Facilitando sua vida do DBA
 
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
IT for Digital Business 2014 - Como conciliar velocidade e governança numa ár...
 
IT for Digital Business 2014 - TI baseada em Valores
IT for Digital Business 2014 - TI baseada em ValoresIT for Digital Business 2014 - TI baseada em Valores
IT for Digital Business 2014 - TI baseada em Valores
 
It for Digital Business 2014 - Negócios Digitais e a Nova TI
It for Digital Business 2014 - Negócios Digitais e a Nova TIIt for Digital Business 2014 - Negócios Digitais e a Nova TI
It for Digital Business 2014 - Negócios Digitais e a Nova TI
 
MobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill Coutinho
MobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill CoutinhoMobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill Coutinho
MobCamp 2014 :: HTML5 x App Store O pêndulo da Tecnologia - Bill Coutinho
 
MobCamp 2014 :: Android em Tablets - Neto Marin
MobCamp 2014 :: Android em Tablets - Neto MarinMobCamp 2014 :: Android em Tablets - Neto Marin
MobCamp 2014 :: Android em Tablets - Neto Marin
 

Maratona JBoss 2010 - Drools Expert : Programação Orientada a Regras

  • 1. Drools Expert : Programação Orientada a Regras Fábio Santos Setembro de 2010 Fábrica de Software Sistemas e aplicações sob medida para as necessidades do seu negócio.
  • 2. Agenda Introdução à Programação Orientada a Regras Quando aplicar? Drools Expert – Visão Geral Um exemplo de uso
  • 3. Drools – Família de Produtos Drools Expert: Rules Engine Drools Fusion: Complex Event Processing Drools Flow: Workflow / Business Process Drools Guvnor: Centralised Knowledge Repository Drools Planner: Solves Planning Problems
  • 4. Drools – Família de Produtos Drools Expert: Rules Engine Drools Fusion: Complex Event Processing Drools Flow: Workflow / Business Process Drools Guvnor: Centralised Knowledge Repository Drools Solver: Solves Planning Problems
  • 5. Orientação a Regras Paradigma de Programação Estruturada O código-fonte determina o que deve ser feito, quando e como. Faça isso, depois faça aquilo...
  • 6. Orientação a Regras Paradigma de Programação Orientada a Regras O código-fonte determina regras que dizem o que deve ser feito quando determinada condição for satisfeita. Faça isso quando aquilo ocorrer...
  • 7. Orientação a Regras Em determinado instante, Quando deseja-se executar um Um conjunto conjunto de regras de condições é satisfeito Estado do Sistema Então Um conjunto de ações são realizadas
  • 8. Orientação a Regras Orientação a Regras × Orientação a Eventos Orientação a Regras: As condições (o “quando”) são definidas de acordo com o estado do sistema. Orientação a Eventos: As condições são definidas por ações tomadas no sistema.
  • 9. Orientação a Regras Nos casos de distinção mais difícil: Orientação a Regras: Pressupõe que um conjunto de ações precisam ser tomadas em um determinado instante e o atual estado do sistema será usado para descobrir quais ações devem ser realizadas. Orientação a Eventos: Pressupõe que a condição original independe da ação que será disparada em decorrência do evento disparado.
  • 10. Orientação a Regras Como em todo paradigma diferente, é preciso mudar a abordagem Use a abordagem mais adequada para o problema em questão Uma abordagem não consegue resolver todos os problemas da forma mais organizada e legível possível O uso de regras pode tornar trivialmente legível a solução de problemas muito complexos, mas pode tornar praticamente ilegível a solução de um problema simples
  • 11. Orientação a Regras Regras são determinísticas, ou seja, podem ser testadas A quebra de uma solução complexa em um conjunto de regras simples facilita a implementação de testes automatizados Provavelmente, seu sistema não será inteiramente implementado usando regras, mas o uso de regras pode ser relevante em determinados lugares
  • 12. Quando Aplicar? Problemas Complexos O uso de regras possibilita a quebra de um problema complexo em um conjunto de regras simples e independentes que, quando aplicadas em conjunto, resolvem elegantemente o problema em questão
  • 13. Quando Aplicar? Regras de Negócio Voláteis A separação entre dados e lógica é muito bem determinada (os dados são os seus objetos de domínio, a lógica são as regras) As regras podem ser facilmente alteradas sem a alteração da estrutura de dados As regras podem ser alteradas dinamicamente (por um exemplo: um conjunto de regras para um cliente específico) A organização das regras permite melhor administração da base de conhecimento
  • 14. Quando Aplicar? Outras considerações Desempenho A execução de regras através do Drools Expert pode superar a programação estruturada comum em desempenho, mas não alcança a performance de algoritmos suficientemente otimizados Integração Regras podem ser modeladas através de ferramentas visuais (Eclipse) e podem ser utilizadas como tomada de decisão em workflows (Drools Flow) Legibilidade e Compreensividade Regras podem ser descritas em linguagem natural (DSL) O Drools Expert é capaz de registrar as decisões tomadas com base nas regras que foram executadas
  • 15. Quando Aplicar? Aplique orientação a regras quando: For necessário solucionar um problema, mesmo que não muito complexo, que possua uma solução frágil ou volátil For necessário solucionar um problema que não tem um algoritmo completamente compreendido For necessário solucionar um problema que muda com frequência A solução do problema tenha que ser escrita por especialistas no domínio do problema, e não em software Sintoma: muitos “ifs” e “switches” ou, em casos mais elaborados, muitos “strategies” no código
  • 16. Quando Aplicar? Exemplos de uso: Validação Uma determinada pessoa pode obter um empréstimo pessoal? Cálculo Calcular o prêmio de um seguro Calcular o valor da tarifa de uma ligação telefônica Roteamento e Filtragem Filtragem de mensagens (e-mails, SMS, etc)
  • 17. Processo de manutenção As regras forman uma base de conhecimento fora do código fonte Java Quem mantém as regras? É importante definir um processo para a manutenção das regras em produção Papéis: Desenvolvedores? Especialistas no negócio? Outros? Workflow: Implementação/Testes/Deploy... “ Most IT departments seem to exist for the purpose of preventing  software being rolled out.”
  • 18. Drools Expert Começando com um exemplo bem simples – Avaliação de Crédito As regras envolvidas em um processo de avaliação de crédito são complexas e voláteis No entanto, podemos começar a criar uma base de conhecimento a partir de regras bem simples Exemplo: O candidato não pode ter menos de 18 anos idade
  • 19. Drools Expert public class Candidato { private String nome; private int idade; ... public void negarCredito() { ... } } rule "Maioridade" when $candidato : Candidato ( idade < 18 ) then $candidato.negarCredito(); end
  • 20. Drools Expert As condições da regra são denominadas fatos Ou seja, para que a parte then seja executada, os fatos relacionados na parte when devem todos ser satisfeitos No exemplo, deve existir uma instância de objeto da classe Candidato com o campo idade com valor superior a 18 Se a condição for satisfeita, o método negarCredito() do(s) objeto(s) da classe Candidato encontrado(s) será(ão) executado(s)
  • 21. Drools Expert Adicionando nova regra: rule "Bloqueio Serasa" when $canditato : Candidato ( bloqueios.size() > 0 ) then $candidato.negarCredito(); end
  • 22. Drools Expert – Arquitetura
  • 23. Drools Expert – Arquitetura Production Memory Conjunto de regras que serão verificadas Working Memory Conjunto de objetos sobre os quais as regras serão verificadas Representam os fatos, aquilo que se considera “estado do sistema” Pattern Matcher Motor que faz a junção entre regras e fatos, definindo quais regras serão executadas Agenda Motor que executa as regras (possui inteligência para evitar execuções duplicadas, por exemplo)
  • 24. Drools Expert – Detalhes Construindo a Production Memory KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource( "licenseApplication.drl", getClass()), ResourceType.DRL); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); O arquivo referenciado será carregado do classpath
  • 25. Drools Expert – Detalhes Arquivo de Regras A maneira padrão e mais simples para o armazenamento de regras é através de um arquivo de texto, que pode conter uma ou mais regras O arquivo deve conter, em seu início, a declaração do pacote: package com.dominio.rules Pode conter também a declaração de importações de classes e interfaces (não é preciso importar classes e interfaces do mesmo pacote) Pode conter a declaração de uma ou mais regras Cada regra deve possuir um nome único neste pacote, dentro da mesma Production Memory
  • 26. Drools Expert – Detalhes Construindo a Working Memory StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession(); Candidato candidato = new Candidato("Joao da Silva", 16); ksession.insert(candidato); ksession.fireAllRules(); Mais de um objeto pode ser atribuído à Working Memory
  • 27. Drools Expert – Working Memory Stateless Os fatos são adicionados à Working Memory As regras são executadas somente uma vez (não exatamente uma única vez por que as próprias regras podem alterar a Working Memory) Statefull Os fatos podem ser adicionados, removidos ou alterados na Working Memory As regras podem ser executadas múltiplas vezes, de acordo com as mudanças detectadas na Working Memory Útil para soluções de monitoração, diagnóstico de problemas, logística em real-time, etc.
  • 28. Exemplo de Uso Segurança de Dados A especificação JAAS atende aos requisitos de segurança que demandem controle por funcionalidade e perfil. Ou seja, frases do tipo “ Somente administradores do sistema podem cadastrar novos usuários ” podem ser facilmente formuladas através deste padrão. No entanto, as frases abaixo não podem ser formuladas sem codificação específica: “Somente o professor titular de uma turma pode atribuir notas aos respectivos alunos” “Somente o médico responsável pode emitir o laudo de um paciente” Nestes casos, não basta possuir o perfil de professor ou médico em um sistema, pois a permissão de acesso somente deverá ser dada no contexto de negócio em que a operação é realizada.
  • 29. Exemplo de Uso Em geral, estas regras são implementadas no código-fonte da própria aplicação Mas, e se estas regras forem voláteis? E se for difícil determiná-las a priori? É possível adicioná-las posteriormente sem alterar o sistema inteiro? Talvez seja um bom lugar para usar regras, não?
  • 30. Exemplo de Uso Caso 1: Pressupondo a existência das classes Professor, Turma e Aluno: Turma Professor Aluno - titular : Professor - alunos : Collection<Aluno> Pressuponha também a existência da classe Constraint que define se o acesso será autorizado (allow()) ou bloqueado (deny()) para a tentativa de acesso em questão, com uma instância na Working Memory.
  • 31. Exemplo de Uso Exemplo de regra (supondo uma instância de Aluno e uma de Professor na Working Memory) rule "Atribuicao de nota a aluno" when $aluno : Aluno() $professor : Professor() Turma ( titular == $professor, alunos contains $aluno ) $constraint : Constraint() then $constraint.allow(); end
  • 32. Exemplo de Uso Caso 2: Pressupondo a existência das classes Paciente e Médico: Medico Paciente - responsavel : Medico
  • 33. Exemplo de Uso Exemplo de regra (supondo uma instância de Paciente e uma de Médico na Working Memory) rule "Emissao de Laudo" when $medico : Medico() $paciente : Paciente( responsavel != $medico) $constraint : Constraint() then $constraint.deny(); end
  • 34. Exemplo de Uso Caso 3: Monitoramento de Aplicações rule "Free memory" when Machine( freeMemory < 100.0 ) $alarm : Alarm() then $alarm.increaseRisk(); end rule "Response time" when Application( responseTime > 1200 ) $alarm : Alarm() then $alarm.increaseRisk(); end
  • 35. Exemplo de Uso rule "Fire e-mail alarm" timer (int: 0s 5m) when $alarm : Alarm( risk == 1 ) then channels.notifyByMail($alarm); end rule "Fire SMS alarm" timer (cron:* 0/5 * * * ?) when $alarm : Alarm( risk == 2) then channels.notifyBySMS($alarm); end
  • 36. Exemplo de Uso Caso 4: Regras de Negócio rule "Promocao de dia das maes" when $carrinho : CarrinhoDeCompra( valorTotal > 350.0 ) $item : Item( valor > 50.0 ) from $carrinho then $item.aplicaDesconto(0.10) end rule "Se for troca, cancela desconto" when $item : Item( troca == true) then $item.cancelaDesconto() end
  • 37. Exemplo de Uso E no caso de sobreposição lógica? rule "Promocao de dia das maes" when $carrinho : CarrinhoDeCompra( valorTotal > 350.0 ) $item : Item( valor > 50.0 ) from $carrinho then $item.aplicaDesconto(0.10) end rule "Se for troca, cancela desconto" salience -1 when $item : Item( troca == true) then $item.cancelaDesconto() end
  • 38. DSL – Domain Specific Language O Drools Expert possibilita a criação de DSLs para descrever regras O objetivo do uso de uma DSL é permitir a elaboração de regras por analistas de negócio que entendam muito pouco de orientação a objetos ou da especificação da Rule Language O uso de uma DSL facilita bastante a parametrização de regras O uso de uma DSL, no entanto, pode ser inviável se as regras forem muito voláteis em sua estrutura, e não somente em sua parametrização
  • 39. DSL Exemplo (um gostinho...): [when]Candidato é maior de idade=Candidato (idade > 18) A regra ilustrada no início da apresentação ficaria: rule “Maioridade” when Candidato é maior de idade … O arquivo contendo a especificação da DSL deve ser também adicionado à Production Memory
  • 40. DSL rule "Atribuicao de nota a aluno" when $aluno : Aluno() $professor : Professor() Turma ( titular == $professor, alunos contains $aluno ) $constraint : Constraint() then $constraint.allow(); end rule "Atribuicao de nota a aluno com DSL" when Professor é titular da turma do aluno $constraint : Constraint() then $constraint.allow(); end
  • 41. Authoring Eclipse com DSL code completion
  • 43. Authoring Decision Tables (Excel ou OpenOffice)
  • 45. Obrigado! www.dextra.com.br contato@dextra-sw.com (11) 2824-6722 (19) 3256-6722