JavaFX Script
Classes, binding e outros elementos

Fábio Nogueira de Lucena
Instituto de Informática (UFG)
Graduação em Engenharia de Software
http://engenhariadesoftware.inf.br
Visão geral de recursos
“avançados”
Classe
Sobrescrever para 1 objeto
Binding:
permite associar variável ao
valor de uma expressão
Binding


                        ã é




  Binding expressions são automaticamente
reavaliadas quando suas dependências mudam
Binding


                         ã é




  Binding expressions são automaticamente
reavaliadas quando suas dependências mudam
Binding




  Binding expressions são automaticamente
reavaliadas quando suas dependências mudam
Binding


    Á      í

    Á      í



     Lembre-se: binding expressions são
reavaliadas quando suas dependências mudam
O que está acontecendo?


      O runtime de JavaFX “sabe” que o valor de
      a deve ser atualizado sempre que o valor
  da expressão pi * raio * raio for alterado, ou seja,
sempre que pi ou o valor de raio for alterado. Quando
   isto ocorre, o runtime reavalia a expressão e o
        resultado é depositado na variável a!
Mais um exemplo...
var x = 1;
def dobro = bind 2 * x;
def msg = bind "O dobro de {x} é {dobro}";
println(msg);
x = 2;
println(msg);


     Lembre-se: binding expressions são
reavaliadas quando suas dependências mudam
Binding (if)


          Á         í

          Á         í

 O binding depende, neste exemplo, da condição, do
corpo do then e do else, ou seja, das variáveis r e pi
Binding (if)

                                 á
        Á       í

        Á       í


 O binding depende, neste exemplo, da condição, do
corpo do then e do else, ou seja, nas variáveis r e pi
Binding (for)




  O binding depende apenas da variável fim
Binding (for)
var fim = 1;
var passo = 1;
var y = 3;
var seq = bind [1..fim step passo];
def s = bind for (x in seq where x<y) x;
println(s); // [ 1 ]
fim = 2;
println(s); // [ 1 2 ]
passo = 2;
println(s); // [ 1 ]
y = -1;
println(s); // [ ]

           seq depende de fim e de passo
                s depende de seq e y
Binding (block)




   z depende de aux, que depende de x e y
        OU SEJA, z depende de x e y
Binding (function)
    Pode existir binding para uma função
    A função pode ser non-bound ou bound

                DEPENDÊNCIA
Binding para non-bound function: argumentos
     Binding para bound function: bloco
Binding (non-bound function)




     O binding de resultado depende de x e y
Quando x ou y mudar, fazAlgo é executada e o valor
        obtido é depositado em resultado
Binding (bound function)




    O binding de resultado depende de k*x+y
Quando x ou y ou k mudar, fazAlgo é executada e o
     valor obtido depositado em resultado
Binding (object literal)
Variável com binding para object literal depende da união
 das dependências de todas as expressões do lado direito
               das variáveis de instância.

 Não inclui dependências de variáveis de instâncias
              para as quais há binding.

Quando ocorre mudança, cria-se uma
          nova instância!
Binding (object literal)




     O binding de a depende de varNome
Quando varNome mudar, uma nova instância é
   criada e passa a ser referenciada por a
Binding (object literal)




   O binding de a não depende de varNome
  Quando varNome mudar, apenas o valor de
             a.nome é alterado.
Binding bidirecional


      Binding bidirecional acrescente
               with inverse
 ao final da expressão envolvendo o binding
Binding bidirecional




  O binding de y depende de a e vice-versa
     Quando a mudar y também muda
     Quanto y mudar a também muda
Variável (function)
var operacao : function(:Byte, :Byte) : Byte;
var add = function(x:Byte, y:Byte) { x + y };
var sub = function(x:Byte, y:Byte) { x - y };
var pro = function(x:Byte, y:Byte) { x * y };
var div = function(x:Byte, y:Byte) { x / y };

var ops = [ add, sub, pro, div ];

for (op in ops) {
  println(op(10,2));
}


                     Qual o resultado?
