Autor Tópico: Aula 3  (Lida 2850 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Aula 3
« Online: Março 04, 2019, 05:37:50 pm »
Exercício 1
Citar
Construa duas classes: Pessoa e Carro.
Coloque todos os atributos e métodos que você vislumbrar nestas classes.

Neste exercício ainda não fomos apresentados ao conceito de encapsulamento então eu não usei nenhum modificador de acesso.

Código: Java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
public class Exercicio1 { /* O enunciado é vago e acaba dando mais trabalho que algo específico * O que colocar aqui? Propriedades físicas apenas? atributos como religião, profissão, etc? * ou propriedades provocadas por doenças crônicas como cardíaco, asmático, epilético, hipertenso e diabético? * Cadeirante? requer correção visual?* E os medos? claustrofóbico, agorafóbico, acrofóbico, etc?* Eu vou colocar apenas algumas como exercício, porque quanto mais eu penso mais propriedades possíveis aparecem        * * Além disso, eu não consigo imaginar um "método" para "pessoa". Talvez se fosse "androide"...*/public class Pessoa {                String nome;        String sexo; //biologicamente só existem dois, mas usar "true" e "false" aqui gera um polêmica desnecessária        String identidadeSexual; //Melhor criar outras propriedades do que bagunçar sexo        String prefSexual; //O Tinder tem algo assim mas chama de "interesse em"        short idade;        String TipoSanguineo;        //temperatura e pressão são itens tão facilmente mensuráveis que realmente podem constar em alguns cadastros médicos (urgência em hospitais);        short temperatura;        short pressao;        boolean cadeirante;        String corOlhos;        String corPele;        String corCabelos;        float peso;        float altura;        String estadoCivil;        String profissao;        String escolaridade;        String religiao; //relevante em um cadastro militar (como será enterrado?)        String tatuagens; //relevante em um cadstro policial} //Algumas propriedades de um carro só são importantes do ponto de vista comercial/legal. //Outras só são importantes do ponto de vista da automação//Não consigo pensar em nenhum método que não seja de automação public class Carro {                String fabricante;        String modelo;        String placa;        String codRenavam;        short ano;        String cor;        byte numPortas;        boolean arCond;        boolean travasElet;        boolean vidrosElet;        boolean transmissao;        String tipoCombustivel; //alcool, gasolina, eletrico, hibrido...                //estes atributos precisam ser definidos como private        //mas não chegamos a essa parte da aula ainda        short velocidade;        short RPM;        short tempMotor;        short tempInterna;        short combustivelRestante;        short posicaoChave;        boolean statusAlternador;        boolean statusLubrificante;        boolean statusFreioMao;        boolean statusFreio;                short getVelocidade () {return velocidade;};        short getRPM () {return RPM;};        short getTempMotor () {return tempMotor;};        short getTempInterna () {return tempInterna;};        short getCombustivelRestante () {return combustivelRestante;};          boolean getStatusAlternador () {return statusAlternador;};        boolean getStatusLubrificante () {return statusLubrificante;};        boolean getStatusFreioMaio () {return statusFreioMao;};        boolean getStatusFreio () {return statusFreio;};        short getPosicaoChave() {return posicaoChave;}; //0=desligado, 1=ligado, 2=partida                void acelerar (int valor) {}; //valores negativos implicam frenagem        void frear () {}; //imediatamente        void abrirPorta (byte numPorta) {};        void acionarTravas (boolean locked) {}; //estou supondo que todas as travas sejam automaticamente ativadas ou desativadas ao memso tempo                void engrenarMarcha (byte numMarcha) {};                        void ligarLimpador (byte numLimpador, byte velLimpador) {};//velLimpador=0 desliga o limpador        void ligarFarois (byte numFarol, byte intensidade) {};//0=desligado        void ligarLuzAlta (boolean x) {};               void ligarLanterna (byte numLanterna) {};               void ligarDesembacador (byte numDesembacador) {};                       void ligarArCondicionado (byte intensidade) {}; //0=desligado        void ligarAlerta (boolean x){};        void acionarBuzina (boolean x){};        void LigarAlarme (boolean x){};        void AcionarVidroElet (byte numVidro, boolean subir){}; //subir=false desce     }} 

Versão menos elaborada:

Código: Java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
public class Exercicio1 { //O que colocar aqui? Propriedades físicas apenas? //Ou atributos como religião, profissão, etc //Eu não consigo imaginar um "método" para "pessoa". Ficaria mais simples se fosse "androide". public class Pessoa {                String nome;        boolean sexo; //biologicamente só existem dois        String identidadeSexual; //Melhor criar outras propriedades do que bagunçar sexo        String prefSexual; //Melhor criar outras propriedades do que bagunçar sexo        short idade;        String corOlhos;        String corPele;        String corCabelos;        float peso;        float altura;        String estadoCivil;        String profissao;        String escolaridade;        String religiao;} //Algumas propriedades de um carro só são importantes do ponto de vista comercial/legal. //Outras só são importantes do ponto de vista da automação//Não consigo pensar em nenhum método que não seja de automação public class Carro {                String modelo;        String placa;        String codRenavam;        short ano;        String cor;        byte numPortas;        boolean arCond;        boolean travasElet;        boolean vidrosElet;        boolean transmissao;        String combustivel; //alcool, gasolina, eletrico, hibrido...                void acelerar (int valor) {}; //valores negativos implicam frenagem        void frear () {}; //imediatamente        void abrirPorta (byte numPorta) {};        void acionarTravas (boolean locked) {}; //estou supondo que todas as travas sejam automaticamente ativadas ou desativadas ao memso tempo                void engrenarMarcha (byte numMarcha) {};                int getVelocidade () {};        int getRPM () {};        int getTempMotor () {};        int getTempInterna () {};        int getCombustivelRestante () {};               boolean getStatusAlternador () {};        boolean getStatusLubrificante () {};        boolean getStatusFreioMaio () {};        boolean getStatusFreio () {};         int getPosicaoChave() {}; //0=desligado, 1=ligado, 2=partida        void ligarLimpador (byte numLimpador, byte velLimpador) {};//velLimpador=0 desliga o limpador        void ligarFarois (byte numFarol, byte intensidade) {};//0=desligado        void ligarLuzAlta (boolean x) {};               void ligarLanterna (byte numLanterna) {};               void ligarDesembacador (byte numDesembacador) {};                       void ligarArCondicionado (byte intensidade) {}; //0=desligado        void ligarAlerta (boolean x){};        void acionarBuzina (boolean x){};        void LigarAlarme (boolean x){};        void AcionarVidroElet (byte numVidro, boolean subir){}; //subir=false desce     }} 
« Última modificação: Março 05, 2019, 05:44:59 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 3
« Responder #1 Online: Março 05, 2019, 01:34:33 am »
Exercício 2

Citar
Crie construtores personalizados para as classes Pessoa e Carro que você criou anteriormente.

Eu faltei dois dias e não sei se o professor apresentou a keyword this, mas eu usei assim mesmo porque não queria criar nomes diferentes para os argumentos.

Código: Java
123456789101112131415161718192021222324252627282930313233343536373839404142
    Pessoa(                String nome,                String sexo,                 String identidadeSexual,                 String prefSexual,                 short idade,                String tipoSanguineo,                short temperatura,                short pressao,                boolean cadeirante,                String corOlhos,                String corPele,                String corCabelos,                float peso,                float altura,                String estadoCivil,                String profissao,                String escolaridade,                String religiao,                String tatuagens                ){            this.nome=nome;            this.sexo=sexo;             this.identidadeSexual=identidadeSexual;            this.prefSexual=prefSexual;             this.tipoSanguineo=tipoSanguineo;            this.idade=idade;            this.temperatura=temperatura;            this.pressao=pressao;            this.corOlhos=corOlhos;            this.corPele=corPele;            this.corCabelos=corCabelos;            this.peso=peso;            this.altura=altura;            this.estadoCivil=estadoCivil;            this.profissao=profissao;            this.escolaridade=escolaridade;            this.religiao=religiao;            this.tatuagens=tatuagens;                } 

Código: Java
1234567891011121314151617181920212223242526272829303132333435363738
     Carro(            String fabricante,            String modelo,            String placa,            String codRenavam,            String cor,            String tipoCombustivel, //alcool, gasolina, eletrico, hibrido...            short ano,            byte numPortas,            boolean arCond,            boolean travasElet,            boolean vidrosElet,            boolean transmissao            ){            this.modelo=modelo;            this.placa=placa;            this.codRenavam=codRenavam;            this.ano=ano;            this.cor=cor;            this.numPortas=numPortas;            this.arCond=arCond;            this.travasElet=travasElet;            this.vidrosElet=vidrosElet;            this.transmissao=transmissao;            this.tipoCombustivel=tipoCombustivel;                             velocidade=0;                RPM=0;                tempMotor=0;                tempInterna=0;                combustivelRestante=0;                posicaoChave=0;                statusAlternador=false;                statusLubrificante=false;                statusFreioMao=false;                statusFreio=false;    } 
« Última modificação: Março 05, 2019, 06:14:34 pm por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

FORUM.RYAN.COM.BR

Re:Aula 3
« Responder #1 Online: Março 05, 2019, 01:34:33 am »

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 3
« Responder #2 Online: Março 05, 2019, 02:34:49 am »
Exercício 3

Citar
Crie uma classe Ponto, com a capacidade de armazenar a localização de ponto no plano cartesiano, de modo que ela possua três construtores:
  • Sem parâmetros, que cria um ponto nas coordenadas (0,0)
  • Dois parâmetros de coordenadas X e Y
  • Inicializa o ponto através das coordenadas de um outro ponto recebido como parâmetro.

Código: Java
123456789101112131415161718192021
         public class Ponto {                public short x;                public short y;                                Ponto(){                        x=0;                        y=0;                                    }                                Ponto(short x, short y){                        this.x=x;                        this.y=y;                                       }                Ponto(Ponto a){                        x=a.x;                        y=a.y;                                  }                       }  
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 3
« Responder #3 Online: Março 05, 2019, 02:50:10 am »
Exercício 4

Citar
Implemente uma classe Pessoa que possua como atributos nome, idade, peso (em quilogramas) e altura (em metros). Faça com que os dados sejam inicializados através do construtor da classe. Adicione métodos para ler e alterar cada um dos atributos em separado, mantendo o encapsulamento.
Atenção: Validar os dados (idade, peso e altura positivos, etc).

Não consegui pensar em nenhuma validação além da sugerida no enunciado. Qual seriam o peso, altura e idade mínimos? Estamos falando de  adultos ou recém-nascidos? Na maioria dos lugares onde peso e altura são relevantes em um cadastro não faz sentido impor restrições extras sem conhecer mais requisitos impostos aos cadastrados. Devido a possibilidade de recém nascidos eu escolhi um tipo de dados suficiente para definir a idade em meses (short) porque byte só acomodaria 127 meses ou pouco mais de dez anos.

E quanto ao nome? Como eu valido? O enunciado não menciona "nome completo" ou "nome e sobrenome", mas mesmo que mencionasse poderia ser mais útil colocar o sobrenome em uma propriedade diferente. 

Na falta de um objetivo claro eu limitei as regras de validação ao mínimo.

Código: Java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
 public class Pessoa {                private String nome;        private short idade;        private float peso;        private float altura;         public Pessoa(                        String nome,                        short idade,                        float peso,                        float altura                        ) {                this.nome=nome;                if (peso>0) this.peso=peso; else this.peso=0;                if (altura>0) this.altura=altura; else this.altura=0;                if (idade>0) this.idade=idade; else this.idade=0;        };                public float getIdade(){                return idade;        };                public void setIdade(short x){                if (x>0) idade=x;        };                      public float getAltura(){                return altura;        };                public void setAltura(float x){                if (x>0) altura=x;        };                public float getPeso(){                return peso;        };                public void setPeso(float x){                if (x>0) peso=x;        };                      public String getNome(){                return nome;        };                public void setNome(String x){                nome=x;        };       } 
« Última modificação: Março 13, 2019, 02:59:26 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 3
« Responder #4 Online: Março 05, 2019, 08:31:37 pm »
Exercício 5
Citar
Crie a classe Carro e adicione a estes os seus principais atributos e métodos.
Lembre-se de adicionar métodos para ligar, desligar, acelerar e frear.
Atenção: Este objeto deve ter métodos para mostrar quando o mesmo está ligado ou desligado, isto também pode ser feito na própria ação de ligar e desligar.
Código: Java
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
 /* Eu usei o exercício 1 como modelo, retirando o que não tinha a ver com automação *  para melhorar a clareza   Ter em mente que aceleração e velocidade são propriedades distintas na vida real   Você pode estar imprimindo máxima aceleração ao veículo e a velocidade ser zero    ou estar tentando desacelerar e ainda assim a velocidade estar subindo*/ public class Carro {         public static final byte MAX_ACEL = 100;        private short velocidade;        private short RPM;        private short tempMotor;        private short tempInterna;        private short combustivelRestante;        private short posicaoChave;        private boolean statusAlternador;        private boolean statusLubrificante;        private boolean statusFreioMao;        private boolean statusFreio;        private boolean statusMotor; //false=desligado        private int aceleracao; //Poderia ser byte mas o compilador exige que seja int por causa das operações de soma            Carro(            ){                velocidade=0;                RPM=0;                tempMotor=0;                tempInterna=0;                combustivelRestante=0;                posicaoChave=0;                statusAlternador=false;                statusLubrificante=false;                statusFreioMao=false;                statusFreio=false;    }            boolean getStatusMotor () {                return statusMotor;        };                 boolean ligarMotor (boolean x) {                //Na maioria dos casos vai requerer mais código para efetivamente ligar/desligar o motor                //E a tentativa de ligar pode falhar, o que irá mudar o valor de x                  statusMotor=x;                return x;        }        /*"Relativa" porque no argumento eu só passo o valor que deve ser somado/subtraído          * da aceleração corrente        */        void aceleracaoRelativa (byte x) { //valores negativos implicam frenagem                if (statusMotor=false) return;                 if ((aceleracao+x)>MAX_ACEL) {                        aceleracao=MAX_ACEL;                }                else {                        if (aceleracao+x<0) {                                aceleracao=0;                        }                         else                        aceleracao=aceleracao+x;                }        };         void frear () { //imediatamente                //requer mais código para efetivamente parar o veículo                aceleracao=0;        };                    short getVelocidade () {return velocidade;};        short getRPM () {return RPM;};        short getTempMotor () {return tempMotor;};        short getTempInterna () {return tempInterna;};        short getCombustivelRestante () {return combustivelRestante;};          boolean getStatusAlternador () {return statusAlternador;};        boolean getStatusLubrificante () {return statusLubrificante;};        boolean getStatusFreioMaio () {return statusFreioMao;};        boolean getStatusFreio () {return statusFreio;};        short getPosicaoChave() {return posicaoChave;}; //0=desligado, 1=ligado, 2=partida                 void abrirPorta (byte numPorta) {};        void acionarTravas (boolean locked) {}; //estou supondo que todas as travas sejam automaticamente ativadas ou desativadas ao memso tempo                void engrenarMarcha (byte numMarcha) {};                        void ligarLimpador (byte numLimpador, byte velLimpador) {};//velLimpador=0 desliga o limpador        void ligarFarois (byte numFarol, byte intensidade) {};//0=desligado        void ligarLuzAlta (boolean x) {};               void ligarLanterna (byte numLanterna) {};               void ligarDesembacador (byte numDesembacador) {};                       void ligarArCondicionado (byte intensidade) {}; //0=desligado        void ligarAlerta (boolean x){};        void acionarBuzina (boolean x){};        void LigarAlarme (boolean x){};        void AcionarVidroElet (byte numVidro, boolean subir){}; //subir=false desce     } 
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re:Aula 3
« Responder #5 Online: Março 06, 2019, 07:15:01 am »
Exercício 6

Citar
Altere a classe Pessoa para que o objeto possua um Carro. Faça com que a pessoa consiga ligar, desligar, acelerar ou frear o próprio carro.
Atenção: Lembre-se de manter as regras de encapsulamento

Neste exercício eu uni o resultado dos exercícios 4 e 5, removi o que não era essencial na classe pessoa para melhorar a clareza e acrescentei o que foi pedido.



Código: Java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
import java.util.Scanner;public class Exercício6 {        public static class Carro {                 private static final byte MAX_ACEL = 100;                private short velocidade;                private short RPM;                private short tempMotor;                private short tempInterna;                private short combustivelRestante;                private short posicaoChave;                private boolean statusAlternador;                private boolean statusLubrificante;                private boolean statusFreioMao;                private boolean statusFreio;                private boolean statusMotor; //false=desligado                private int aceleracao; //Poderia ser byte mas o compilador exige que seja int por causa das operações de soma                            Carro(                    ){                        velocidade=0;                        RPM=0;                        tempMotor=0;                        tempInterna=0;                        combustivelRestante=0;                        posicaoChave=0;                        statusAlternador=false;                        statusLubrificante=false;                        statusFreioMao=false;                        statusFreio=false;            }                            boolean getStatusMotor () {                        return statusMotor;                };                                 boolean ligarMotor (boolean x) {                        //Na maioria dos casos vai requerer mais código para efetivamente ligar/desligar o motor                        //E a tentativa de ligar pode falhar, o que irá mudar o valor de x                          statusMotor=x;                        return x;                }                /*"Relativa" porque no argumento eu só passo o valor que deve ser somado/subtraído                  * da aceleração corrente                */                void aceleracaoRelativa (int x) { //valores negativos implicam frenagem                        if (statusMotor==false) return;                         if ((aceleracao+x)>MAX_ACEL) {                                aceleracao=MAX_ACEL;                        }                        else {                                if (aceleracao+x<0) {                                        aceleracao=0;                                }                                 else                                aceleracao=aceleracao+x;                        }                };                 void frear () { //imediatamente                        //requer mais código para efetivamente parar o veículo                        aceleracao=0;                };                                    short getVelocidade () {return velocidade;};                short getRPM () {return RPM;};                short getTempMotor () {return tempMotor;};                short getTempInterna () {return tempInterna;};                short getCombustivelRestante () {return combustivelRestante;};                  boolean getStatusAlternador () {return statusAlternador;};                boolean getStatusLubrificante () {return statusLubrificante;};                boolean getStatusFreioMaio () {return statusFreioMao;};                boolean getStatusFreio () {return statusFreio;};                short getPosicaoChave() {return posicaoChave;}; //0=desligado, 1=ligado, 2=partida                                 void abrirPorta (byte numPorta) {};                void acionarTravas (boolean locked) {}; //estou supondo que todas as travas sejam automaticamente ativadas ou desativadas ao memso tempo                        void engrenarMarcha (byte numMarcha) {};                                void ligarLimpador (byte numLimpador, byte velLimpador) {};//velLimpador=0 desliga o limpador                void ligarFarois (byte numFarol, byte intensidade) {};//0=desligado                void ligarLuzAlta (boolean x) {};                       void ligarLanterna (byte numLanterna) {};                       void ligarDesembacador (byte numDesembacador) {};                               void ligarArCondicionado (byte intensidade) {}; //0=desligado                void ligarAlerta (boolean x){};                void acionarBuzina (boolean x){};                void LigarAlarme (boolean x){};                void AcionarVidroElet (byte numVidro, boolean subir){}; //subir=false desce             }        public static class Pessoa {                    private Carro car;        private String nome;                public Pessoa() {                nome="";                 car=new Carro();        };           } public static void main(String args[]) { Pessoa person = new Pessoa();           int opcao;        Scanner op = new Scanner(System.in);        System.out.println("Digite a opcao desejada: ");        System.out.println("1 para ligar o motor");        System.out.println("2 para desligar o motor");        System.out.println("3 para acelerar");        System.out.println("4 para desacelerar");               System.out.println("0 para abortar...");        do{         opcao = op.nextInt();        switch(opcao){        case 0:                                 System.out.println("Abortado pelo usuário.");                break;        case 1:                person.car.ligarMotor(true);                System.out.println("Motor ligado");                break;        case 2:                person.car.ligarMotor(false);                System.out.println("Motor desligado");                          break;        case 3:                if (person.car.getStatusMotor()==true) {        person.car.aceleracaoRelativa(10);                System.out.println(person.car.aceleracao);                }else System.out.println("Não pode mudar aceleração com motor desligado.");                break;        case 4:                if (person.car.getStatusMotor()==true) {                person.car.aceleracaoRelativa(-10);                        System.out.println(person.car.aceleracao);                        }else System.out.println("Não pode mudar aceleração com motor desligado.");                break;                  default:                System.out.println("Opcao invalida !!!");        }        }while(opcao != 0);        System.out.println("Programa encerrado.");        op.close();}} 

Este foi o único exercício realmente complicado para mim. Eu tive dois problemas mas somente o segundo me deixou perdido olhando para o código sem saber o que fazer.

1o Problema:

Ao tentar criar uma instância do objeto carro

Citar
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
   No enclosing instance of type Exercício6 is accessible. Must qualify the allocation with an enclosing instance of type Exercício6

(e.g. x.new A() where x is an instance of Exercício6).

   at Exercício6$Pessoa.<init>(Exercício6.java:20)
   at Exercício6.main(Exercício6.java:27)

O problema desapareceu ao declarar aa classes carro e pessoa como static

2o Problema:

Uma java.lang.NullPointerException sempre que eu tentava usar o objeto carro como propriedade do objeto pessoa.

O código a seguir mostra o problema:

Código: Java
1234567891011121314151617181920212223242526
public class Exercício6 {        public static class Carro {                public String nome;            Carro(){                nome="";            }        }        public static class Pessoa {        public Carro car;         public Pessoa() {                Carro car=new Carro();         };  } public static void main(String args[]) { Pessoa person = new Pessoa();   person.car.nome="teste";  System.out.println(person.car.nome); } }  

A causa está na linha
Carro car=new Carro();
e foi resolvido ao mudar para:
car=new Carro();
« Última modificação: Março 06, 2019, 07:28:03 am por Jefferson »
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

FORUM.RYAN.COM.BR

Re:Aula 3
« Responder #5 Online: Março 06, 2019, 07:15:01 am »