Orientado a objetos?

Eu estou estudando sobre orientação a objetos, e gostaria de melhorar esse código em orientado a objetos. Como eu poderia melhorar ele, para que fique de forma correta e em orientação a objeto.

import java.util.ArrayList;
import java.util.List;

public class JavaApplication5 {
    public static List<Aluno> a = new ArrayList<Aluno>();
    
    public static void main(String[] args) {
        s("Jose", 12);
    }
    public static void s(String nome, long idade){
        if(idade < 18){
            System.out.println("Idade nao perimitida");
        }
        Aluno al = new Aluno();
        al.nome = nome;
        al.idade = idade;
        a.add(al);
    }    
}
class Aluno{
    String nome;
    long idade;
    
}

Olá

Você pode tirar o mêtodo ‘s’ da classe JavaApplication5

O Mêtodo ‘s’ tem o nome e idade do aluno, seria melhor colocar esse mêtodo dentro da classe Aluno

1 curtida

Obrigadoo pela dica. Ja renomeei esse método ai kk, para não ficar perdido no que ele está fazendo.
Mas no caso de colocar esse método na classe Aluno, como eu usaria esse ArrayList? para adicionar o aluno na arrayList?

Bom vamos lá então, vamos passo a passo

  1. Vamos criar a classe em um arquivo separado chamado Aluno.Java
  2. Para idade não é ideal utilizar o tipo long, pois o próprio nome fala: long = longo, ou seja é para números muitos grande e idade de uma pessoa não é grande, então utilizamos o tipo int
  3. Agora vamos criar a classe Aluno utilizando o conceito de encapsulamento de Orientação a Objeto:
public class Aluno {

    private String nome;
    private int idade;

    //construtor da classe
    public Aluno(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    /**
     * Método verifica se é maior ou menor de idade.
     *
     * @return
     */
    public boolean verificar_idade() {
        if (this.idade < 18) {
            return false;
        } else {
            return true;
        }
    }

    //Gets e sets que fazem o acesso as váriaveis
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

}

Bom como vc pode ver utilizei o construtor da classe para receber o nome e idade do aluno quando ele for instanciado e utilizei a ideia de visibilidade nas variável para o encapsulamento. E criamos um método na classe que verifica se a idade do aluno é de menor ou não.

Agora vamos para o próximo passo onde é o nosso main, vamos deixar ele limpo e mais organizado tudo será feito somente dentro do método estático main:

public class Principal {

    public static void main(String[] args) {
        ArrayList<Aluno> lista_de_alunos = new ArrayList<>();

        //Faço o instanciamento do aluno
        Aluno aluno = new Aluno("José", 12);

        //Uso aquele método da criado na classe aluno para verificar se é maior de idade
        if (aluno.verificar_idade()) {
            //se for verdadeiro então é maior de idade
            lista_de_alunos.add(aluno);
        } else {
            //caso não, o aluno é de menor de idade
            System.out.println("o Aluno: " + aluno.getNome() + " é de menor");
        }
    }
}

Veja que utilizamos o método da classe para verificar se o aluno é de menor ou de maior de idade, e veja que fica bem mais bonito de se ver o código, este é uma das forma de se organizar utilizando a idea de POO (Programação Orientada a Objeto)

1 curtida

Você pode criar uma classe para Aluno e tirá-la da classe JavaApplication5.
Na classe Aluno que você criar, você pode deixá-la como visibilidade public.
Nos atributos (nome e idade) da classe Aluno, você pode deixá-los com visibilidade private e criar métodos get e set para cada um dos atributos.

1 curtida

Nossa e como fica bem melhor de entender o que cada método está fazendo… Muito obrigado pela ajuda e dica, estou começando a estudar POO agora. Mas com o que você passou ai estou entendendo muito melhor como trabalhar POO.
Obrigado!

De nada, recomendo vc ver esses vídeos se caso não viu ainda, do prof guanabara ensinando orientação a objeto e ainda por cima vc recebe um certificado de graça:
http://www.cursoemvideo.com/course/curso-de-poo-java/

1 curtida