Ajuda com orientacao a objetos

Bom pessoal, tenho um trabalho da faculdade para fazer e estou com um pouco de dificuldade.
Contexto do trabalho : http://arisa.dyndns-server.com:8080/~saulo/wiki/index.php/Programação_I_-_Trabalho_I

Bom não vim pedir para fazer o trabalho pra mim hehe, mais vou postar oque eu já consegui fazer, so estou com duvida na classe main de como funcionar =/.

–Classe Funcionario–


package trabalho.programacao.i;

public class Funcionario {
    public String nome, cpf;
    public int idade;
    public double salario;
    
    //Rotinas para adicionar--------------------------------------
    public void  setNome(String _nome){
        this.nome = _nome;
    }

    public void  setCpf(String _cpf){
        this.cpf = _cpf;
    }
    
    public void setIdade(int _idade){
        this.idade = _idade;
    }
    
    public void setSalario(double _salario){
        this.salario = _salario;
    }
    
    //Rotinas para retornar=======================================
    public String getNome(){
        return nome;
    }
    public String getCpf(){
        return cpf;
    }
    public int getIdade(){
        return idade;
    }
    public double getSalario(){
        return salario;
    }
    
}

–Classe Programador–

package trabalho.programacao.i;

public class Programador extends Funcionario {
    public String linguagem;

    //Rotinas para adicionar--------------------------------------
    public void setLinguagem(String _linguagem){
        this.linguagem = _linguagem;
    }
    
    //Rotinas para retornar=======================================
    public String getLinguagem(){
        return linguagem;
    }
}

–Classe DesignGrafico–


package trabalho.programacao.i;

public class Designgrafico extends Funcionario {
    public String programaGrafico;
    
    //Rotinas para adicionar--------------------------------------
    public void setProgramaGrafico(String _programaGrafico){
        this.programaGrafico = _programaGrafico;
    }

    //Rotinas para retornar=======================================
    public String getProgramaGrafico(){
        return programaGrafico;
    }
}

–Classe Design de Som–

[code]package trabalho.programacao.i;

public class Designsom extends Funcionario{
public String programaSom;

//Rotinas para adicionar--------------------------------------
public void setProgramaSom(String _programaSom){
    this.programaSom = _programaSom;
}

//Rotinas para retornar=======================================
public String getProgramaSom(){
    return programaSom;
}

}
[/code]

Bom como estou com MUITA duvida de como implementar o main, e para verem que eu estou tentando fazer e nao querendo que alguem faca o trabalho pra mim, vou postar meu main.
–Classe Main–


package trabalho.programacao.i;

import javax.swing.JOptionPane;

public class Aplicacao {
    static int TAMANHO = 1;
    
    public static void main (String[]args){
        Programador programadores[] = new Programador[TAMANHO];
        Programador designgraficos[] = new Programador[TAMANHO];
        Programador designsoms[] = new Programador[TAMANHO];
        int opcao = 0, opcao2 = 0;
        int flap = 0, flap2 = 0;
        while(flap != 1){
        opcao = Integer.valueOf(JOptionPane.showInputDialog("Opcoes:\n"
                                                           + "1: Inserir Funcionario.\n"
                                                           + "2: Excluir Funcionario.\n"
                                                           + "3: Alterar Funcionario.\n"
                                                           + "4: Listar todos funcionarios."
                                                           + "5: Sair.\n"));
        if(opcao == 1){
               opcao2 = 0;
                while(flap2 != 1){
                 opcao = Integer.valueOf(JOptionPane.showInputDialog("Adicionar:\n"
                                                                     + "1: Adicionar um Programador\n"
                                                                     + "2: Adicionar um Design Gráfico\n"
                                                                     + "3: Adicionar um Design de Som\n"));
                    if(opcao2 == 1){
                        for (int i=TAMANHO;i<=TAMANHO;i++){
                           programadores[i].setNome(JOptionPane.showInputDialog("Digite o nome"));
                           programadores[i].setCpf(JOptionPane.showInputDialog("Digite o cpf"));
                           programadores[i].setIdade(Integer.valueOf(JOptionPane.showInputDialog("Digite o cpf")));
                           programadores[i].setSalario(Integer.valueOf(JOptionPane.showInputDialog("Digite o Salario")));
                           programadores[i].setLinguagem(JOptionPane.showInputDialog("Digite a linguagem de programacao"));
                        }
                    }else{
                         if(opcao2 == 2){
                        
                      }else{
                           if(opcao2 == 3){
                             JOptionPane.showInputDialog("Opcao invalida, tente novamente");
                          }else{
                            
                         }
                      }
                 }
              }
            
    
        }else{
            if(opcao == 2){
                
            }else{
                if(opcao ==3){
                    
                }else{
                    if(opcao == 4){
                        
                    }else{
                        if(opcao == 5){
                            
                        }else{
                            JOptionPane.showInputDialog("Opcao invalida, tente novamente");
                        }
                    }
                }
            }
        }
    }
        
        
    }
}

