r1 - 20 Mar 2007 - 05:27:17 - MaxwellAlmeidaYou are here: TWiki >  Doo Web  > TecnoLogias > IntroducaoAJavaComJadix > UtilizandoJadixComPichador > ExemplosDeApliquesJadixComPichador
Estrutura do Aplique Jadix com Pichador e primeiro exemplo:

Considerando que você ja leu CriandoUmApliqueJadix, ColocandoUmApliqueJadixNoDix, ConfigurandoOJadixNoEclipse e CriandoUmProjetoJadixNoEclipse ,*vamos ao que interessa:

Uma classe Aplique (que você criou) em no Eclipse ou editor de textos, que é subclasse de ApliqueJadixComPichador? ( Aplique extends ApliqueJadixComPichador), tem essa estrutura inicial:

import edugraf.jadix.ApliqueJadixComPichador;
import edugraf.pichador.IPichador;

public class Aplique extends ApliqueJadixComPichador {
    IPichador fulano;

    public void iniciar() {
          fulano = this.criarPichador();
    }
}

O ApliqueJadixComPichador, difere do ApliqueJadix apenas pelo método criarPichador(), portanto, assim como seu pai, é uma classe responsável por inicializar o Jadix. O método iniciar() acima, é o método que inicaliza sua aplicação, portando a chamada de métodos de sua aplicação, criação de instâncias de tipos de sua aplicação devem ser feitas dentro desse método.

Observe a declaração do tipo,

IPichador fulano;

e criação de uma instância do objeto do tipo Pichador no método iniciar() da classe Aplique:

fulano = this.criarPichador();

Objetos do tipo Pichador, possuem métodos ( primitivas no Telis) que constituem a base de todos os métodos que porventura você ira criar, exemplos:

fulano. comRastros();

fulano. andarPara(x, y);

fulano. descansar(tempo);

fulano. fixarDireção(ângulo);

fulano. fixarÍcone(ícone);

fulano. frente(distância);

fulano. obterDireção();

fulano. obterPosição();

fulano. tornarVisível();

Para saber mais sobre as primitivas do Pichador, com o Eclipse aberto, escreva o nome da instância que criou no ApliqueJadixComPichador? depois o ponto (exemplo, fulano. ) e clique em CTRL + espaço que as opções de métodos lhe serão mostradas. Há outras opções para visualizar a hierarquia de classes e metodos no Eclipse, pesquise um pouco ou olhe a documentação do Jadix? para mais detalhes.

No exemplo abaixo, mostramos o comando "repita", em Java, seria for (declaração e atribuição do contador do repita; condição de parada do repita; incremento ou decremento do contador) { ...Seu código ...} , que é uma síntese. Entende-se a síntese como um processo intelectual de organização e composição de elementos de um dado objeto – é o ato originário do conhecimento. A partir desses comandos primitivos, a pessoa pode criar outros comandos que são denominados de métodos (procedimentos em linguagem procedural e agendas em Telis) , os quais, uma vez na memória do programa podem ser executados como os comandos primitivos (como aqueles citados acima e que pertencem a API do Jadix). Por exemplo, o comando “tracejadar” não é um comando primitivo, mas podemos criar um método denominado “tracejar” e toda vez que quiser fazer um tracejado, executamos esse método com algum objeto do tipo Pichador.

import edugraf.jadix.ApliqueJadixComPichador;
import edugraf.pichador.IPichador;

public class Aplique extends ApliqueJadixComPichador {
 IPichador ciclano;
 @Override
 public void iniciar() {
  ciclano = this.criarPichador();
  
  for(int i = 0; i < 5; i++){
   ciclano.comRastros();
   ciclano.frente(5);
   ciclano.semRastros();
   ciclano.frente(5);
  }
 }
}
[ Veja aqui o Aplique acima funcionando]

Vemos o laço "repita" as chamadas dos métodos (ações) do Pichador a cada iteração (contagem de vezes).

for(int i = 0; i < 5; i++){
   ciclano.comRastros();
   ciclano.frente(5);
   ciclano.semRastros();
   ciclano.frente(5);
}
Agora dê uma olhada mais atenta no código acima, algo não parece repitido? Ou primitivas usadas em excesso? Ou não se sabe ao certo o que tá acontecendo dentro daquele "for" (repita)? Será que não poderiamos simplificar isso? smile Uma maneira que talvez não seja a melhor de fazê-lo, mas é interessante para demonstrar conceitos de refatoração de código é como segue abaixo:
public class Aplique extends ApliqueJadixComPichador {
 IPichador ciclano;
 @Override
 public void iniciar() {
  ciclano = this.criarPichador();
  
  for(int i = 0; i < 5; i++){
   fazerTraço();
   deixarEmBranco();
  }
 }
 
