Ir ao conteúdo
  • Cadastre-se
Bruno Coviello

Java Conceitos Construtores Java & this.algo=algo;

Recommended Posts

Boa tarde a todos! Estou fazendo o curso ciência da computação e meu professor entende tudo mas explicar ele não explica legal e pede que a gente procure, mas tudo que ele dá não consigo achar algumas coisas de jeito nenhum na web.

impressora.png.618c34ae62015ac62771fb2694cbbc3a.png

 

Neste exercício que ele passou eu tenho uma dúvida na questão do código construtor como fazer 20 deles, e quanto ao uso 'this.marca=marca;' pode limitar em algo o código.

Vou deixar aqui o código inteiro que eu criei e se alguém tiver a ***** de uma boa vontade de me ajudar eu agradeço!!

O Main eu consigo entender direito mas só esses construtores que tão me deixando com uma dúvida mesmo!

Valeu a atenção. Paz!

package javaapplication13;

public class Impressora {
    String marca,modelo,tipo,resolucao;
    int numCartucho;
    double peso,comprimento,largura,profundidade;
    
    public Impressora(){
        
    }
    public Impressora(String marca, String modelo
    ,String tipo, String resolucao, int numCartucho
    ,double peso,double comprimento,double largura
    ,double profundidade){
        this.marca=marca;
        this.modelo=modelo;
        this.tipo=tipo;
        this.resolucao=resolucao;
        this.numCartucho=numCartucho;
        this.peso=peso;
        this.comprimento=comprimento;
        this.largura=largura;
        this.profundidade=profundidade;
    }
    /*
        Setters & Getters
    */
    //String.
    public void setMarca(String marca){
        this.marca=marca;
    }
    public String getMarca(){
        return marca;
    }
    public void setModelo(String modelo){
        this.modelo=modelo;
    }
    public String get (){
        return modelo;
    }
    public void setTipo(String tipo){
        this.tipo=tipo;
    }
    public String getTipo(){
        return tipo;
    }
    public void setResolucao(String resolucao){
        this.resolucao=resolucao;
    }
    public String getResolucao(){
        return resolucao;
    }
    //Int
    public void setNumCartucho(int numCartucho){
        this.numCartucho=numCartucho;
    }
    public int getNumCartucho(){
        return numCartucho;
    }
    //double.
    public void setPeso(double peso){
        this.peso=peso;
    }
    public double getPeso(){
        return peso;
    }
    public void setComprimento(double comprimento){
        this.comprimento=comprimento;
    }
    public double getComprimento(){
        return comprimento;
    }
    public void setLargura(double largura){
        this.largura=largura;
    }
    public double getLargura(){
        return largura;
    }
    public void setProfundidade(double profundidade){
        this.profundidade=profundidade;
    }
    public double getProfundidade(){
        return profundidade;
    }
    /*
    Cadastro.
    */
    public void cadastro(String marca, String modelo
    ,String tipo, String resolucao, int numCartucho
    ,double peso,double comprimento,double largura
    ,double profundidade){
        setMarca(marca);
        setModelo(modelo);
        setTipo(tipo);
        setResolucao(resolucao);
        setNumCartucho(numCartucho);
        setPeso(peso);
        setComprimento(comprimento);
        setLargura(largura);
        setProfundidade(profundidade);
    }
    /*
    Entrada dados.
    */
    public void entradaDados(){
        System.out.println("Entre com a marca: ");
        setMarca(marca);
        System.out.println("Entre com o tipo: ");
        setTipo(tipo);
        System.out.println("Entre com o modelo: ");
        setModelo(modelo);
        System.out.println("Entre com a resolução: ");
        setResolucao(resolucao);
        System.out.println("Entre com o número dos cartuchos: ");
        setNumCartucho(numCartucho);
        System.out.println("Entre com o peso: ");
        setPeso(peso);
        System.out.println("Entre com o comprimento: ");
        setComprimento(comprimento);
        System.out.println("Entre com a largura: ");
        setLargura(largura);
    }
    /*
    Imprimir.
    */
    public void imprimir(){
        System.out.println("Saída dos dados!");
        System.out.println("\nMarca: "+marca
                + "\nTipo: "+tipo
                + "\nModelo: "+modelo
                + "\nResolução: "+resolucao
                + "\nNúmero de cartuchos: "+numCartucho
                + "\nPeso: "+peso
                + "\nComprimento: "+comprimento
                + "\nLargura: "+largura);
    }
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Bruno Coviello Olá. Realmente muito boa sua pergunta e é importante entender bem a respeito do operador this e Construtores. Vou procurar explicar:

Se fizer isso:

public Impressora() {

}

Seria o construtor padrão;

Porém, quando você faz isso:

public Impressora(String marca, String modelo
                  ,String tipo, String resolucao, int numCartucho
                  ,double peso,double comprimento,double largura
                  ,double profundidade) {
    this.marca=marca;
    this.modelo=modelo;
    this.tipo=tipo;
    this.resolucao=resolucao;
    this.numCartucho=numCartucho;
    this.peso=peso;
    this.comprimento=comprimento;
    this.largura=largura;
    this.profundidade=profundidade;
}

Seria um construtor parametrizável.

Outras formas de criar um construtores:

public Impressora(String marca) {
    this.marca = marca;
}

public Impressora(String marca, String modelo) {
    this.marca = marca;
    this.modelo = modelo;
}

Sobre o operador this, ele é usado para referenciar um atributo da Classe

Na classe estão definidos os seguintes atributos:

String marca, modelo, tipo, resolucao;
int numCartucho;
double peso, comprimento, largura, profundidade;

Logo, quando eu quero me referenciar a um atributo da classe, seria isso:

// aqui estou me referindo a dois atributos da classe, por isso o operador this
this.marca // atributo da classe
this.modelo

Logo, nesse exemplo de construtor:

public Impressora(String marca) {
    this.marca = marca; // aqui " this.marca " está se referindo ao atributo da classe, enquanto que " marca " está se referindo ao parâmetro do construtor
}

Lembre sempre que o operador this é para se referenciar a um atributo da classe

Vê se deu para entender. 

Cara, é importante entender bem sobre construtores e o operador this. Logo, se ainda tem dúvidas pergunte!  :thumbsup:

adicionado 20 minutos depois

Obs: Também é importante frisar que toda classe em Java tem um construtor. 

Quando você não cria um, o Java cria um para você, q seria o construtor q não recebe parâmetros,  o construtor padrão.

Também é importante frisar que toda vez que você cria um novo objeto com o operador new, o construtor é chamado

Veja esse exemplo:

Impressora impressora = new Impressora(); // aqui o contrutor padrão é chamado (construtor q não recebe parâmetros)

E aí você criar o construtor padrão dessa forma:

public Impressora() {
   System.out.println("O Contrutor() for chamado!");
}

Ao executar o código a mensagem que coloquei no construtor vai ser impressa, provando assim que o construtor foi chamado! 

 

Outro ponto sobre Construtores:

Quando você cria um construtor com parâmetros, dessa forma:

public Impressora(String marca, String modelo) {
    this.marca = marca;   
    this.modelo = modelo; 
}

o Java já não vai mais criar um construtor padrão para você. Dessa forma você obriga a pessoa a fornecer valores ao criar um novo objeto.

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d Entedi! Valeu pela ajuda! Mas ainda tenho umas dúvidas, se você não se importa.

Qual seria a diferença entre: 

Citação

public Impressora(String marca, String modelo) {

this.marca = marca;

this.modelo = modelo;

}

//comparado com:

 

public Impressora(String a,String b){

marca=a;

modelo=b;

}

 

E os métodos construtores no caso:

19 minutos atrás, giu_d disse:

public Impressora(String marca, String modelo ,String tipo, String resolucao, int numCartucho ,double peso,double comprimento,double largura ,double profundidade) {

this.marca=marca;

this.modelo=modelo;

this.tipo=tipo;

this.resolucao=resolucao;

this.numCartucho=numCartucho;

this.peso=peso;

this.comprimento=comprimento;

this.largura=largura;

this.profundidade=profundidade;

}

Operam o quanto diferente dos Setters e Getters? - somente no retorno? e num escopo de um app ele serve de base para a criação da classe para o main?

Mais uma vez, obrigado!!!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Bruno Coviello Quanto a essa pergunta:

4 horas atrás, Bruno Coviello disse:

public Impressora(String marca, String modelo) {

this.marca = marca;

this.modelo = modelo;

}

//comparado com:

 

public Impressora(String a,String b){

marca=a;

modelo=b;

}

 

Você pode perfeitamente fazer isso! Só que nesse caso eu prefiro usar o operador this mesmo assim, até para deixar o código mais claro e fácil de entender. Inclusive já pude notar claramente q profissionais em códigos orientado a objetos, seja Java, C++, etc... fazem questão de definir o nome dos parâmetros como iguais aos atributos da classe, e, no construtor, diferenciar o atributo do parâmetro com o operador this. Logo, percebesse aqui q se trata de uma boa prática de programação! 

Por exemplo: Se alguém conhece Java e olhar para meu código, quando ele ver isso:

this.marca

ele vai saber que estou me referindo a um atributo da classe. Consegue ver a importância disso? 

Só que claro que não é possível fazer algo assim no construtor:

// Errado!!!
public Impressora(String marca, String modelo) {
    marca = marca;   // Erro
    modelo = modelo; // Erro
}

Já quanto a segunda pergunta:

É bom deixar bem claro que um Construtor não é um método. Por exemplo: ele não pode retornar nada!

Outro ponto, no seu exercício é pedido para criar 20 construtores. Nesse caso o que está sendo feito é uma sobrecarga de Construtores

Já os getters e setters são métodos mesmo

Não tem como comparar construtores com métodos

Os métodos getters e setters são usados quando os atributos estão definidos como privados (private) que é um ponto importante também de se aplicar. Atributos como privados e os métodos como públicos!

Por exemplo, seus atributos poderiam ficar assim:

private String marca, modelo, tipo, resolucao; // aqui os atributos estão como privados
private int numCartucho;
private double peso, comprimento, largura, profundidade;

E, nesse caso, só é possível acessar os atributos da sua classe com os métodos getters e setters. Mas aí já entra no assunto de Encapsulamento, que é um dos pilares de programação orientação a objetos

 

Se ainda tem perguntas fique a vontade para perguntar. Se ainda ficou alguma dúvida é só perguntar

adicionado 5 minutos depois

A importância de deixar os atributos como privados é para você "proteger" seus atributos, ou seja, não deixar eles expostos.

E assim, se alguém quer acessar o valor de algum atributo, vai precisar usar o método getter desse atributo

Por exemplo: impressora.getMarca();

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@Bruno Coviello Já coloca em prática o que falei sobre atributos como privados hehe. É algo q vejo ser muito importante em orientação a objetos! 

Obs: A principal diferença entre um construtor e um método é que o construtor é chamado toda vez que um novo objeto é criado com o operador new. Já os métodos o usuário precisar chamar explicitamente

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×