Se alguem poder me ajudar e dar uma dica ai de como implementar esse main, eu ficarei muito grato… Obrigado ae galera do Guj.

Pessoal sempre que eu tento adicionar tipo o nome ali onde pede no main que eu postei… ele da erro de NullPointerExceptio. La nas classes ja botei todas as variaveis =null ou =0… mais continua dando erro.

Alguem sabe?

Boa noite,

Fiz um exemplo rapido de uma classe Main para sua aplicação, não sei se é exatamente isto que você quer mais foi o que consegui compreender na pergunta. Também não sou muito experiente em java, então meu código pode não estar muito bonito, mais acho que está “funcional”. Recomendo que você de uma olhada nele e qualquer coisa pode perguntar pra eu tentar lhe ajudar.

[code]package AjudaGuj;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class Main {

public ArrayList<Funcionario> arrayFuncionario = new ArrayList<Funcionario>();

public static void main(String[] args) {
	Main m = new Main();
	m.go();			
}

public void go() {
	int tipoUsuario;
	
	tipoUsuario = Integer.valueOf(JOptionPane.showInputDialog("Tipo de Funcionário: \n" + 
	                                                          "1: Programador       \n" + 
			                                                  "2: Design Som        \n" + 
	                                                          "3: Design Grafico    \n" +
	                                                          "4: Sair"));
	
	while (tipoUsuario != 4) {
		switch(tipoUsuario) {
			case 1:					
			case 2:				
			case 3:			
			case 4:
				menu(tipoUsuario);
				break;
			default:
				JOptionPane.showMessageDialog(null, "Número invalido");
				break;
		}
		
		tipoUsuario = Integer.valueOf(JOptionPane.showInputDialog("Tipo de Funcionário: \n" + 
                "1: Programador       \n" + 
                "2: Design Som        \n" + 
                "3: Design Grafico    \n" +
                "4: Sair"));
	}						
}

public void menu(int tipoUsuario) {
	int tipoOperacao = Integer.valueOf(JOptionPane.showInputDialog("Operação:  \n" +
																   "1: Inserir \n" +	
																   "2: Excluir \n" +
																   "3: Alterar \n" +
																   "4: Listar  \n"));		
	switch (tipoOperacao) {
		case 1:
			incluirFuncionario(tipoUsuario);
			break;
		case 2:
			removerFuncionario(tipoUsuario);
			break;
		case 3:
			alterarFuncionario(tipoOperacao);
			break;
		case 4:
			listarFuncionario();
			break;
		default:
			JOptionPane.showInputDialog("Operação cancelada.");
			break;
	}													
}

//Métodos para operações que podem ser realizadas.
public void incluirFuncionario(int tipoUsuario) {		
	if (tipoUsuario == 1) {
		Programador p = new Programador();
		p.setNome(JOptionPane.showInputDialog("Nome do Funcionario: "));
		p.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ")));
		p.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ")));
		p.setCpf(JOptionPane.showInputDialog("Informe o CPF: "));
		p.setLinguagem(JOptionPane.showInputDialog("Informe a linguagem: "));	
		arrayFuncionario.add(p);				
	} else
		if (tipoUsuario == 2) {
			Designsom ds = new Designsom();
			ds.setNome(JOptionPane.showInputDialog("Nome do Funcionario: "));
			ds.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ")));
			ds.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ")));
			ds.setCpf(JOptionPane.showInputDialog("Informe o CPF: "));
			ds.setProgramaSom(JOptionPane.showInputDialog("Informe o Programa de Som: "));
			arrayFuncionario.add(ds);				
		} else
			if (tipoUsuario == 3) {
				Designgrafico dg = new Designgrafico();
				dg.setNome(JOptionPane.showInputDialog("Nome do Funcionario: "));
				dg.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ")));
				dg.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ")));
				dg.setCpf(JOptionPane.showInputDialog("Informe o CPF: "));
				dg.setProgramaGrafico(JOptionPane.showInputDialog("Informe o Programa Grafico"));
				arrayFuncionario.add(dg);
				
			}
	JOptionPane.showMessageDialog(null, "Funcionario incluido com sucesso.");
}

public void removerFuncionario(int tipoUsuario) {		
	try {
		Funcionario f = arrayFuncionario.get(Integer.parseInt(JOptionPane.showInputDialog("Informe a posição do registro a ser removido: ")));
		
		if (f instanceof Programador && tipoUsuario != 1 || f instanceof Designsom && tipoUsuario != 2 || f instanceof Designgrafico && tipoUsuario != 3) {
			JOptionPane.showMessageDialog(null, "Funcionario removido não corresponde ao selecionado.");
		} else {
			arrayFuncionario.remove(Integer.parseInt(JOptionPane.showInputDialog("Informe a posição do registro a ser removido: ")));
			JOptionPane.showMessageDialog(null, "Funcionario removido com sucesso.");
		}										
	} catch (IndexOutOfBoundsException e) {
		JOptionPane.showMessageDialog(null, "Posição invalida");
	} catch (NumberFormatException ex) {
		JOptionPane.showMessageDialog(null, "Valor passado deve ser númerico");
	}
	
}	

public void alterarFuncionario(int tipoOperacao) {
	int posicao = Integer.parseInt(JOptionPane.showInputDialog("Informe a posição do registro que deseja alterar: "));
	try {
		Funcionario f = arrayFuncionario.get(posicao);			
		
		if (f instanceof Programador && tipoOperacao == 1) {
			Programador p = new Programador();			
			p.setNome(JOptionPane.showInputDialog("Nome do Funcionario: ",f.getNome()));
			p.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ",f.getIdade())));
			p.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ",f.getSalario())));
			p.setCpf(JOptionPane.showInputDialog("Informe o CPF: ",f.getCpf()));
			p.setLinguagem(JOptionPane.showInputDialog("Informe a linguagem: ", ((Programador) f).getLinguagem()));	
			arrayFuncionario.remove(posicao);
			arrayFuncionario.add(p);
			JOptionPane.showMessageDialog(null, "Funcionario alterado com sucesso.");
		} else
			if (f instanceof Designsom && tipoOperacao == 2) {
				Designsom ds = new Designsom();
				ds.setNome(JOptionPane.showInputDialog("Nome do Funcionario: ", f.getNome()));
				ds.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ", f.getIdade())));
				ds.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ", f.getSalario())));
				ds.setCpf(JOptionPane.showInputDialog("Informe o CPF: ", f.getCpf()));
				ds.setProgramaSom(JOptionPane.showInputDialog("Informe o Programa de Som: ", ((Designsom) f).getProgramaSom()));
				arrayFuncionario.remove(posicao);
				arrayFuncionario.add(ds);
				JOptionPane.showMessageDialog(null, "Funcionario alterado com sucesso.");
			} else 
				if (f instanceof Designgrafico && tipoOperacao == 3){
				Designgrafico dg = new Designgrafico();
				dg.setNome(JOptionPane.showInputDialog("Nome do Funcionario: ", f.getNome()));
				dg.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ", f.getIdade())));
				dg.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ", f.getSalario())));
				dg.setCpf(JOptionPane.showInputDialog("Informe o CPF: ", f.getCpf()));
				dg.setProgramaGrafico(JOptionPane.showInputDialog("Informe o Programa Grafico", ((Designgrafico) f).getProgramaGrafico()));
				arrayFuncionario.remove(posicao);
				arrayFuncionario.add(dg);
				JOptionPane.showMessageDialog(null, "Funcionario alterado com sucesso.");
			} else {
				JOptionPane.showMessageDialog(null, "Funcionário não corresponde ao tipo selecionado");
			}						
	} catch (IndexOutOfBoundsException e) {
		JOptionPane.showMessageDialog(null, "Posição invalida");
	}						
}

public void listarFuncionario() {
	Funcionario f;
	int tamanho = arrayFuncionario.size();
	StringBuffer resultadoConsulta = new StringBuffer();
	
	for (int i = 0; i < tamanho; i++) {
		f = arrayFuncionario.get(i);
		resultadoConsulta.append("Posição: " + i + " Nome: " + f.getNome() + "\n");
	}
	JOptionPane.showMessageDialog(null, resultadoConsulta);
}

}
[/code]

