Vincular classes

Boa noite, tenho um trabalho da faculdade de cadastro de alunos, disciplinas e cursos. Tenho que vincular alunos com disciplinas e curso e disciplinas com cursos. To batendo cabeça e nao consigo entender como fazer isso na hora do cadastro. Vou cadastrar as disciplinas numa lista e como vou cadastrar o aluno com tal disciplina?

Não entendi como você quer:
Assim?
Disciplina>
João
Pedro
Tiago

ou
João>
Matematica
Historia

Acho que o mais facil seria assim:
Curso>Disciplinas>aluno

Voce cria as classes separadas ai no curso vc adiciona um ArrayList de Disciplinas, e nas disciplinas um ArrayList de Aluno.

public class Aluno extends Pessoa{

//CARACTERISTICAS: CURSO E DISCIPLINAS MATRICULADAS
//CADA PESSOA PODE TER ATE 5 DISCIPLINAS VINCULADAS

public Aluno() {
	super();
}

public Aluno(String nome, Integer matricula) {
	super(nome, matricula);
}

@Override
public String toString() {
	return "Aluno\n"
			+ "Nome: " + getNome() + "\n"
			+ "Matrícula: " + getMatricula() + "\n\n";
}

}

E vou ter a classe Disciplina e Cursos com seus atributos. Precisava cadastrar esses Alunos vinculando eles com ate 5 disciplinas e 1 curso.

Manda Disciplina e Curso tbm

public class Aluno extends Pessoa{

//CARACTERISTICAS: CURSO E DISCIPLINAS MATRICULADAS
//CADA PESSOA PODE TER ATE 5 DISCIPLINAS VINCULADAS

public Aluno() {
	super();
}

public Aluno(String nome, Integer matricula) {
	super(nome, matricula);
}

@Override
public String toString() {
	return "Aluno\n"
			+ "Nome: " + getNome() + "\n"
			+ "Matrícula: " + getMatricula() + "\n\n";
}

}

