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