Dividir codigos

Minha duvida é a seguinte, estou implementando uma classe para gerenciar um cadastro de pessoas onde há varios metodos como:

  • inserir nova pessoa
  • listar todas as pessoas
  • buscar pessoas por nome
    dentre outros!

Porem em java todos os codigos de uma determinada classe tem que ficar dentro doo mesmo aquivo, o que torna o arquivo muito grande e de dificil visualização se tiver muitos metodos, queria dividir os metodos de uma classe em arquivos diferentes assim pois assim acho mais facil programar.

Tem como fazer isso sem maiores problemas???

Acredito que você deva deixar os metodos dentro da mesma classe se a funcao deles tem um “objetivo em comum”. Use dobramentos de codigo na sua IDE. Voce nao precisa ver todo o metodo. Agora se seus metodos tem “especialidades” voce deve tentar identificar essas especialidades e usar herança ou composicao…

Você pode separar sim seu código. Dê uma lida sobre pacotes(package) em java. Usamos os menos para organizar nossa aplicação.

Ex:

Pacote: aplication.entity
Responsável por guardar nossas classes persistente, nossas entidades.

Pacote: aplication.session
Responsável por guardar nossos componentes de sessão

Pacote: aplication.util
Responsável por guardar conexões, classe de mensagens, etc.

No pacote aplication.session eu tenho o bean chamado de ControleAgenda que será responsável para realizar as operações necessárias para Cadastro, Leitura, Edição e Remoção de contatos de uma agenda telefônica. Tenho um objeto chamado Agenda no pacote aplication.entity, que contém nome, tel etc.

Quando for utilizar esse objeto Agenda na classe ControleAgenda, você iria utilizar o IMPORT. Importaria o pacote responsável pelas entidades.

[code]package aplication.session;

import aplication.entity.Agenda; // Ou (import aplication.entity.*:wink: para todas as entidades.

public class ControleAgenda{

    Agenda agenda;

}
[/code]

Dê uma olhada nas apostilas da Caelum, são ótimas.

Acredito que no caso ele esta falando de uma classe que tem um objetivo bem especifico: no caso representaria um repositorio. Nao sei se deveria dividir nao…

Segue o que quero dividir abaixo…
no caso, queria dividir os metodos fora o main em arquivos diferentes.

import java.util.Scanner;
public class Main {
	private static Scanner entrada = new Scanner(System.in);
	private static Pessoas vetPessoas[] = new Pessoas[1000];
	public static void main(String[] args) {
		String op;
		int numPessoa = 0;
		int num=-1;
		Pessoas insere;
		do{
			System.out.print("Digite:" +
					"\n1 - Inserir nova pessoa" +
					"\n2 - Buscar pessoa por nome" +
					"\n3 - Listar todas as pessoas" +
					"\n4 - Desativar pessoa" +
					"\n0 - Sair" +
					"\n-> ");
			op = entrada.nextLine();
			try{
				num = Integer.parseInt(op);  
			}catch(Exception e){
				num = -1;
			}
			if(num==1){
				insere = lePessoa(numPessoa);
				if(insere != null){
					vetPessoas[numPessoa] = insere;
					numPessoa++;
				}
			}else if(num==2){
				buscaPessoa(vetPessoas,numPessoa);
			}else if(num==3){
				listaPessoas(vetPessoas,numPessoa);
			}else if(num==4){
				desativaPessoa(vetPessoas,numPessoa);
			}else if(num==0){
				System.out.println("Programa Encerrado!");
			}else{
				System.out.println("Opção invalida, tente novamente!");
			}
		}while(num!=0);
	}
	public static Pessoas lePessoa(int numPessoa){
		Pessoas unidade = new Pessoas();
		try{
			unidade.setCodigo(numPessoa);			
			System.out.print("Informe o nome: ");
			unidade.setNome(entrada.nextLine());
			System.out.print("Informe o CPF: ");
			unidade.setCPF(entrada.nextLine());
			System.out.print("Informe o telefone: ");
			unidade.setTelefone(entrada.nextLine());
			System.out.print("Informe a data de nascimento: ");
			unidade.setDataNascimento(entrada.nextLine());	
			unidade.setStatus("on");	
			return(new Pessoas(unidade.getCodigo(),unidade.getNome(),unidade.getCPF(),unidade.getTelefone(),unidade.getDataNascimento(),unidade.getStatus()));
		}catch(Exception e){
			unidade = null;
			System.out.println("Ouve um erro de digitação por favor tente novamente");
			return null;
		}
	}
	public static void buscaPessoa(Pessoas vetPessoas[],int numPessoa){
		System.out.print("Informe o nome da pessoa: ");
		String nome = entrada.nextLine();
		int cond = 0;
		for(int i=0;i<numPessoa;i++){
			if(vetPessoas[i].equals(nome,1) && vetPessoas[i].equals("on",2)){
				System.out.println(vetPessoas[i].toString()+"\n");
				cond = 1;
			}
		}
		if(cond == 0){
			System.out.println("Pessoa não encontrada!!!\n");
		}
	}
	public static void listaPessoas(Pessoas vetPessoas[],int numPessoa){
		System.out.println("Código\tNome");
		for(int i=0;i<numPessoa;i++){
			if(vetPessoas[i].equals("on",2)){
				System.out.println(vetPessoas[i].getCodigo()+"\t"+vetPessoas[i].getNome());
			}
		}
		System.out.println();
	}
	public static void desativaPessoa(Pessoas vetPessoas[],int numPessoa){
		System.out.print("Informe o código da pessoa: ");
		String codigo = entrada.nextLine();
		int num = -1;
		try{
			num = Integer.parseInt(codigo);
		}catch(Exception e){
			num = -1;
		}
		if(num>=0 && num<numPessoa){
			vetPessoas[num].setStatus("off");
			System.out.println("Pessoa desativada");
		}else{
			System.out.println("Código invalido");
		}
	}
}

Amigo como falei acho que voce deveria fazer só mais uma classe nesse caso(um repositorio de pessoas ou coisa do tipo). Você vai ter que lidar muitas vezes com classes muito maiores que essa…Tem outras coisas tambem que voce poderia fazer para organizar o codigo, por exemplo: em vez desse if/else do main voce poderia usar um switch. Ele foi feito pra esse tipo de situacao; No metodo lePessoa nao tem necessidade de voce instanciar uma nova pessoa só para o retorno. Voce poderia simplesmente retornar “unidade”.

Classes voce deve separar usando bom senso e tentando modelar o mundo real. Seus metodos fazem o papel de um repositorio onde voce busca e remove, entao deve haver uma classe para fazer isso. E no caso o seu vetor de pessoas deveria ficar dentro dela tambem e nao na main.