Duvida sobre "elegância de codigo" RESOLVIDO

Olá a todos do Guj, moro no EUA e faço facul de TI on line e estou iniciando em Java, e escuto falar muito em
“elegância de codigo” pelo que eu pude perceber, elegância é tentar deixar o codigo o mais curto possivel .
e na facul, o professor nos passou um exercicio que temos uma classe Aluno, uma Professor e uma Faculdade
e precisamos criar os objetos para cada um eu fiz assim
mas com perdao da palavra acho que ficou “RIDICULO” esse codigo, gostaria da opnião de quem conhece o assunto,
pois estou aprendendo mais aqui que com o prof na facul…

(so nao mao me xingar por causa desse codigo heheheh)

package modulo2;

import java.util.Vector;
import javax.swing.JOptionPane;
import java.util.Scanner;
import modulo2.Aluno;

public class ProgramaUniversidade {
public static void main (String args[]){
 
 Scanner ler = new Scanner(System.in);
 Universidade universidade = new Universidade(null, null, null, null, null, null);
 
 JOptionPane.showMessageDialog (null, "O cadastro de aluno e professores é realizado Utilizando o método Vector \n O cadastro de universidade é realizado via console e utiliza o método toString() para exibir os resultados do cadastro. ");
 
 String x = JOptionPane.showInputDialog( "Digite 1 - para cadastrar um professor \n 2 - para cadastrar um aluno \n 3 - para cadastrar uma universidade.");
 if (x.equals("2")){
 
 String resposta = "S";
 
 Vector<Aluno> listaAlunos = new Vector<Aluno>();
 
 
 
 JOptionPane.showMessageDialog (null, "Quando desejar sair do cadastro de alunos digite N.");
 
 while (!(resposta.equals("N"))){
 
 Aluno aln = new Aluno (JOptionPane.showInputDialog ("Digite o nome do aluno: "),
 
 JOptionPane.showInputDialog("Digite a data de nascimento do aluno: "),
 
 JOptionPane.showInputDialog("Digite a cidade de origem: "),
 
 JOptionPane.showInputDialog("Digite o CPF do aluno: "),
 
 JOptionPane.showInputDialog("Digite o RG do aluno: "),
 
 JOptionPane.showInputDialog("Digite o orgao de Expedicao: "),
 
 JOptionPane.showInputDialog("Digite o apelido do aluno: "),
 
 JOptionPane.showInputDialog("Digite o número da matrícula do aluno: "));
 
 listaAlunos.addElement(aln);
 
 JOptionPane.showMessageDialog(null, "RELATORIO DO CADASTRO \n" + "Nome do aluno: " + aln.getNome() + "\n Data de nascimento: " + aln.getDataNascimento() + "\n Cidade: " + aln.getCidadeNascimento() + "\n CPF: " + aln.getCpf() + "\n RG: " + aln.getRg() + "\n Matricula: " + aln.getMatricula());
 
 
 resposta = JOptionPane.showInputDialog ("Deseja continuar cadastrando alunos: S-sim ou N-não: ");
 
 
 }
 
 }else {
 
 if (x.equals("1")){
 
 String resposta = "S";
 
 Vector<Professor> listaAlunos = new Vector<Professor>();
 
 
 
 
 JOptionPane.showMessageDialog (null, "Quando desejar sair do cadastro de professores digite N.");
 
 while (!(resposta.equals("N"))){
 
 Professor pro = new Professor (JOptionPane.showInputDialog("Digite o nome do Professor: "),
 
 JOptionPane.showInputDialog("Digite a data de nascimento: "),
 
 JOptionPane.showInputDialog("Digite a cidade de origem: "),
 
 JOptionPane.showInputDialog("Digite o CPF do professor: "),
 
 JOptionPane.showInputDialog("Digite o RG do professor: "),
 
 JOptionPane.showInputDialog("Digite o Orgao de Expedicao: "),
 
 JOptionPane.showInputDialog("Digite o apelido: "),
 
 JOptionPane.showInputDialog("Digite a data de admissao: "),
 
 JOptionPane.showInputDialog("Digite o nome da universidade: "));
 
 listaAlunos.addElement(pro);
 
 JOptionPane.showMessageDialog(null, "RELATORIO DO CADASTRO DO DOCENTE \n" + "Nome do Professor: " + pro.getNome() + "\n Data de nascimento: " + pro.getDataNascimento() + "\n Cidade: " + pro.getCidadeNascimento() + "\n CPF: " + pro.getCpf() + "\n RG: " + pro.getRg() + "\n Data de admissao: " + pro.getDataDeAdmissao() + "\n Universidade: " + pro.getUniversidade());
 
 resposta = JOptionPane.showInputDialog ("Deseja continuar cadastrando professores: S-sim ou N-não: ");
 
 } 
 }
 else
 
 {
 if (x.equals("3"))
 {
 String resposta = "S";
 System.out.println ("Quando desejar sair do cadastro digite N");
 
 while (!(resposta.equals("N"))){
 
 System.out.println ("Digite o nome da Universidade: ");
 universidade.setNome(ler.nextLine());
 
 System.out.println ("Digite a data de criacao: ");
 universidade.setCidadeNascimento(ler.nextLine());
 
 System.out.println ("Digite a cidade de origem: ");
 universidade.setCidadeNascimento(ler.nextLine());
 
 System.out.println ("\n Digite o nome Fantasia: ");
 universidade.setNomeFantasia(ler.nextLine());
 
 System.out.println ("Digite o curso 1 da universidade: ");
 universidade.setCurso1(ler.nextLine());
 
 System.out.println ("Digite o cnpj da universidade: ");
 universidade.setCnpj(ler.nextLine());
 
 System.out.println ("Digite a inscricao da universidade: ");
 universidade.setInscricaoJuntaComercial(ler.nextLine());
 
 System.out.println (universidade.toStrings(null));
 
 System.out.println ("Deseja cadastrar outra S - instituicao ou N - cadastrar cursos:");
 resposta = ler.nextLine();
 
 if (resposta.equals("N")){
 
 System.out.println ("Digite o nome do curso 2: ");
 universidade.setCurso2(ler.nextLine());
 
 System.out.println ("Digite o nome do curso 3: ");
 universidade.setCurso3(ler.nextLine());
 
 System.out.println ("Digite o nome do curso 4: ");
 universidade.setCurso4(ler.nextLine());
 
 System.out.println ("Digite o nome do curso 5: ");
 universidade.setCurso5(ler.nextLine());
 
 System.out.println (universidade.toString(null));
 }
 
 }
 }else {
 System.out.println ("Parametro incorreto.");
 }
 }
 
 }
 
 
}

}

