[Dúvida] Iniciante - Métodos

Olá a todos.

Sou novo aqui no fórum. Já tem um tempo que venho estudando java e estou começando ainda.

Eu estava procurando um site na internet onde eu pudesse tirar minhas dúvidas com gente que entende de java e que saiba explicar, e acho que aqui seria um bom lugar.

A minha dúvida é a seguinte:

Eu estou lendo aquele livro de java que creio que vocês conhecem: “Java - como programar 6ª Edição”. Estou na página 65 e comecei a ter dúvidas sobre algumas coisas.

Existem duas classes. Uma se chama “GradeBook” e a outra “GradeBookTest”. Uma contém métodos e outra é o “método main”.

GradeBook:

[code]public class GradeBook
{
private String courseName;

public void setCourseName( String name )
{
courseName = name;
}
public String getCourseName()
{
return courseName;
}

public void displayMessage()
{
System.out.println(“Welcome to the grade book for\n%s!\n” , getCourseName() );
}

}

[/code]

GradeBookTest:

import java.util.Scanner;

public class GradeBookTest
{
   public static void main ( String args[] )
   {
      Scanner input = new Scanner ( System.in );
      GradeBook myGradeBook = new GradeBook();

      System.out.println("The initial course name is: %s\n\n" , myGradeBook.getCourseName() );

      System.out.println("Please enter the course name: ");
      String theName = input.nextLine();
      myGradeBook.setCourseName( theName );
      System.out.println();

      myGradeBook.displaMessage();
   }
}

Dúvidas:

1- Na classe “GradeBook”, eu não entendo o motivo do método “getCourseName” ter antes a palavra-chave “string”. Creio que é por causa do “return”… Mas eu não entendo como funciona muito bem ele. O livro diz que ele retorna um valor. Beleza… Mas ele retorna um valor para onde? Para o método? Para a classe com os métodos? Para a outra classe com o método main!? Qual o motivo do “string”?

2-1 O livro fala muito de variáveis de instância. Percebo que pelo que parece são variáveis que só a classe pode ter acesso por causa do “private”. Eu estou falando da variável com nome “courseName” logo no início da classe “GradeBook”. O livro diz que ela é uma variável de instância e que por causa disso ou do “private” (eu não entendi direito), ela só pode ser usada pela classe em seus métodos. Mas o engraçado do Java, é que com a outra classe(“GradeBookTest”), eu posso interagir com esse valor através dos métodos… Meio maluco isso… Eu juro que não entendi isso muito bem. Parece que o livro diz uma coisa e na real é outra. Estou bem confuso.

2-2 Variável de instância pode ser comparada a uma variável global? Digo… Não seria global, mas só para a classe, né?

3- “set” e “get” são palavra-chaves/comandos? Sempre eu vejo elas por aí e muita gente usa. E agora agora é que eu me deparo com elas pela primeira vez. O livro parece não falar diretamente “isso é isso e é usado aqui”. Eu gostaria que alguém me dissesse isso. O que são e onde podem ser usados. Não precisa nada complexo nem muita avançado… Mas pelo menos o básico seria bem legal. E se pudesse colocar um exemplo BEM simples mesmo, seria melhor ainda.

4- Eu sei que a palavra-chave “void” é quando não há retorno de um valor. Beleza… Mas olha só, em “GradeBook”, ele existe e tem atributos com o método… Como é isso? Não retorna nem um valor e tem atributos dizendo que uma variável é igual a outra? :?

Olha me deculpem por escrever muito. Mas eu procuro ser bem específico para que entendam minhas dúvidas e que elas sejam resolvidas da melhor forma.

Agradeço a todos a atenção e a vontade de me ajudar de antemão.

Abraços! :-o

[quote]
1- Na classe “GradeBook”, eu não entendo o motivo do método “getCourseName” ter antes a palavra-chave “string”. Creio que é por causa do “return”… Mas eu não entendo como funciona muito bem ele. O livro diz que ele retorna um valor. Beleza… Mas ele retorna um valor para onde? Para o método? Para a classe com os métodos? Para a outra classe com o método main!? Qual o motivo do “string”?[/quote]

ele retorna uma linha de texto com o nome do Curso …
String é uma linha de texto .
cada vez que tu chamar este metodo da classe GradeBook ele vai te retornar uma linha de texto com o nome do curso!

[quote]

2-1 O livro fala muito de variáveis de instância. Percebo que pelo que parece são variáveis que só a classe pode ter acesso por causa do “private”. Eu estou falando da variável com nome “courseName” logo no início da classe “GradeBook”. O livro diz que ela é uma variável de instância e que por causa disso ou do “private” (eu não entendi direito), ela só pode ser usada pela classe em seus métodos. Mas o engraçado do Java, é que com a outra classe(“GradeBookTest”), eu posso interagir com esse valor através dos métodos… Meio maluco isso… Eu juro que não entendi isso muito bem. Parece que o livro diz uma coisa e na real é outra. Estou bem confuso. [/quote]

as variaves de instancia por causa do private sao variaves que so os objectos da classe GradeBook podem usa.la.
Tu podes interagir com este valor na classe GradeBooKTest porque criaste um objecto “GradeBook”

GradeBook myGradeBook = new GradeBook(); 

… :oops:

[quote]
3- “set” e “get” são palavra-chaves/comandos? Sempre eu vejo elas por aí e muita gente usa. E agora agora é que eu me deparo com elas pela primeira vez. O livro parece não falar diretamente “isso é isso e é usado aqui”. Eu gostaria que alguém me dissesse isso. O que são e onde podem ser usados. Não precisa nada complexo nem muita avançado… Mas pelo menos o básico seria bem legal. E se pudesse colocar um exemplo BEM simples mesmo, seria melhor ainda. [/quote]

