método Get e Set

Gente fiz este programa que dá o nome, o número da matrícula, as notas das provas e se o aluno está aprovado ou de recuperação. Mas neste exercicio eu tenho que colocar os métodos Get ou Set ou os dois não sei como posso fazer isso? Ele está funcionando mas tenho que colocar o método.Como poderei fazer isso. Estou com muita dúvida nestes metodos. Alguém poderia me indicar uma apostila que fale do get e set ou me explicar tb.Obrigada!!!

Aluno.java

[code]public class Aluno
{
public String nome;
private String situacao;
public int matricula;
public double nota1, nota2, media;
public void imprimeAluno()
{
System.out.println(“Nome do aluno:”+nome);
System.out.println(“Matrícula:”+matricula);
System.out.println(“Nota da P1:”+nota1);
System.out.println(“Nota da P2:”+nota2);
System.out.println(“Situação:”+situacao);
}

public void calculamedia()
{
	media=((nota1+nota2)/2);
	System.out.println("Média do aluno:"+media);
}
public void axasituacao()
{
  if (media>=7.0)
	situacao=("Aluno aprovado!");
 else
	situacao=("Aluno em recuperação!");
}

}[/code]

TestaAluno.java

[code]import java.util.Scanner;
public class TestaAluno
{
public static void main(String args[])
{
Scanner entrada=new Scanner(System.in);
String nomedoAluno;
int matriculadoAluno;
double nota1doAluno,nota2doAluno;
Aluno cidadao=new Aluno();

            		System.out.printf("Entre com o nome do Aluno:");
	nomedoAluno=entrada.nextLine();
            		System.out.printf("Entre com a matrícula do Aluno:");
	matriculadoAluno=entrada.nextInt();
			System.out.printf("Entre com a nota da P1 do Aluno:");
	nota1doAluno=entrada.nextDouble();
			System.out.printf("Entre com a nota da P2 do Aluno:");
 		nota2doAluno=entrada.nextDouble();

	System.out.println("Imprimindo dados do aluno: ");
	cidadao.nome=nomedoAluno;
	cidadao.matricula=matriculadoAluno;
	cidadao.nota1=nota1doAluno;
	cidadao.nota2=nota2doAluno;
     	cidadao.calculamedia();
	cidadao.axasituacao();
	cidadao.imprimeAluno();
	
}

}[/code]

o motivo é um tal de encapsulamento de dados

vc faz isso:

cidadao.nome=nomedoAluno; cidadao.matricula=matriculadoAluno; cidadao.nota1=nota1doAluno; cidadao.nota2=nota2doAluno;

entretanto, imagine que vc resolve alterar as variaveis que guardam as notas dos alunos. entretanto vc tem que alterar dezenas de lugares que tambem setam essas notas. uma forma é, para cada atributo, vc ter um metodo que seta-o e um metodo que pega-o.

assim vc pode ter nota1, nota2, nota_um,nota_dois, pode fazer nada com as notas, fazer o que vc quiser, etc…

esses metodos inicialmente são simples, entretanto a medida que fazemos programas complexos eles vão ficando mais aprimorados. por exemplo, da forma como vc faz, qq um pode mudar o nome do aluno.

exemplo de metodos get e set

[code]void setAluno(String nome){
this.nome = nome; // aqui vc encapsula o dado
}

String setAluno(){
return this.nome; // aqui vc retorna o nome do cara
}[/code]

bacana, não ?

Na verdade os métodos getters e setters não têm nada a ver com encapsulamento. Expor um atributo tornando-o público é a mesma coisa que expô-lo com getters e setters. Não há absolutamente nenhuma diferença entre fazer cidadao.nome para fazer cidadao.getNome(), a não ser que a implementação de getNome() faça alguma manipulação com o atributo nome. Aliás, os métodos getters e setters são bastante criticados porque o seu mal uso faz as pessoas acreditarem que programar usando classes que contêm apenas atributos e métodos getters e setters é programar orientado a objetos… Sugiro a leitura desse artigo do Phillip Calçado: http://fragmental.com.br/wiki/index.php?title=Fantoches

Vejam esse tópico também: http://www.guj.com.br/posts/list/20668.java

E se no caso eu resolvesse colocar todos os atributos(nome, nota, matricula)como private o que eu teria que colocar??? Para funcionar pois eu fiz isso e agora dá erro no cidadao.nome=nomedoaluno e etc…