a) Evite usar a classe Vector, prefira ArrayList (a menos que você esteja usando alguma versão muito, muito, muito muito antiga do Java que não tenha essa classe. Como você está usando Generics (ou seja, <> ) você deve estar usando o Java 5 ou 6, ou talvez até o 7:

List<Aluno> = new ArrayList<Aluno>();

b) Código de entrada e saída de dados não costuma ser muito elegante mesmo. É braçal, na verdade.

E elegância não é exatamente “o menor código que faz uma determinada coisa”.

Até porque muitas vezes um “código elegante” é aquele que não existe (ou seja, pode-se resolver o problema com um arquivo de configuração pequeno e com algum código que consiga ler esse arquivo de configuração e construir algo sobre ele). No seu caso, provavelmente seria melhor ter alguma configuração que mapeasse os campos de entrada a membros de objeto do seu código, para evitar esse código “linguição” (como chamamos isso no Brasil).

A elegância é uma qualidade um pouco mais difícil de quantificar, e que somente com a experiência você pode descobrir.

A garota mais magra da sua turma é a mais elegante, só porque tem “menos massa”?

Acho que não, certo?

É a mesma coisa.

A propósito, quando vi isto aqui:

 Aluno aln = new Aluno (JOptionPane.showInputDialog ("Digite o nome do aluno: "),  
 JOptionPane.showInputDialog("Digite a data de nascimento do aluno: "),  
 JOptionPane.showInputDialog("Digite a cidade de origem: "),  
 JOptionPane.showInputDialog("Digite o CPF do aluno: "),  
 JOptionPane.showInputDialog("Digite o RG do aluno: "),  
 JOptionPane.showInputDialog("Digite o orgao de Expedicao: "),  
 JOptionPane.showInputDialog("Digite o apelido do aluno: "),  
 JOptionPane.showInputDialog("Digite o número da matrícula do aluno: "));  
 listaAlunos.addElement(aln);  

senti um ligeiro calafrio, porque você está supondo

  1. que o usuário é uma máquina infalível e não irá errar ou cancelar nenhuma opção,
  2. que nenhum dado entrado é inválido, e
  3. os parâmetros são avaliados na exata ordem em que aparecem no código.

A afirmativa 3) é razoável (porque faz parte da especificação da linguagem, diferentemente do C++ onde você não sabe na verdade se os parâmetros serão avaliados da esquerda para a direita ou da direita para a esquerda, ou simplesmente fora de ordem). Mas as alternativas 1) e 2) normalmente não são válidas.

Sugestões: ao invés de .equals(), prefira usar o .equalsIgnoreCase().

Códigos repetitivos (como os JOptionPane.showInputDialog) podem ser transformados em pequenos métodos. Isto melhora a legibilidade do código.