public class Curso {

private String nome, unidade;



@Override
public String toString() {
	return "Curso: " + nome + "Unidade: " + unidade;
}

public Curso(){
	
}

public Curso(String nome, String unidade) {
	super();
	this.nome = nome;
	this.unidade = unidade;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getUnidade() {
	return unidade;
}

public void setUnidade(String unidade) {
	this.unidade = unidade;
}

//CARACTERISTICAS: LISTA DE DISCIPLINAS

}

public class CadastroAluno {

//CADASTRO VIA MATRICULA
List<Aluno> alunos = new ArrayList<Aluno>();

public void novoAluno(){
	Aluno aluno = new Aluno();
	aluno.setMatricula(Integer.parseInt(JOptionPane.showInputDialog("Informe sua matrícula: ")));
	aluno.setNome(JOptionPane.showInputDialog("Informe seu nome: "));
	alunos.add(aluno);
	return;
}

public void alunosCadastrados(){
	for(int i = 0; i < alunos.size(); i++){
		JOptionPane.showMessageDialog(null, alunos.get(i));
	}
}

}

Cara o modo que vc fez fica muito confuso mesmo. Vc ta criando primeiro o aluno. E porque uma classe pra cadastrar o aluno? Onde o Aluno estuda?
Ele pertence a algum curso
http://oi66.tinypic.com/2a8ep92.jpg
Dentro de curso vc criar um Array de Disciplica
Dentro de Disciplica em Array de Aluno

Você pode criar 3 classes, a classe Aluno vai ter uma composição da classe Disciplina e da classe Curso, e a classe Disciplina vai conter uma composição da classe Curso, basicamente ficaria mais ou menos desta forma:

Classe Disciplina:

public classe Disciplina {
    private int id;
    private String nome;

   public Disciplina (int id, String nome) {
       this.id = id;  
       this.nome = nome;  
   }
}

Classe Curso com uma composição da classe Disciplina:

public classe Curso {
    private int id;
    private String nome;
    private Disciplina[] disciplina;
    
    // posso criar um construtor com o número de disciplinas padrão que seria 5
    public Curso (int id, String nome, Disciplina disciplina) {
        this.disciplina = new Disciplina[5] 

        this.id = id;
        this.nome= nome;
        this.disciplina = disciplina;
    }

    // criar outro construtor com um número de disciplinas que determino
    public Curso (int id, String nome, int numero, Disciplina disciplina) {
        this.disciplina = new Disciplina[numero] 

        this.id = id;
        this.nome= nome;
        this.disciplina = disciplina;
    }
}

A classe Aluno no momento que criei a composição Curso, ela por ter a composição de Disciplina, minha classe Aluno vai ter vinculo indiretamente com Disciplinas.

public classe Aluno {`
    private int id;
    private String nome;
    private Curso curso;
}

Criando os objetos:

public static void main(String[] args) {

    Disciplinas disciplinas;
    disciplinas = new Disciplina[3];

    disciplinas[0].setNome("dis1");
    disciplinas[1].setNome("dis2");
    disciplinas[3].setNome("dis3");

    Curso curso = new Curso(1, 3, disciplinas);

    Aluno aluno = new Aluno(1, "NomeAluno", curso);
}

desculpa reabrir a pergunta mas, estou fazendo algo parecido e ao tentar criar o construtor de Curso, ele da erro pois ou escrevo
private Disciplina[] disciplina para usar em this.disciplina = new Disciplina[5]
ou escrevo
private Disciplina disciplina para usar em this.disciplina = new Disciplina
Estou fazendo algo de errado?

Boa tarde!

Poste o trecho do seu código e o erro que está obtendo, fica mais fácil de conseguir te ajudar.

Estava criando algo bem parecido… segue trecho abaixo:

import java.util.ArrayList;
import java.util.List;

public class Curso {
	private String nomeCurso;
	private Disciplina[] disciplina;
	List<Disciplina> Disciplinas = new ArrayList<Disciplina>();
	
	public Curso (String nomeCurso, Disciplina disciplina) {
        this.disciplina = new Disciplina[5];
        		
        this.nomeCurso = nomeCurso;
        this.disciplina = disciplina;  // <- erro está aqui pois o eclipse manda declarar no construtor como Disciplina[] disciplina
	}
}

Ou se eu remover o ; de this.disciplina = new Disciplina[5]

import java.util.ArrayList;
import java.util.List;

public class Curso {
	private String nomeCurso;
	private Disciplina[] disciplina;
	List<Disciplina> Disciplinas = new ArrayList<Disciplina>();
	
	public Curso (String nomeCurso, Disciplina disciplina) {
        this.disciplina = new Disciplina[5] <-- Error insert arrayInitializer 
        		
        this.nomeCurso = nomeCurso;
        this.disciplina = disciplina;
	}
}

Pronto, tem uma pequena diferença entre a solução desse tópico e o seu, no exemplo que usei eu declarei um array de Disciplina e você está declarando uma List de Disciplina.

A List é uma interface que tem controle preciso sobre onde na lista cada elemento é inserido. O usuário pode acessar elementos por seu índice inteiro (posição na lista), procurar elementos na lista, ordernar, entre várias outras métodos de auxilio para gerenciamento dos objetos contidos no array.

Eu nunca precisei usar uma interface List com um número fixo de elementos, mas caso realmente seja o seu interesse achei uma solução para isso:

Então, para o seu erro, o unico problema está nessa inicialização:

this.disciplina = new Disciplina[5] <-- Error insert arrayInitializer

Você teria que remover isso, e caso queira inicializar sua lista dentro do construtor, teria que fazer:

this.disciplinas = new ArrayList<Disciplina>();

Com esse trecho não precisa mais da inicialização na declaração da List, então ficaria:

private List<Disciplina> disciplinas;

E caso realmente precise trabalhar com uma List com um número fixo de elementos, pode ver o post do stackoverflow que te passei acima. Espero te ajudado, um abraço.

1 curtida