[Ajuda] Instanciando as classes na Main [RESOLVIDO]

Olá pessoal, tenho uma duvida com relação a instanciar as classes na Main pra fazer a chamada e apresentação de todo o meu projeto. A minha situação é a seguinte, tenho varias classes contendo Heranças e Composições e tenho que apresentar todos esses dados quando for criar um novo objeto (no caso Classe X = new Classe ( atributos e etc); ). Minha duvida é sob como declarar da melhor forma. Meu professor fez assim

modelo_interface_3.pdf (138,5 KB)

Funcionario funcionario = new Funcionario(“010000”, “Marcos”, new Endereco(“Azevedo Menezes”, 29), 1234, 450);

Tecnico tecnico = new Tecnico(“010001”, “José”, new Endereco(“Antonio Menezes”, 45), 3216, 950, new Equipamento(“Electrolux”, “Digital”));

aqui ele esta colocando os atributos das composições tudo dentro do mesmo New (), se é que posso chamar assim. Mas minha ideia foi outra, como os exercícios dele são realmente grandes e as vezes desconexos (:slightly_frowning_face:) eu tenho a tendencia de separar tudo como fiz em outro exercício dele. Segue o exemplo.

public static void main(String[] args) {
//inicia a declaração
Retangulo retangulo1 = new Retangulo(“Retangulo”, 8, 12);
Quadrado sqrt1 = new Quadrado(“Quadrado”, 5);
Circulo circ1 = new Circulo(“Circulo”, 4);
AplicacaoPratica appratica1 = new AplicacaoPratica(“Desenvolvimento de Coisas Importantes”, circ1, sqrt1,retangulo1);
Matematica mat1 = new Matematica(“Geometria Espacial Dimensional I”, 9000, appratica1);

	System.out.println(mat1);

<

Dada as formas acima, gostaria de saber qual é a melhor maneira de fazer. E quais as grandes diferenças entre elas? Lembrando que a duvida é sobre a forma de fazer o exercício e boa praticas.

Sinceramente seu professor não é nada didático…

A forma que ele usa é mais prática para o dia a dia (e olhe lá em vários casos), se vc acha a necessidade em separar as coisas e juntando as peças do quebra-cabeça continue assim, na minha opinião ele deveria mostrar através do código a ligação de cada objeto por exemplo:

Endereco enderecoMarcos = new Endereco("Azevedo Menezes", 29);
Funcionario marcos = new Funcionario("010000", "Marcos", enderecoMarcos, 1234, 450);

Agora saindo um pouco da teoria, quando se faz new direto em outro objeto, vc está apenas alocando memória para aquele objeto (o new Endereco é só dele e de mais ninguém, outro objeto não terá acesso a ele), ou em casos que ele irá processar algo e “sumir” do código (não fazendo sentido mantê-lo instanciado se não será mais usado entende?), isso a grosso modo falando…

Quando se separa como estamos fazendo aqui, além de melhorar a leitura, vc pode usar o mesmo endereço para outro funcionario por exemplo:

Endereco enderecoEmpresa = new Endereco("Rua da empresa", 29);
Funcionario marcos = new Funcionario("010000", "Marcos", enderecoEmpresa, 1234, 450);
Funcionario jose = new Funcionario("020000", "Zezinho", enderecoEmpresa, 4321, 123);

Percebeu a diferença? Os dois funcionarios trabalham na mesma empresa, logo, não faz sentido usar dois objetos Endereco contendo os mesmos atributos mas ocupando dois espaços de memória, um só atende muito bem esse caso e os dois funcionarios tem acesso a ele…

Espero ter ajudado e bons estudos!

Sim sim, concordo plenamente rodevops! A leitura é infinitamente melhor! Eu monto o quebra cabeça pois a quantidade de classes e composições para instanciar são varias, alem de varias heranças. Obrigado pelo esclarecimento quanto a parte da alocação de memória, foi de grande ajuda e me deu até um arcabouço para questiona-lo com relação a ele pedir para fazer tudo dentro de um New só.

1 curtida

Obviamente meu ponto de vista foi bem “rustico” a respeito, vc precisa pesquisar melhor para ter embasamento ok? Bons estudos!

1 curtida

Sim sim… Vou olhar alguma coisa semelhante na Oracle e nos Livros do Deitel para embasar. Muito obrigado pela atenção ! o/

1 curtida

Outro exemplo de facil entendimento está no livro use a cabeça java, fala sobre o pool de objetos, se conseguir um exemplar é bem didático e com imagens :joy:

Eu particularmente evito de implementar tudo no método main, eu crio um método não-estatico e então, no método main simplesmente instancio minha classe e executo o método não-estático.
Isso facilita segregar o código em métodos não-estáticos menores caso houver muitos passos a serem executados.

Interessante, nao tinha pensado dessa forma, tem algum exemplo que eu poderia ler ?

public class GUJ{

    public static void main (String [] args){
        GUJ guj = new GUJ();
        guj.mostrarNomeMaria();
        guj.mostrarNomeJoao();
    }

    public void mostrarNomeMaria(){
       System.out.println("Meu nome é Maria");
    }

    public void mostrarNomeJoao(){
       System.out.println("Meu nome é João");
    }

}

Desculpe @staroski. Não queria tomar a sua palavra, se a minha resposta te deixou meio puto, eu não queria mesmo. (Não to sendo irônico kkkkk), Perdão mesmo.

public class Exemplo {

    public static void main(String[] args) {
        Exemplo programa = new Exemplo();
        programa.executar();
    }

    public void executar() {
        // aqui executo o que quiser, dentro de um método não estático
        fazAlgumaCoisa();
        fazOutraCoisa();
    }

    private void fazAlgumaCoisa() {
        // faz alguma coisa
    }

    private void fazOutraCoisa() {
        // faz outra coisa
    }
}

Desculpa pelo quê? Não há motivo pra eu ficar puto…

Tomei a sua resposta, sendo que a pergunta foi pra você.

Olá Abner e Staroski, refiz os exemplos dessa vez com uma nova perspectiva e foi muito mais esclarecedor. Obrigado pela atenção de todos e muito obrigado pelos Exemplos !