Dúvida em POO - interface

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.

Agradeço a quem ajudar.

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?

Olá,

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.

Abraços.

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=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.

[]'s

[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.

[]'s[/quote]

Exatamente o que os colegas colocaram.

Valeu, gente. Vou voltar aos livros e apostilas, então.

Um abraço a todos.