 private void deixarEmBranco() {
  ciclano.semRastros();
  ciclano.frente(5);
 }
 
 private void fazerTraço() {
  ciclano.comRastros();
  ciclano.frente(5);
 }
}
Percebam no código acima, que foram criados novos métodos para duas ações do Pichador, fazerTraço e deixarEmBranco, ele itera (executa) 5 vezes sobre elas, mas será que isso não poderia ficar melhor? Aquele for (repita) ali, não está me dando a melhor idéia do que está sendo feito ali naquele treço de código, não tem nem nome aquela parte, mostramos abaixo outra fatoração:

import edugraf.jadix.ApliqueJadixComPichador;
import edugraf.pichador.IPichador;

public class Aplique extends ApliqueJadixComPichador {
 IPichador ciclano;
 @Override
 public void iniciar() {
  ciclano = this.criarPichador();
  tracejar();
 }

 private void tracejar() {
  for(int i = 0; i < 5; i++){
   fazerTraço();
   deixarEmBranco();
  }
 }
 
 private void deixarEmBranco() {
  ciclano.semRastros();
  ciclano.frente(5);
 }
 
 private void fazerTraço() {
  ciclano.comRastros();
  ciclano.frente(5);
 }
}
No código acima, talvez não seja o melhor exemplo de refatoração, mas percebam que dá para entender melhor, o que cada parte está fazendo?

Segundo exemplo de uso do ApliqueJadixComPichador?:

Vamos dar uma olhada no Aplique abaixo:

public class Aplique extends ApliqueJadixComPichador {

 IPichador fulano;
 @Override
 public void iniciar() {
  fulano = this.criarPichador();

  for(int i = 0; i<89; i++ ){
   fulano.
    frente(1).
    fixarDireção(1 + fulano.obterDireção());
  }
  fulano.fixarDireção(90 + fulano.obterDireção());
  for(int i = 0; i<89; i++ ){
   fulano.
    frente(1).
    fixarDireção(1 + fulano.obterDireção());
  }
  
 }
 
}

[ Veja aqui o Aplique acima funcionando]

Com algum esforço, senão muito esforço, veremos que o código acima faz uma pétala de uma flor., vemos abaixo uma primeira fatoração do código.

import edugraf.jadix.ApliqueJadixComPichador;
import edugraf.pichador.IPichador;

public class Aplique extends ApliqueJadixComPichador {

 IPichador fulano;
 @Override
 public void iniciar() {
  fulano = this.criarPichador();

  desenharPétala();

 }
 private void desenharPétala() {
  for(int i = 0; i<89; i++ ){
   fulano.
   frente(1).
   fixarDireção(1 + fulano.obterDireção());
  }
  fulano.fixarDireção(90 + fulano.obterDireção());
  for(int i = 0; i<89; i++ ){
   fulano.
   frente(1).
   fixarDireção(1 + fulano.obterDireção());
  }
 }

}

A primeira fatoração apenas nos faz visualizar qual parte do código pertence realmente ao desenho da pétala, segunda fatoração:

import edugraf.jadix.ApliqueJadixComPichador;
import edugraf.pichador.IPichador;

public class Aplique extends ApliqueJadixComPichador {

 IPichador fulano;
 @Override
 public void iniciar() {
  fulano = this.criarPichador();

  desenharPétala();

 }
 
 private void desenharPétala() {
  desenharUmaBordaDaPétala();
  girarNoventaGrausRelativosParaDesenharAOutraBorda();
  desenharUmaBordaDaPétala();
 }

 private void girarNoventaGrausRelativosParaDesenharAOutraBorda() {
  fulano.fixarDireção(90 + fulano.obterDireção());
 }

 private void desenharUmaBordaDaPétala() {
  for(int i = 0; i<89; i++ ){
   fulano.
   frente(1).
   fixarDireção(1 + fulano.obterDireção());
  }
 }

}

Dentro de desenharPétala(), encontramos repetição de código, que identificamos como a parte que desenha a borda da pétala e um outro comando que fixa a direção em 90 graus relativos a direção atual, a qual também extraimos um método. Última fatoração abaixo:

import edugraf.jadix.ApliqueJadixComPichador;
import edugraf.pichador.IPichador;

public class Aplique extends ApliqueJadixComPichador {

