Private

OI pessoal estava olhando uns exercícios e surgiu uma dúvida!
Se alguem pod m ajudar agradeço!

public class Curso {

private String nomeCurso; 

public Curso (String nome) {
    nomeCurso = nome;
} 

public void setNomeCurso (String nome) {
    nomeCurso = nome;
} 

public String getNomeCurso () {
    return nomeCurso
} 

}

Por que o atributo nomeCurso é privado? O que quer dizer um atributo ser privado :?: :smiley:

Ele é um atributo restrito apenas à sua classe, não pode ser usado por outras classes.

Você já estudou o que é Encapsulamento? Dê uma pesquisada nisso que você vai entender.

Obrigada…
E wlw pela dica!!
Estou começando a estudar java na fakull!
Entaum estou com varias dúvidas q vcs podem ser bobagm…
Desculpa qualquer coisa!
obrigada… obrigadda
:smiley:

Então estuda MUITO sobre orientação à objetos…

infelizmente hoje em dia isso está fazendo a diferença.

infelizmente??? :roll:

É galeraaa to vndo q tnho mto q estudar!!!

DAki p frente tudo vai ser diferente… hehehe

Estudar… Estudar… Estudar
:? :? :? :? :? :? :? :? :? :?

Sim Lilian com ctza. E não desanime.
De uma lida nessas apostilas da Caelum e tente fazer todos os exercicios. E qq duvida posta aqui que a comu ajuda.
Segue o link das apostilas pra vc baixar…comece pelo FJ-11: http://www.caelum.com.br/apostilas/
Bem vinda, []´s

Boa Noite Lilian TADS,

A utilização do modificador de acesso private nos métodos e classes servem para encapsular este seu atributo para que outra classe não possas acessa-lo diretamente e sim tenha que ou, retornar seu valor (getMetodo()), ou setar um valor para o referente objeto(setMetodo).

Imagine sua classe

[code]private String nomeCurso;
private String meuCurso = “Ciência da Computação”;

public Curso (String nome) {
    nomeCurso = nome;
}

public void setNomeCurso (String nome) {
    nomeCurso = nome;
}

public String getNomeCurso () {
    return nomeCurso
}

}
[/code]
onde é adicionado um novo atriibuto meuCurso e esteja da seguinte forma:

public String meuCurso; //ou String meuCurso;
isto significa que qualquer classe que realize uma instância da classe Curso poderá modificar o valor de seu atributo.

Agora vamos supor que seja adicionado no método set(); o seguinte:

public void setNomeCurso(String curso) { this.nomeCurso = curso + ' ' +meuCurso; }

Qual integridade dos dados eu teria se quisesse que meus objetos do tipo Curso fossem setados sempre da seguinte forma: "Descrição do Curso Ciência da Computação " ?

De acordo com o método set acima eu poderia muito bem fazer:

Curso novoCurso = new Curso("Matemática"); novoCurso.meuCurso = "Java"; novoCurso.setNomeCurso("Arquitetura de Computadores"); System.out.println(novoCurso.getNomeCurso());

curso.meuCurso = “Java”; Com isso o valor “Ciência da Computação” seria substituido por Java e quando fosse realizar o método acima este seria:

Console:
“Arquitetura de Computadores Java”

Totalmente diferente do que eu gostaria que fosse. Por estes motivos (existem muitos outros) a utilização nos atributos do modificador de acesso “private”, não são todos que você deve colocar private pois, existem outros modificadores como: “protected, public e strictfp”.

Espero que tenha ajudado!!
:lol:

Galera então tipw o metodo sendo private o objeto não pode instanciar seria isso[/url]?

Eu nao poderia chegar e fazer em outra classe teste

Curso c = new Curso(“Artes”);

c.nomeCurso = " AEEEEE"; (NAO PODE? pq é private é isso?)

Obrg

Sim, vc não pode fazer isso.

Vc teria que ter na classe do atributo nomeCurso um metodo set() …por ex:


public String setNomeCurso(String nome) {
       
           this.nomeCurso = nome;
}

