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

8 respostas
drigost
//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();
    }
}

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.

8 Respostas

gugaa_df

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í

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

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.

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

wagnerfrancisco

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.

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!

tnaires

Resumdino o que o wagnerfrancisco falou:

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

CarlosEduardoDantas

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

thegoergen

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.

F_io_Henrique

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

Criado 20 de dezembro de 2008
Ultima resposta 8 de fev. de 2009
Respostas 8
Participantes 7