Variável (function)




          Qual o resultado?
Variável (function)




  Inferência de tipos tornou desnecessário
 indicar o tipo da variável f, ao contrário do
     exemplo anterior (tipo explicitado)
Triggers
Considerações finais
Nem tudo de JavaFX foi abordado
  Tratamento de exceções
  Classes (herança múltipla, init, postinit, ...)
  Organização do código em packages, classes,...
  Modificadores de acesso: public-init, public-read, ...
Visão geral é suficiente para “aprofundar”

Mais conteúdo relacionado

PPTX
Aula 24,25,26 e 27. posicionamento
DOCX
Atividade sobre procedimento e parâmetros
PPTX
Css3 3D transforms - transitions
ODP
servlet-requisicoes
ODP
Como desenvolver-software
ODP
Orientação a Objetos (3)
Aula 24,25,26 e 27. posicionamento
Atividade sobre procedimento e parâmetros
Css3 3D transforms - transitions
servlet-requisicoes
Como desenvolver-software
Orientação a Objetos (3)

Destaque (13)

ODP
Orientação a Objetos (1)
ODP
servlet-respostas
ZIP
Visão Geral de EJB 3.0
PDF
Javafx Introdução
ODP
Orientação a Objetos (2)
PPTX
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
ODP
engenharia-de-requisitos
Orientação a Objetos (1)
servlet-respostas
Visão Geral de EJB 3.0
Javafx Introdução
Orientação a Objetos (2)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
engenharia-de-requisitos
Anúncio

Mais de Fábio Nogueira de Lucena (17)

PDF
Fundamentos de Programação Front-End
PPTX
JavaScript: Aprendendo a programar
PPTX
HTML5: Primeiros Contatos (visão geral)
PDF
HTTP: Um Curso Básico
PDF
Apresentacao curso-2017-08-08
PPTX
Jornada Goiana em Engenharia de Software 2017
PPTX
PPTX
Introducao integracao
PPTX
Healthdb Visão Geral
PPTX
Engenharia de Software - planejamento pedagógico
PPTX
Arquitetura de Software EXPLICADA
PPT
Arquitetura de Software
PPTX
Arquitetura software
PPTX
Prontuário Eletrônico do Paciente
ODP
Orientação a objetos (tecnologias)
ODP
Orientação a Objetos (introdução)
Fundamentos de Programação Front-End
JavaScript: Aprendendo a programar
HTML5: Primeiros Contatos (visão geral)
HTTP: Um Curso Básico
Apresentacao curso-2017-08-08
Jornada Goiana em Engenharia de Software 2017
Introducao integracao
Healthdb Visão Geral
Engenharia de Software - planejamento pedagógico
Arquitetura de Software EXPLICADA
Arquitetura de Software
Arquitetura software
Prontuário Eletrônico do Paciente
Orientação a objetos (tecnologias)
Orientação a Objetos (introdução)
Anúncio

Último (12)

PDF
Jira Software projetos completos com scrum
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Utilizando code blockes por andre backes
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPT
Conceitos básicos de Redes Neurais Artificiais
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PDF
Manejo integrado de pragas na cultura do algodão
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Jira Software projetos completos com scrum
Viasol Energia Solar -Soluções para geração e economia de energia
Processos no SAP Extended Warehouse Management, EWM100 Col26
Utilizando code blockes por andre backes
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Tipos de servidor em redes de computador.pptx
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Conceitos básicos de Redes Neurais Artificiais
Analise Estatica de Compiladores para criar uma nova LP
Manejo integrado de pragas na cultura do algodão
Termos utilizados na designação de relação entre pessoa e uma obra.pdf

