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?

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
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!:-)