 private static final int INCLINAÇÃO_RELATIVA_ENTRE_PONTOS = 1;
 private static final int ANGULO_RETO = 90;
 IPichador fulano;
 @Override
 public void iniciar() {
  fulano = this.criarPichador();

  desenharPétala();

 }
 
 private void desenharPétala() {
  desenharUmaBordaDaPétala();
  girarNoventaGrausRelativosParaDesenharAOutraBorda();
  desenharUmaBordaDaPétala();
 }

 private void girarNoventaGrausRelativosParaDesenharAOutraBorda() {
  fulano.fixarDireção(ANGULO_RETO + fulano.obterDireção());
 }

 private void desenharUmaBordaDaPétala() {
  for(int i = 0; i<89; i++ ){
   fulano.
   frente(1).
   fixarDireção(INCLINAÇÃO_RELATIVA_ENTRE_PONTOS + fulano.obterDireção());
  }
 }

}

A última fatoração, refere-se as constantes por uma quesão de legibilidade identifica-se as constantes com 90 e 1 com nomes comunicativos. Agora pense um pouco, por que fizemos isso tudo? Uma bom motivo é que você está exercitando a programação em linguagem Java, um segundo, você está aprendendo a criar métodos em Java, é programar não é muito diferente de criar entidades que realizam ações, e dar nomes ã aquelas ações como fizemos acima. Terceiro, você esta melhorando seu código, deixando ele mais facil de entender por uma pessoa que não seja você. Leia a tabela FedoresEFatores para entender melhor smile

Terceiro exemplo de uso do ApliqueJadixComPichador?:
Os comandos que foram definidos acima podem tornar-se parte de um grupo maior de comandos, assim como definimos o comando (método) “ desenharPétala ”, podemos definir, o " desenharFlor " que pertence a um grupo maior, utilizando-se do método desenharPétala. Esse é o processo chamado de assimilação que corresponde à ação do sujeito sobre o objeto, através da qual o sujeito o transforma pela incorporação de elementos do objeto às suas estruturas, existentes ou em formação. Observamos que esta é uma maneira de se definir uma flor, no entanto pode-se defini-la de várias maneiras, bastando para tanto usar a imaginação. Um exemplo de código para desenharFlor segue abaixo:

import edugraf.jadix.ApliqueJadixComPichador;
import edugraf.pichador.IPichador;

public class Aplique extends ApliqueJadixComPichador {

 private static final int ANGULO_ENTRE_PÉTALAS = 40;
 private static final int INCLINAÇÃO_RELATIVA_ENTRE_PONTOS = 1;
 private static final int ANGULO_RETO = 90;
 IPichador fulano;
 @Override
 public void iniciar() {
  fulano = this.criarPichador();
  desenharFlor();
 }

 private void desenharFlor() {
  for(int j = 0; j < 7; j++){
   desenharPétala();
  }
 }

 private void desenharPétala() {
  desenharUmaBordaDaPétala();
  girarNoventaGrausRelativosParaDesenharAOutraBorda();
  desenharUmaBordaDaPétala();
 }

 private void girarNoventaGrausRelativosParaDesenharAOutraBorda() {
  fulano.fixarDireção(ANGULO_RETO + fulano.obterDireção());
 }

 private void desenharUmaBordaDaPétala() {
  for(int i = 0; i<89; i++ ){
   fulano.
   frente(1).
   fixarDireção(INCLINAÇÃO_RELATIVA_ENTRE_PONTOS + fulano.obterDireção());
  }
 }

}

[ Veja aqui o Aplique acima funcionando]

Gostou de aprender a programar assim? Que tal olhar mais alguns exemplos de ApliqueJadixComPichador? e os ApliqueJadix? em que faremos o uso de componentesDix e tratamento de eventos Dix <-> Jadix, com os métodos seDito() e dizer()? (Não se preocupe que ComponentesDix? e Tratamento de Eventos são abordados em UtilizandoJadixComComponentes e IntroducaoAEventosJadix). Explore os exemplos na última versão do Dix (OndeBaixar). Mas temos algo mais a propor, existem Applets Java com propósito de ensino de conceitos de física ( link), se você não aprendeu bem no ensino médio, é sempre bom relembrar, se aprendeu, que tal praticar programação com eles? Então mãos a obra e implemente-os em Aplique Jadix com páginas Dix. Não gosta de Física? Procure Applets Java e tente fazê-las em Jadix, verá como é muito mais fácil, com um código bem melhor, e é muito poderoso. Bom divertimento!:-)

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r1 | More topic actions
 
Powered by TWiki
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback