3.2 Criando um novo método
A todo momento que criamos um novo objeto do tipo Livro, estamos imprimindo seus valores. Essa é uma necessidade comum entre todos os livros de nosso sistema, mas da forma como estamos fazendo, toda hora repetimos as mesmas 4 linhas de código:
System.out.println(livro.nome); System.out.println(livro.descricao); System.out.println(livro.valor); System.out.println(livro.isbn);A única coisa que muda é o nome da variável, de livro para
outroLivro.
Pense na seguinte situação, em breve nosso cadastro terá cerca de 100 livros. Para cada livro, teremos 4 linhas de código imprimindo os seus 4 atributos. Ou seja, teremos 400 linhas de código muito parecidas, praticamente repetidas.
Essa repetição de código sempre tem um efeito colateral desagradável, que é a dificuldade de manutenção. Quer ver? O que acontece se adicionarmos um novo atributo no livro, por exemplo a data de seu lançamento? Para imprimir a data toda vez que criar um livro, teremos que mudar 100 partes de nosso código, adicionando o System.out.println(livro.dataDeLancamento).
No lugar de deixar essa lógica de impressão dos dados do livro toda espalhada, podemos isolar esse comportamento comum entre os livros na classe Livro! Para isso, criamos um método. Uma forma seria:
void mostrarDetalhes() { System.out.println(nome); System.out.println(descricao); System.out.println(valor); System.out.println(isbn);}
Esse método define um comportamento para classe Livro. Repare que
a sintaxe de um método é um pouco diferente do que estamos acostumados, sua estrutura é:
tipoDeRetorno nomeDoComportamento() {
// c6digo que sera executado
}
Nesse caso, não estamos retornando nada e, sim, apenas executando in-
struções dentro do método, portanto, seu tipo de retorno é void. Essa palavra reservada indica que um método não tem retorno.
Um método também pode ter variáveis declaradas, como por exemplo:
void mostrarDetalhes() {String mensagem = “Mostrando detalhes do livro ”; System.out.println(mensagem); System.out.println(nome); System.out.println(descricao); System.out.println(valor); System.out.println(isbn);
}
A variável mensagem foi declarada dentro do método, logo esse será
seu escopo, ou seja, ela só existirá e poderá ser utilizada dentro do método
mostrarDetalhes.
Nossa classe Livro ficou desta forma:
public class Livro {String nome; String descricao;
double valor; String isbn;
void mostrarDetalhes() {String mensagem = “Mostrando detalhes do livro ”; System.out.println(mensagem); System.out.println(nome); System.out.println(descricao); System.out.println(valor); System.out.println(isbn);
}
}
Agora que cada livro possui o comportamento de exibir os seus detalhes,
podemos remover as linhas que faziam esse trabalho no método main e passar a invocar esse novo método. Repare:
public class CadastroDeLivros {public static void main(String[] args) {Livro livro = new Livro(); livro.nome = “Java 8 Pratico”;
livro.descricao = “Novos recursos da linguagem”; livro.valor = 59.90;
livro.isbn = “978-85-66250-46-6”;
livro.mostrarDetalhes();
Livro outroLivro = new Livro(); outroLivro.nome = “Logica de Programacao”;
outroLivro.descricao = “Crie seus primeiros programas”; outroLivro.valor = 59.90;
outroLivro.isbn = “978-85-66250-22-0”;
outroLivro.mostrarDetalhes();
}
}
Ao isolar esse comportamento dentro da classe Livro já tivemos um ganho evidente. Tivemos que escrever menos linhas em nosso main, o código ficou com menos repetições pois teve maior reaproveitamento. Mas essa não é a única vantagem em isolar um comportamento: mesmo que eu tenha 100 livros cadastrados e use o método mostrarDetalhes 100 vezes, em quantas partes do meu código eu terei que mexer para modificar a forma como os livros são exibidos? A resposta é: uma!
Agora que o comportamento está isolado, só precisaremos alterar o método, um único ponto do nosso código, para refletir a mudança em todos os lugares que o usam. Vamos colocar isso em prática, basta mudar o método mostrarDetalhes para:
void mostrarDetalhes() {System.out.println("Mostrando detalhes do livro "); System.out.println("Nome: " + nome); System.out.println("Descri�ao: " + descricao); System.out.println("Valor: " + valor); System.out.println("ISBN: " + isbn); System.out.println("--");