Pessoal, eu estou com uma dúvida conceitual: eu tenho um programinha aqui de achar IMC que pede input do usuário através do objeto Scanner. É um programinha que eu fiz em Java, mas no paradigma estrutural. Como agora eu estou estudando mais detalhadamente POO, eu queria tornar esse programinha orientado a objetos e aí surgiu uma dúvida, que eu gostaria que vocês me corrigissem se eu falar besteira (o que é altamente provável rs):
Eu penso que essa parte do código em que peço o input é a interface do meu programa, correto?
Pois bem, pensando no próprio conceito de POO, de ter um programa limpo, encapsulado e segmentado, o normal é eu ter essa interface escrita direto no main (ou seja, instanciando lá o Scanner, criando variável, puxando os nextInt, nextLine, fazendo os println da vida etc. etc.) ou eu devo criar um objeto ou um método pra ela, de maneira a não “poluir” o main?
Estou perguntando isso porque li em algum lugar que uma boa prática de POO significa ter o main o mais limpo possível, se limitando apenas a chamar métodos.
Apenas pra exemplificar e tornar mais fácil entender onde está minha dúvida. Vou postar um programinha simples que envolve uma classe Aluno e uma classe de teste:
Aluno.java:
public class Aluno {
public String nome;
public double notaMat,
notaFis,
media;
public Aluno(String cNome, double cNotaMat, double cNotaFis){ //construtor
this.nome=cNome;
this.notaMat=cNotaMat;
this.notaFis=cNotaFis;
media = (this.notaMat + this.notaFis)/2;
}
TestaClasse.java
import java.util.Scanner;
public class TestaClasse {
public static void main(String[] args) {
String nome;
double notaMat,
notaFis;
Scanner entrada = new Scanner (System.in);
System.out.print("Nome do aluno: ");
nome = entrada.nextLine();
System.out.print("Nota em Matemática: ");
notaMat = entrada.nextDouble();
System.out.print("Nota em Física: ");
notaFis = entrada.nextDouble();
Aluno patropi = new Aluno(nome, notaMat, notaFis);
System.out.printf("O aluno \"%s\" tirou %2.2f em Matemática, "
+ "%2.2f em Física e obteve média %2.2f\n", patropi.nome,
patropi.notaMat,
patropi.notaFis,
patropi.media);
}
}
Minha dúvida é simples: essa interface na TestaClasse.java está dentro das boas práticas de POO ou o cara (esse programa não é meu, estou apenas usando pra estudar e adaptar o meu de IMC) deveria ter criado essa interface de outra maneira (dentro de um objeto Interface, por exemplo, ou criar um método pedirInput dentro de Aluno), de modo a não “poluir” o main?
Irei tentar ajudar, primeiramente dê uma olhada neste link sobre interfaces, você irá perceber que uma interface em Java não é o que você está pensando.
O método main é necessário para rodar uma aplicação Java para desktop ou prompt como é o seu caso, ou seja, ele não é uma interface.
Para você não poluir o código poderia criar uma nova classe que teria o objeto Scanner, nela você poderia criar os métodos para leitura e tudo o que você precisa. Dentro do método main você daria um new nesta nova classe e só chamaria seus métodos. Sobre a classe aluno também seria interessante tirar os campos relacionados a nota e criar uma nova classe para eles como por exemplo a classe Prova qual poderia ser uma propriedade de Aluno…
De qualquer forma, se estudar a apostila que te passei no link irá aprender bastante.
Valeu, Filipe, mas ficou uma dúvida quanto a interface:
Pegando como exemplo uma calculadora: os botões e o visor não são a interface que o objeto calculadora fornece ao usuário para este fornecer o input e receber de volta o valor desejado?
Foi pensando isso que eu concluí que o objeto Scanner do Java me permite criar uma interface de interação com o usuário, permitindo a este digitar valores.
[quote=michel79]
Pegando como exemplo uma calculadora: os botões e o visor não são a interface …[/quote]
A parte de interação visual com o usuário seria a View
[quote=michel79]Valeu, Filipe, mas ficou uma dúvida quanto a interface:
Pegando como exemplo uma calculadora: os botões e o visor não são a interface que o objeto calculadora fornece ao usuário para este fornecer o input e receber de volta o valor desejado?
Foi pensando isso que eu concluí que o objeto Scanner do Java me permite criar uma interface de interação com o usuário, permitindo a este digitar valores.
Estou errado?[/quote]
Michel, esta havendo uma confusão de conceitos:
Interface em OO e Interface (relacionado a visualização e interação com o usuário) são conceitos distintos.
[quote=leonhard32][quote=michel79]Valeu, Filipe, mas ficou uma dúvida quanto a interface:
Pegando como exemplo uma calculadora: os botões e o visor não são a interface que o objeto calculadora fornece ao usuário para este fornecer o input e receber de volta o valor desejado?
Foi pensando isso que eu concluí que o objeto Scanner do Java me permite criar uma interface de interação com o usuário, permitindo a este digitar valores.
Estou errado?[/quote]
Michel, esta havendo uma confusão de conceitos:
Interface em OO e Interface (relacionado a visualização e interação com o usuário) são conceitos distintos.