Cara ficou muito bom, porem como eu tenho que explicar na hora o trabalho valendo a minha nota hehe eu não posso usar ele.

Mais vai me ajudar BASTANTE a completar o meu.

muito obrigado mesmo.

Se mais alguem tiver dicas, eu agradeço.

Mais eu coloquei esse exemplo justamente pra isso, pra você ter uma base e qualquer coisa se tivesse duvidas perguntar =P
Copiar e colar não rende aprendizado.

Abraço brother, qualquer duvida pode perguntar que se eu souber eu respondo.

Eu estou tentando implementar usando a arraylist agora.

Achei bem interessante, sem fazer o uso de tamanho… e ela depois ja procura pra mim.

Bom cara eu dei uma editada no meu, fazendo uma junção com o teu… que ajudou BASTANTE… so que a unica coisa q esta dando de erro é no alterar.
Mais quando chega na linha propria das classes que seriam a programa som, programa grafico e linguagem.

Bom para alterar o programador, passou pela linha da linguagem sem erro, mais quando foi alterar otro tipo ele da erro logo quando entra na linha da linguagem.

O erro é o seguinte :
Exception in thread “main” java.lang.ClassCastException: trabalho.programacao.i.Designgrafico cannot be cast to trabalho.programacao.i.Designsom
at trabalho.programacao.i.Aplicacao.main(Aplicacao.java:94)