os gets sao usados para “ter” um valor das variaveis de instancias , aqueles privates quando chamas este metodo, por isso tb chamam.se selectores. Os Sets sao pra alterar estes valores, sao os chamados modificadores.

   public String getCourseName()  
   {         return courseName;  
   } 

por exemplo aqui te retorna uma String com o nome do curso que la em cima é private mas assim podes aceder ha este valor em outra classe que cries um objecto do tipo GradeBook

o void nao retorna nada, mas pode criar alteraçoes…

por exemplo

public void setCourseName( String name ) { courseName = name; }

por exemplo aqui o valor que recebe como parametro afecta o courseName ou por outras palavras, o valor de CourseName passa a ser do String name, um “Set” tb tem o nome de modificador por isso mesmo por afectar ou dar novos valor.

espero ter ajudado…

Oi Alkamavo!

Então, eu vou falando na onrdem de nossas perguntas e respostas:

1 - “…ele vai te retornar uma linha de texto com o nome do curso!” quer dizer que o “return” ele acessa o valor de uma variável, e quando eu uso o método “getCourseName” irá aparecer o valor da variável que estava do lado do “return” (no caso "courseName)? Se for isso, eu finalmente consegui entender!!! Só quero uma confirmação… :-o

2 - "as variaves de instancia por causa do private sao variaves que so os objectos da classe GradeBook podem usa.la.
Tu podes interagir com este valor na classe GradeBooKTest porque criaste um objecto “GradeBook” "

É verdade é verdade!! hahahaha… Que vergonha… Mas eu sei disso! O problema é que o livro fala de um jeito… Como se eu NUNCA conseguisse usar a variável com outras classes. Tem toda razão! :lol:

3 - “os gets sao usados para “ter” um valor das variaveis de instancias.” Ow quer dizer que eu não posso ter acesso a variáveis de instância de outra maneira? Nem mesmo pelos métodos da classe. Digo isso pelo motivo seguinte, você me fez entender que eu só poderia ter acesso a elas utilizando os métodos “get” e “set”… É isso?! Quer dizer que não há outra forma que eu possa ter acesso a elas? Se pudesse me esclarecer isso, eu ficaria realmente grato! Ah… Não sabia que métodos utilizavam “string”, “int”, “double” e etc… Vi isso no site:

http://www.tiexpert.net/programacao/java/index.php

Achei moh maluco isso. Pensava que métodos eram apenas métodos de um jeito… Confuso isso.

4 - Sei… Alkamavo eu acho que vou pesquisar algo na internet sobre “void”. A diferença de usá-lo e não.


Sabe, eu andei pensando aqui e me surgiu uma outra dúvida… O “set” e o “get” sempre são usados na frente do nome dos nossos métodos. Eu quando tava aprendendo a receber valores do teclado sempre usei o objeto “input” da classe “Scanner” com esse nome mesmo de “input”. Eu nunca alterei ele pois me acostumei a fazê-lo assim. Então eu pergunto, o “set” e o “get” também são nomes que programadores colocam por costume ou por ficar mais fácil de entender, ou são realmente palavras chaves para se pegar o valor de uma variável de instância?

Ah eu entendi sim sobre o que você falou sobre variáveis de instância (pelo menos eu acho). O que eu entendi no final sobre elas, é que elas só podem ser acessadas daquela forma, com o “get” e com o “set”, e, que elas são modificadas basicamente daquela forma.

Alkamavo, eu quero lhe agradecer muito por ter vindo aqui, gastado o seu tempo e tirado a minha dúvida. Agradeço de coração mesmo por ter me ajudado. Se puder aparecer de novo eu vou adorar.

Obrigado a todos!

Abraços! :wink:

vou confirmando e acrescentando tuas respostas

1-sim. tu entendeu direito. :slight_smile:

2.tu ja entendeu a parada :slight_smile:

3-podes de outra forma aceder um valor de instancia private na propria Classe usando o this.courseName
ele te acede ao valor private. ou entao criando metodos da classe que interagem com estes valores.
as variaveis de instancias sao variaveis necessarios definir os teus objectos.

por exemplo se criares um objecto pessoa,
as instancias serao : nome, idade, sexo, data de nascimento.

e os metodos podem ser varios

getnome, setnome, apagadatadenascimento(nome) --> recebe o nome como parametro e apaga a data do mesmo.
O conceito de objecto é mesmo este brincar com ele…: )

Oi Alkamavo!

Então, você falou que eu também poderia acessar a variável “courseName” usando “this.courseName”.

Eu li no site que falei no meu último post, e lá diz que eu posso usar o comando “this.” dessa forma:

this.courseName = X;

Isso é verdade? Quer dizer que com ele me dá acesso a variáveis de intância/privates? E eu só posso usar ele desta forma?

Ah e ainda não me falaram do “get” e do “set”. Digo, falou sim, né! Mas me refiro a última coisa que mencionei… Eles realmente são comandos/palavra-chaves mesmo, ou são coisas que os programadores escrevem por costume para organizar melhor os códigos?

Alkamavo, mais uma vez lhe agradecendo pelo carinho e pela atenção que tens me dado aqui. Obrigado mesmo!!!

EDIT: meu deus eu esqueci de perguntar uma coisa super importante desde o começo…

Quando ele mostra a mensagem:

System.out.println("The initial course name is: %s\n\n" , myGradeBook.getCourseName() ); 

Existe algum outro jeito de mostrar essa mensagem com o comando “+”?

Exemplo: System.out.println("The initial course name is: " + myGradeBook.getCourseName() );

Eu fiz isso aqui e não funcionou… :cry:

Abraços a todos!