Alguém poderia informar se esse código está de mais

[code]//Escreva um programa em Java que leia em um vetor as notas finais de uma turma de 20 alunos e em seguida calcule
//e mostre a média da turma.

import javax.swing.JOptionPane;

public class CalcMedia {

public class Aluno {

    private float mediaNotas,  nota1,  nota2,  nota3;

    public Aluno(float nota1, float nota2, float nota3) {
        this.nota1 = nota1;
        this.nota2 = nota2;
        this.nota3 = nota3;
        calculaMedia();
    }

    private void calculaMedia() {
        mediaNotas = (nota1 + nota2 + nota3) / 3;
    }

    public float getMediaAluno() {
        return mediaNotas;
    }
}

private int numeroAlunos,  alunosAcimaDaMedia;
private float mediaTurma;
private Aluno[] turma;

public CalcMedia(int numeroAlunos) {
    this.numeroAlunos = numeroAlunos;
    turma = new Aluno[numeroAlunos];
}

public void adquiriNotasDosAlunos() {
    float n1, n2, n3;

    for (int i = 0; i < this.numeroAlunos; i++) {
        n1 = Float.parseFloat(JOptionPane.showInputDialog(null, "Digite a nota 1 do aluno " + (i + 1) + "!"));
        n2 = Float.parseFloat(JOptionPane.showInputDialog(null, "Digite a nota 2 do aluno " + (i + 1) + "!"));
        n3 = Float.parseFloat(JOptionPane.showInputDialog(null, "Digite a nota 3 do aluno " + (i + 1) + "!"));
        turma[i] = new Aluno(n1, n2, n3);
    }

    calcularMedia();
    calcularAlunosAcimaDaMedia();
}

private void calcularMedia() {
    float aux = 0;
    for (int i = 0; i < numeroAlunos; i++) {
        aux = aux + turma[i].getMediaAluno();
    }
    mediaTurma = aux / numeroAlunos;
}

private void calcularAlunosAcimaDaMedia() {
    alunosAcimaDaMedia = 0;
    for (int i = 0; i < numeroAlunos; i++) {
        if (turma[i].getMediaAluno() > mediaTurma) {
            alunosAcimaDaMedia++;
        }
    }
}

public void mostrarResultadoTurma() {
    JOptionPane.showMessageDialog(null, "A média da turma foi: " + mediaTurma + "" +
            "\nA quantidade de alunos com nota acima da média foi: " + alunosAcimaDaMedia,
            "Informação da Turma", JOptionPane.INFORMATION_MESSAGE);
}

public static void main(String[] args) {

    int numeroAlunos = Integer.parseInt(JOptionPane.showInputDialog(null, "Entre com o numero de alunos da Sala!!"));

    CalcMedia m = new CalcMedia(numeroAlunos);
    m.adquiriNotasDosAlunos();
    m.mostrarResultadoTurma();
}

}
[/code]

Eu estou começando ver agora na faculdade POO, e estou com essa questão pra resolver, ai peguei o livro: Java como programar e juntando algumas partes saiu deste tamanho está funcionando mas acho que está de mais, alguém pode ajudar vê se é isso mesmo.

Esse código seu está digamos muito “estrutural”.
O interessante é abstrair várias partes desse seu código.
Por exemplo, crie um classe Java Aluno, que contenha apenas os atributos privados, os gets e os sets, esse tipo de classe agente chama de pojo.
Depois crie outra classe que implementa a regra de negócio, nessa classe vc cria uma instancia de Aluno e cria as funcionalidades que vc tem que implementar.
Depois vc apenas chama numa outra classe que tenha apenas o método main, essa tua classe de negócio…
Bom, resumindo é por aí

Há controvérsias em relação a tua definição de POJOs gugaa_df. Aqui no próprio GUJ tem bastante definições pra POJO e, efetivamente, não me parece que seja apenas um objeto com atributos privados e métodos get/set. Um objeto assim mais parece um “objeto anêmico”. POJOs são objetos “qualquer”, não precisam implementar/estender de outras classes (de infraestrutura por exemplo). Quebra a própria definição dos objetos (entidades que possuem estados e comportamento…).

E uma opinião, drigost, você poderia dar um nome melhor para a classe CalcMedia. Pelo que me parece ela representa uma Turma (ela mantém referência para diferentes alunos).

http://pt.wikipedia.org/wiki/Plain_Old_Java_Objects
Quando eu me referia ao pojo, me referia a um javabean normal…
Definição que achei na net: Um JavaBean é um POJO que segue definições rígidas de estrutura (construtor default sem argumentos e métodos que seguem o padrão de getters e setters para seus atributos).
Este padrão é baseado na idéia de que quanto mais simples o projeto, melhor.

[quote=wagnerfrancisco]Há controvérsias em relação a tua definição de POJOs gugaa_df. Aqui no próprio GUJ tem bastante definições pra POJO e, efetivamente, não me parece que seja apenas um objeto com atributos privados e métodos get/set. Um objeto assim mais parece um “objeto anêmico”. POJOs são objetos “qualquer”, não precisam implementar/estender de outras classes (de infraestrutura por exemplo). Quebra a própria definição dos objetos (entidades que possuem estados e comportamento…).

E uma opinião, drigost, você poderia dar um nome melhor para a classe CalcMedia. Pelo que me parece ela representa uma Turma (ela mantém referência para diferentes alunos).[/quote]

[quote=gugaa_df]http://pt.wikipedia.org/wiki/Plain_Old_Java_Objects
Quando eu me referia ao pojo, me referia a um javabean normal…
Definição que achei na net: Um JavaBean é um POJO que segue definições rígidas de estrutura (construtor default sem argumentos e métodos que seguem o padrão de getters e setters para seus atributos).
Este padrão é baseado na idéia de que quanto mais simples o projeto, melhor.
[/quote]

Sim, mas o ponto que eu questionei é que um POJO não é uma classe com construtor default sem argumentos e métodos set/get. Nesse exemplo da wikipedia, ele não define o que é um POJO. Apenas dá um exemplo. Mas na wikipedia em Inglês o texto tem mais informações, dê uma lida:

Ali ele comenta o que mencionei antes (de não estender classes ou interfaces…). E ainda assim, não vejo necessidade de criar um objeto sem comportamento e colocar as regras de negócio noutra classe.

Falou!

Resumdino o que o wagnerfrancisco falou:

Todo javabean é um POJO, mas nem todo POJO é um javabean :wink:

drigost

em primeiro lugar meus parabéns por:

1 - ao invés de pedir para alguém aqui do GUJ postar codigo de como faz (e como tem… nem procuram no google antes)… você tomou frente e fez;

2 - procurar melhorar o código para absorver mais os fundamentos de POO, neste caso pedindo corretamente uma ajuda aos membros do fórum;

como seria bom se todo mundo fizesse assim…

acho que pra um começo de trabalho com POO, seu fonte está aceitável… mas algumas coisas podem ser melhoradas

1 - não deixe nota1, nota2 e nota3 constante… coloque em um vetor
2 - foi bom você encapsular a media de notas na classe aluno, mas e se eu quisesse saber a nota da segunda prova?
3 - Turma também poderia virar uma classe, para separar a lógica da turma da classe principal;

acho que é só…

abraços

Eu, e isso implica em opinião pessoal, criaria uma classe Aluno, que teria um vetor (ou ArrayList) de notas. E uma classe Turma que teria um vetor (ou ArrayList) de Alunos.
E criaria uma outra classe para ter o método main.
Seu código ficaria mais limpo e mais orientado a objetos.

POJO significa: O Bom e Velho Objeto Java. É a ausência de rigidez.