package trabalho.programacao.i;

import java.util.ArrayList;
import javax.swing.JOptionPane;
import trabalho.programacao.i.Programador;

public class Aplicacao {
    
    public static ArrayList<Funcionario> arrayFuncionario = new ArrayList<Funcionario>();  
    
    public static void main (String[]args){
        int opcao = 0, opcao2 = 0, opcao3 = 0;
        int flap = 0, flap2 = 0, flap3 = 0;
        while(flap != 1){
        opcao = 0;
        flap2 = 0;
        opcao = Integer.valueOf(JOptionPane.showInputDialog("Opcoes:\n"
                                                           + "1: Inserir Funcionario.\n"
                                                           + "2: Excluir Funcionario.\n"
                                                           + "3: Alterar Funcionario.\n"
                                                           + "4: Listar todos funcionarios.\n"
                                                           + "5: Sair.\n"));
        if(opcao == 1){
                while(flap2 != 1){
                    opcao2 = 0;
                    flap2 = 0;
                 opcao2 = Integer.valueOf(JOptionPane.showInputDialog("Adicionar:\n"
                                                                     + "1: Adicionar um Programador\n"
                                                                     + "2: Adicionar um Design Gráfico\n"
                                                                     + "3: Adicionar um Design de Som\n"));
                    if(opcao2 == 1){
                           Programador p = new Programador();
                           p.setNome(JOptionPane.showInputDialog("Digite o nome:"));
                           p.setCpf(JOptionPane.showInputDialog("Digite o Cpf:"));
                           p.setIdade(Integer.valueOf(JOptionPane.showInputDialog("Digite a Idade:")));
                           p.setSalario(Integer.valueOf(JOptionPane.showInputDialog("Digite o Salario:")));
                           p.setLinguagem(JOptionPane.showInputDialog("Digite a linguagem de programacao:"));
                           arrayFuncionario.add(p);
                           flap2 = 1;
                    }else{
                         if(opcao2 == 2){
                           Designgrafico dg = new Designgrafico();
                           dg.setNome(JOptionPane.showInputDialog("Digite o nome:"));
                           dg.setCpf(JOptionPane.showInputDialog("Digite o Cpf:"));
                           dg.setIdade(Integer.valueOf(JOptionPane.showInputDialog("Digite a Idade:")));
                           dg.setSalario(Integer.valueOf(JOptionPane.showInputDialog("Digite o Salario:")));
                           dg.setProgramaGrafico(JOptionPane.showInputDialog("Digite o nome do programa grafico:"));
                           arrayFuncionario.add(dg);
                           flap2 = 1;
                      }else{
                           if(opcao2 == 3){
                           Designsom ds = new Designsom();
                           ds.setNome(JOptionPane.showInputDialog("Digite o nome:"));
                           ds.setCpf(JOptionPane.showInputDialog("Digite o Cpf:"));
                           ds.setIdade(Integer.valueOf(JOptionPane.showInputDialog("Digite a Idade:")));
                           ds.setSalario(Integer.valueOf(JOptionPane.showInputDialog("Digite o Salario:")));
                           ds.setProgramaSom(JOptionPane.showInputDialog("Digite o nome do programa de som:"));
                           arrayFuncionario.add(ds);
                           flap2 = 1;
                          }else{
                            
                         }
                      }
                 }
              }
            
       
        }else{
            if(opcao == 2){
                Funcionario f;
                 f = arrayFuncionario.remove(Integer.parseInt(JOptionPane.showInputDialog("Informe a posição do registro a ser removido: ")));                
 
            }else{
                if(opcao ==3){
                    int posicao = Integer.parseInt(JOptionPane.showInputDialog("Informe a posição do registro que deseja alterar: "));
                    Funcionario f = arrayFuncionario.get(posicao);  
                        if(f instanceof Programador){
                            Programador p = new Programador();            
                            p.setNome(JOptionPane.showInputDialog("Nome do Funcionario: ",f.getNome()));  
                            p.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ",f.getIdade())));  
                            p.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ",f.getSalario())));  
                            p.setCpf(JOptionPane.showInputDialog("Informe o CPF: ",f.getCpf()));  
                            p.setLinguagem(JOptionPane.showInputDialog("Informe a linguagem: ", ((Programador) f).getLinguagem()));   
                            arrayFuncionario.remove(posicao);  
                            arrayFuncionario.add(p);  
                            JOptionPane.showMessageDialog(null, "Funcionario alterado com sucesso."); 
                        }else{
                            if(f instanceof Designgrafico){
                                Designsom ds = new Designsom();  
                                ds.setNome(JOptionPane.showInputDialog("Nome do Funcionario: ", f.getNome()));  
                                ds.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ", f.getIdade())));  
                                ds.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ", f.getSalario())));  
                                ds.setCpf(JOptionPane.showInputDialog("Informe o CPF: ", f.getCpf()));  
                                ds.setProgramaSom(JOptionPane.showInputDialog("Informe o Programa de Som: ", ((Designsom) f).getProgramaSom()));  
                                arrayFuncionario.remove(posicao);  
                                arrayFuncionario.add(ds);  
                                JOptionPane.showMessageDialog(null, "Funcionario alterado com sucesso.");  
                            }else{
                                if(f instanceof Designsom){
                                    Designgrafico dg = new Designgrafico();  
                                    dg.setNome(JOptionPane.showInputDialog("Nome do Funcionario: ", f.getNome()));  
                                    dg.setIdade(Integer.parseInt(JOptionPane.showInputDialog("Idade do usuário: ", f.getIdade())));  
                                    dg.setSalario(Double.parseDouble(JOptionPane.showInputDialog("Informe o Salario: ", f.getSalario())));  
                                    dg.setCpf(JOptionPane.showInputDialog("Informe o CPF: ", f.getCpf()));  
                                    dg.setProgramaGrafico(JOptionPane.showInputDialog("Informe o Programa Grafico", ((Designgrafico) f).getProgramaGrafico()));  
                                    arrayFuncionario.remove(posicao);  
                                    arrayFuncionario.add(dg);  
                                    JOptionPane.showMessageDialog(null, "Funcionario alterado com sucesso.");      
                                }
                            }
                        }
                }else{
                    if(opcao == 4){
                                Funcionario f;  
                                int tamanho = arrayFuncionario.size();  
                                StringBuffer resultadoConsulta = new StringBuffer();  
          
                                for (int i = 0; i < tamanho; i++) {  
                                    f = arrayFuncionario.get(i);  
                                    resultadoConsulta.append("Posição: " + i + " Nome: " + f.getNome() + " Cpf: " + f.getCpf() + " Idade: " + f.getIdade() + " Salario: " +f.getSalario() + "\n"); 
                                }  
                                JOptionPane.showMessageDialog(null, resultadoConsulta);  
                        
                    }else{
                        if(opcao == 5){
                            System.exit(1);
                        }else{
                            JOptionPane.showInputDialog("Opcao invalida, tente novamente");
                        }
                    }
                }
            }
        }
    }
}
}

