6
respostas

Criação de Objetos Java dentro de uma Unica Classe Java, o que ocorre na Classe Principal ?

Boa Noite, Pessoal ?

Estou analisando um codigo Java segue abaixo:

A minha pergunta é bem basica mas esta me causando uma duvida, na classe Programa eu criei um Objeto Conta, exemplo Conta mauricio=new Conta(); , depois eu estou criando um outro objeto Pessoa ? -----> mauricio.titular=new Pessoa(), *isto é a referencia mais Objeto de uma mesma classe; * *estão na mesma Heap *, é isso ?

class Programa{

    public static void main(String[] args){
        Conta mauricio = new Conta(); //Objeto
        mauricio.numero=123;

        mauricio.titular = new Pessoa(); // Objeto e Referencia ?
        mauricio.titular.nome = "Mauricio Aniche";


        Conta guilherme=new Conta(); // Objeto 
        guilherme.numero=456;
        guilherme.saldo=1200;


    }
}
6 respostas

Conta mauricio = new Conta() ==> mauricio é um referencia do tipo Conta que recebe o objeto new Conta().

mauricio.titular ==> é uma referencia do tipo Pessoa que recebe o objeto new Pessoa()

Conta guilherme = new Conta() ==> guilherme é uma referencia do tipo Conta que recebe um objeto new Conta()

Boa Noite , Rogerio !!!

Obrigado por responder , se eu usar a classe Conta e embutir nela a classe Pessoa , não posso ter a referencia que não seja mauricio.titular , poderia ter outra referencia a objeto new Pessoa().

Por exemplo , segue o codigo:

class Conta{  // Objeto
    Pessoa titular; ===========> Isso é uma atribuição fixa , com a caracteristica da classe Conta ?
    int numero;

    double saldo;
    int agencia;

    }

class Pessoa{ // Objeto
    String nome;
    String cpf;
    String dataNascimento;
}

class Programa{ // Objeto

    public static void main(String[] args){
        Conta mauricio = new Conta();
        mauricio.numero=123;

        marcio.titular = new Pessoa(); // ======> Porque isso não funciona, com outro nome, exemplo marcio.titular ?
        marcio.titular.nome = "Marcio Duran";

    }
}

Então não posso ter outra referência que não seja outro nome de referencia pra o objeto pessoa ? exemplo marcio.titular=new Pessoa(); ao inves de mauricio.titular=new Pessoa() , na minha opinião isso deveria ser mais genérico quanto a pessoas.

Esse é a duvida, ;)

Boa noite, Márcio. No caso você iria criar uma outra classe... Assim, para você entender ( no caso acredito que os exemplos de aula foram de Banco - conta, titular e agência( eu fiz também). Então imagina, tem o Marcio e o Maurício, são 2 pessoas diferentes, e a chamada deles é importante antes que você crie a classe deles. Tenho até como de dizer em criar 3 classes de cachorro: poodle, Husky e Doberman. cada objeto seriam o que eles fazem: sentam, latem e dormem. Para você super entender Orientado a objetos - é entender que é possível criar o que você quiser, e a classe principal ela irá orientar cada objeto criado da forma que a sua lógica for infinita. Dá uma olhada aqui - Orientado a Objetos - Mas antes, peço que pegue um caderno e caneta para fazer anotações e chegar na figura 6.

Qualquer dúvida, só chamar. Explico até você compreender. Abraços!!!

Um café, um pão de queijo e uma rede

Excelsior!

Boa Tarde , Jessica !!!

Ficou claro a observação do Rogerio Molina:

mauricio.titular ==> é uma referencia do tipo Pessoa que recebe o objeto new Pessoa()

Entretanto , só acho que isso foi um erro de generalização do objeto, porque Pessoa poderia ser qualquer um.

Então o codigo abaixo deveria ser Conta Cliente= new Conta() , assim teriamos o Objeto Pessoa ser qualquer um , essa é a minha observação.

Conta mauricio = new Conta() ==> mauricio é um referencia do tipo Conta que recebe o objeto new Conta().

deveria ser , assim pessoa seria qualquer um , tanto Guilherme como Mauricio , não sei se esta me entendo ? Veja o Codigo abaixo

Conta Cliente = new Conta() ==> Cliente é um referencia do tipo Conta que recebe o objeto new Conta().

Obrigado por responder ;)

Oi Marcio,

Não sei se entendi bem sua dúvida. Mas a primeira coisa que vc deve separar é a definição das suas classes (o que você vê no código fonte) do que acontece quando vc roda o programa (e aí, o que fica na memória e etc).

Quando vc define uma classe, por exemplo Conta:

class Conta {
  Pessoa pessoa;
  int numero;
 // ...
}

Vc está definindo uma "receita de bolo". Todas as contas terão um número (que é um inteiro) e uma pessoa, que é do tipo "Pessoa".

Quando vc faz

Conta c = new Conta();

Vc está falando pro Java "fazer um bolo", ou seja, criar uma Conta. Nesse momento, o Java cria essa conta e guarda ela na memória.

Só que uma Conta tem uma pessoa, e vc precisa criar essa pessoa também. Você pode fazer, por exemplo:

Pessoa p = new Pessoa();
c.pessoa = p;

Ou seja, "fizemos outro bolo", dessa vez uma pessoa. E guardamos ela em "p" e também dentro de "c.pessoa".

Nesse momento, temos dois objetos na memória, a Conta c e a Pessoa p. Note que c.pessoa e Pessoa p apontam pro mesmo "bolo".

Entendeu?

Mauricio , Obrigado por responder !!!

Vamos a minha duvidas, o que você colocou sobre Orientação a Objetos eu entendi, o que acho como deveria ser o programa, foi que conclui de outro modo, então refatorei o codigo , segue o meu ponto de vista:

class Conta{
    Pessoa titular;
    int numero;

    double saldo;
    int agencia;

    void deposita(double valorASerDepositado){
        this.saldo +=valorASerDepositado;
    }

    void saca(double valorASerSacado){
        if(this.saldo >=valorASerSacado){
            this.saldo-=valorASerSacado;
        }
    }

    void transfere(double valor, Conta valorTransferido){
        this.saldo-=valor;
        valorTransferido.saldo +=valor;
    }
}
class Pessoa{
    String nome;
    String cpf;
    String dataNascimento;
}

class Banco{

    public static void main(String[] args){
        Conta contaCorrente1 = new Conta();
        contaCorrente1.numero=123;
        contaCorrente1.saldo=800.0;
        contaCorrente1.agencia=842;

        contaCorrente1.titular = new Pessoa();
        contaCorrente1.titular.nome = "Mauricio Aniche";
        contaCorrente1.titular.cpf ="123456789";
        contaCorrente1.titular.dataNascimento = "10/10/1975";

        System.out.println(contaCorrente1.titular.nome);

        contaCorrente1.deposita(100.0);
        contaCorrente1.saca(5000.0);

        Conta contaCorrente2=new Conta();
        contaCorrente2.numero=456;
        contaCorrente2.saldo=1200;

        contaCorrente2.titular = new Pessoa();

        contaCorrente2.titular.nome = "Guilherme Silveira";

        System.out.println(contaCorrente2.titular.nome);


        contaCorrente2.deposita(100.0);

        contaCorrente1.transfere(100, contaCorrente2);

        System.out.println(contaCorrente1.saldo);
        System.out.println(contaCorrente2.saldo);
    }
}

Bom , se tiver observações a fazer , o programa já compila e executa normalmente.

Abraçoss !!! ;)