Sendo assim vc poderia na sua outra classe fazer o seguinte:

       Curso c = new Curso();
       
       c.setNomeCurso("nome");

Bem acho que é isso.
flw

Tem um erro

o certo é

public void setNomeCurso() … e não public String…

suhauhsua

valeu filipe obrg

EDIT----

Mais deu pra entender^^

Abraço :slight_smile:

Que bom :smiley:

Valeu, abraço.

[quote=GabrielCardelli]Galera então tipw o metodo sendo private o objeto não pode instanciar seria isso[/url]?

Eu nao poderia chegar e fazer em outra classe teste

Curso c = new Curso(“Artes”);

c.nomeCurso = " AEEEEE"; (NAO PODE? pq é private é isso?)

Obrg [/quote]

Bem, isso é o fato de vc encapsular um atributo de uma determinada classe.
Pra manter a consistência dos dados, utilizamos a técnica de encapsulamento.

Imagine uma situação onde, em um sistema qualquer de banco, o processamento dos dados tenha a tarefa de fazer o cadastro dos clientes.

Cliente novoCliente = new Cliente(); novoCliente.nome = "João"; novoCliente.nome = "Paulo"; // Isso é estranho né?

No caso acima, o sistema registra no banco o cliente “João”. Em seguida, por algum mistério desvendado, o sistema atualiza o nome do “João” para “Paulo”.
Aquele objeto (cliente) no sistema não deveria se chamar João pra sempre??? Sim, deveria.

Fica estranho uma classe externa (a do processamento - main, no caso - trabalhar em cima dos atributos. A classe cliente deveria ter um MÉTODO DE ADICIONAR CLIENTES, da forma necessária. Ou seja, nesse método de adicionar, antes de cadastrar o nome do cliente, é verificado se o atributo já está preenchido com o nome:

class Cliente {
    private String nomeCliente; // vamos deixar essa variável privada (SOMENTE ESTA CLASSE - CLIENTE (THIS) PODE ACESSAR ESSA VARIÁVEL E MODIFICA-LA
    

    // Método público para configurar o nome do cliente
    public void setNomeCliente (String nome) {
        if (this.nomeCliente == null)  this.nomeCliente = nome;
        else System.out.println("Ja existe nome para este cliente"; // Aqui podemos lançar uma Exception se quisermos, mas fica a critério do negocio da empresa
    }


    // Método público para "pegar" o nome do Cliente
    public String getNomeCliente () {
        return this.nomeCliente;
    }

Depois, o processamento (main) acessará da seguinte forma:

main.........
Cliente c = new Cliente();
// Isso não vai funcionar >>>>>>>>>>>>> c.nomeCliente = "João">>>>>>>> pq a variavel é PRIVATE

c.setNomeCliente("João"); // Essa classe que tem o main, neste momento está utilizando o método público fornecido pela classe Cliente.
c.setNomeCliente("Paulo"); // Isso até compila, mas não configura o nome como "Paulo" ao objeto cuja referencia é "c".

//Imprimindo o nome do cliente, utilizando o método publico que "traz" o nome do cliente cadastrado
System.out.println(c.getNomeCliente());

// No console aparecerá JOÃO. Notou a importância do encapsulamento neste caso?

Podemoss melhorar ainda, tirando o método setNomeCliente da Classe Cliente. Mas como configurar o nome???
Utilizando o construtor.

Aí já é outro assunto que foge do tema do tópico, mas não é nada avançado. Bem básico e simples. Basta dar uma boa pesquisada.
O intuito aqui só foi mostrar um pouco da importância do encapsulamento (consistência dos dados) no sistema.

Espero ter ajudado, e se errei em alguma coisa, favor corrigir.

[]´s

Ah, fique claro que eu não quis dizer que TODA vez temos que implementar o método setNomeCLiente() desta forma,verificando com o if.

Normalmente, a implementação dele é apenas assim:

public void setNomeCliente (String nome) { this.nomecliente = nome; }

Fica a criteio do seu negocio. []´s