Javafx Avancado

  • 1. JavaFX Script Classes, binding e outros elementos Fábio Nogueira de Lucena Instituto de Informática (UFG) Graduação em Engenharia de Software http://engenhariadesoftware.inf.br
  • 2. Visão geral de recursos “avançados”
  • 5. Binding: permite associar variável ao valor de uma expressão
  • 6. Binding ã é Binding expressions são automaticamente reavaliadas quando suas dependências mudam
  • 7. Binding ã é Binding expressions são automaticamente reavaliadas quando suas dependências mudam
  • 8. Binding Binding expressions são automaticamente reavaliadas quando suas dependências mudam
  • 9. Binding Á í Á í Lembre-se: binding expressions são reavaliadas quando suas dependências mudam
  • 10. O que está acontecendo? O runtime de JavaFX “sabe” que o valor de a deve ser atualizado sempre que o valor da expressão pi * raio * raio for alterado, ou seja, sempre que pi ou o valor de raio for alterado. Quando isto ocorre, o runtime reavalia a expressão e o resultado é depositado na variável a!
  • 11. Mais um exemplo... var x = 1; def dobro = bind 2 * x; def msg = bind "O dobro de {x} é {dobro}"; println(msg); x = 2; println(msg); Lembre-se: binding expressions são reavaliadas quando suas dependências mudam
  • 12. Binding (if) Á í Á í O binding depende, neste exemplo, da condição, do corpo do then e do else, ou seja, das variáveis r e pi
  • 13. Binding (if) á Á í Á í O binding depende, neste exemplo, da condição, do corpo do then e do else, ou seja, nas variáveis r e pi
  • 14. Binding (for) O binding depende apenas da variável fim
  • 15. Binding (for) var fim = 1; var passo = 1; var y = 3; var seq = bind [1..fim step passo]; def s = bind for (x in seq where x<y) x; println(s); // [ 1 ] fim = 2; println(s); // [ 1 2 ] passo = 2; println(s); // [ 1 ] y = -1; println(s); // [ ] seq depende de fim e de passo s depende de seq e y
  • 16. Binding (block) z depende de aux, que depende de x e y OU SEJA, z depende de x e y
  • 17. Binding (function) Pode existir binding para uma função A função pode ser non-bound ou bound DEPENDÊNCIA Binding para non-bound function: argumentos Binding para bound function: bloco
  • 18. Binding (non-bound function) O binding de resultado depende de x e y Quando x ou y mudar, fazAlgo é executada e o valor obtido é depositado em resultado
  • 19. Binding (bound function) O binding de resultado depende de k*x+y Quando x ou y ou k mudar, fazAlgo é executada e o valor obtido depositado em resultado
  • 20. Binding (object literal) Variável com binding para object literal depende da união das dependências de todas as expressões do lado direito das variáveis de instância. Não inclui dependências de variáveis de instâncias para as quais há binding. Quando ocorre mudança, cria-se uma nova instância!
  • 21. Binding (object literal) O binding de a depende de varNome Quando varNome mudar, uma nova instância é criada e passa a ser referenciada por a
  • 22. Binding (object literal) O binding de a não depende de varNome Quando varNome mudar, apenas o valor de a.nome é alterado.
  • 23. Binding bidirecional Binding bidirecional acrescente with inverse ao final da expressão envolvendo o binding
  • 24. Binding bidirecional O binding de y depende de a e vice-versa Quando a mudar y também muda Quanto y mudar a também muda
  • 25. Variável (function) var operacao : function(:Byte, :Byte) : Byte; var add = function(x:Byte, y:Byte) { x + y }; var sub = function(x:Byte, y:Byte) { x - y }; var pro = function(x:Byte, y:Byte) { x * y }; var div = function(x:Byte, y:Byte) { x / y }; var ops = [ add, sub, pro, div ]; for (op in ops) { println(op(10,2)); } Qual o resultado?
  • 26. Variável (function) Qual o resultado?
  • 27. Variável (function) Inferência de tipos tornou desnecessário indicar o tipo da variável f, ao contrário do exemplo anterior (tipo explicitado)
  • 29. Considerações finais Nem tudo de JavaFX foi abordado Tratamento de exceções Classes (herança múltipla, init, postinit, ...) Organização do código em packages, classes,... Modificadores de acesso: public-init, public-read, ... Visão geral é suficiente para “aprofundar”