Consertei… foi só plena falta de atenção ali no (instanceof) que no som eu botei do grafico e vice-versa. Vlw ae pela ajuda cara… consegui completar esse trabalho com isso, obrigado mesmo.

Eu so preciso agora saber dessa linha

ds.setProgramaSom(JOptionPane.showInputDialog("Informe o Programa de Som: ", ((Designsom) f).getProgramaSom()));  

Oque significa essa parte --> ((Designsom) f).getProgramaSom()));

Vlw ae.

[quote=kelvinoenning]Consertei… foi só plena falta de atenção ali no (instanceof) que no som eu botei do grafico e vice-versa. Vlw ae pela ajuda cara… consegui completar esse trabalho com isso, obrigado mesmo.

Eu so preciso agora saber dessa linha

ds.setProgramaSom(JOptionPane.showInputDialog("Informe o Programa de Som: ", ((Designsom) f).getProgramaSom()));  

Oque significa essa parte --> ((Designsom) f).getProgramaSom()));

Vlw ae.[/quote]

[quote]Iae cara beleza? Seguinte estava aqui olhando sua dúvida e seu código. Eu só queria dizer um breve comentário, e espero que seja útil pra você.
Acho que você deveria separar sua camada de vizualização. Exemplo quando você for popular suas entidades criar uma classe só pra isso retornando o objeto em questão.
Depois quem sabe criar uma classe para o menu? Lá poderia criar seus menus com switch, ao invés desse tanto de if e else que você fez.
E por fim na sua classe Aplicacao criar o método main, instânciando a classe Menu. Existe um termo se assim posso chamar que é essencial no paradigma orientado a objetos.
Baixo acoplamento e Alta coesão. Ops…escrevi demais né. É isso ai espero que faça algum sentido pra você. :smiley:
[/quote]