[quote=mimisouza]Gente fiz este programa que dá o nome, o número da matrícula, as notas das provas e se o aluno está aprovado ou de recuperação. Mas neste exercicio eu tenho que colocar os métodos Get ou Set ou os dois não sei como posso fazer isso? Ele está funcionando mas tenho que colocar o método.Como poderei fazer isso. Estou com muita dúvida nestes metodos. Alguém poderia me indicar uma apostila que fale do get e set ou me explicar tb.Obrigada!!!

Aluno.java

[code]public class Aluno
{
public String nome;
private String situacao;
public int matricula;
public double nota1, nota2, media;
public void imprimeAluno()
{
System.out.println(“Nome do aluno:”+nome);
System.out.println(“Matrícula:”+matricula);
System.out.println(“Nota da P1:”+nota1);
System.out.println(“Nota da P2:”+nota2);
System.out.println(“Situação:”+situacao);
}

public void calculamedia()
{
	media=((nota1+nota2)/2);
	System.out.println("Média do aluno:"+media);
}
public void axasituacao()
{
  if (media>=7.0)
	situacao=("Aluno aprovado!");
 else
	situacao=("Aluno em recuperação!");
}

}[/code]

TestaAluno.java

[code]import java.util.Scanner;
public class TestaAluno
{
public static void main(String args[])
{
Scanner entrada=new Scanner(System.in);
String nomedoAluno;
int matriculadoAluno;
double nota1doAluno,nota2doAluno;
Aluno cidadao=new Aluno();

            		System.out.printf("Entre com o nome do Aluno:");
	nomedoAluno=entrada.nextLine();
            		System.out.printf("Entre com a matrícula do Aluno:");
	matriculadoAluno=entrada.nextInt();
			System.out.printf("Entre com a nota da P1 do Aluno:");
	nota1doAluno=entrada.nextDouble();
			System.out.printf("Entre com a nota da P2 do Aluno:");
 		nota2doAluno=entrada.nextDouble();

	System.out.println("Imprimindo dados do aluno: ");
	cidadao.nome=nomedoAluno;
	cidadao.matricula=matriculadoAluno;
	cidadao.nota1=nota1doAluno;
	cidadao.nota2=nota2doAluno;
     	cidadao.calculamedia();
	cidadao.axasituacao();
	cidadao.imprimeAluno();
	
}

}[/code][/quote]

ae qdo trata-se de metodos e objetos é recomendavel criar dos arquivos .java um com os metodos e outros com os objetos.

veja um coms os metodos:

public class metodos
{
private String aluno;
//armazena o conteudo na variavel aluno;
public void setaluno(String al)
{
this.aluno = al;
}
// esse metodo exibi o conteudo armazenado na variavel aluno
public String getaluno()
{
return aluno;
}
}
public class objetos
{
public static void main(String args[])
{

metodos objtaluno = new metodos();

Scanner input = new Scanner(System.in);
String aluno = input.nextLine();
//armazena o nome digitado no metodo setmetodos
objtaluno.setmetodos(aluno);
//imprime o conteudo do metodo getaluno
System.out.println("Nome do aluno " + objtaluno.getaluno());
}
}

flw! em anexo tem um exemplo de metodos set e get

"ae qdo trata-se de metodos e objetos é recomendavel criar dos arquivos .java um com os metodos e outros com os objetos. "

:shock:

[quote=David]Na verdade os métodos getters e setters não têm nada a ver com encapsulamento. Expor um atributo tornando-o público é a mesma coisa que expô-lo com getters e setters. Não há absolutamente nenhuma diferença entre fazer cidadao.nome para fazer cidadao.getNome(), a não ser que a implementação de getNome() faça alguma manipulação com o atributo nome. Aliás, os métodos getters e setters são bastante criticados porque o seu mal uso faz as pessoas acreditarem que programar usando classes que contêm apenas atributos e métodos getters e setters é programar orientado a objetos… Sugiro a leitura desse artigo do Phillip Calçado: http://fragmental.com.br/wiki/index.php?title=Fantoches

Vejam esse tópico também: http://www.guj.com.br/posts/list/20668.java[/quote]

David,

    Me desculpe te corrigir mas de acordo com o livro de certificação da autora: Kathy Sierra página 153 capitulo 2: "Encapsulated code has two features: Instance variables are kept protected (usually with the private modifier). ,Getter and setter methods provide access to instance variables."

Logo contradizendo sua afirmação.

Abraço,
Paulo Marcelo