Instanciar Classes (Iniciante)

Oi, gente!
Sou iniciante e estou tendo uma dúvida quanto a instanciação das classes…
Se, por exemplo, eu instanciar uma classe Aluno, e tivesse n alunos dentro de uma sala de aula, seria necessário criar n objetos?
Obrigada!

Aham. seria necessário.
Pois um objeto do tipo Aluno representará apenas um aluno.
Caso a sua sala de aula tenha 48 alunos, terá que ter 48 objetos aluno, assim armazenando as informações de cada um.

1 curtida

Se você precisa manter uma referência para cada aluno individualmente, sim.

A abordagem mais comum caso você queira manipular um conjunto de objetos de uma mesma classe é usar algum coleção, como uma lista (List -> ArrayList, LinkedList), vetor/matriz (Arrays comuns), conjunto (Set ->HashSet) ou mapa (Map -> HashMap, HashTable), etc.

Letura de referência: https://www.caelum.com.br/apostila-java-orientacao-objetos/collections-framework/

Abraço.

1 curtida

Porém, e se eu não souber, por exemplo, a quantidade de alunos que estão nessa sala de aula? Quantos e como os objetos teriam que ser criados?

Caso você não saiba inicialmente a quantidade de alunos, você pode criar os objetos sob demanda (o que é bem comum).

Por exemplo, imagine que você tem um conjunto onde você vai guardar os alunos. Esse conjunto começa vazio. A pessoa que estiver utilizando o programa para cadastrar alunos vai clicar no botão “Novo Aluno” (ou utilizando a linha de comando mesmo, indiferente) e vai prover as informações do novo aluno. Com essas novas informações, você instancia um novo objeto Aluno (new Aluno(nome, idade, etc);) e guarda esse aluno no conjunto que foi criado inicialmente. Agora o conjunto possui 1 aluno. Se você automatiza a parte de adição (ou cadastro) de alunos, não é necessário saber a quantidade!

Pense na classe como uma forma de bolo, e nos bolos moldados na forma como suas instâncias. A fábrica que faz a forma sabe quantos bolos vão ser moldados nela?

Essa resposta é totalmente baseada no teu exemplo de Aluno. As vezes, faz sentido que um objeto represente mais do que exatamente uma entidade do mundo real.

Por exemplo, imagine um sistema onde se controlam árvores (isso, plantas mesmo). As informações que precisamos ter são: a altura da árvore, a quantidade de folhas e a cor das folhas. Podemos pensar em duas classes: Arvore e Folhas. Em Arvore, temos o atributo altura e um atributo folhas do tipo Folhas. Já na classe Folhas, temos dois atributos: quantidade e cor. No nosso modelo, não há nenhuma necessidade de distinguir uma folha de outra, portanto podemos representar o conjunto com apenas um objeto.

Ainda no exemplo da árvore, seria possível também instanciar um objeto da classe Folha para representar cada folha individualmente, caso fosse necessário fazer a distinção. Imagine a quantidade absurda de objetos que seriam criados, caso representássemos uma floresta inteira!

1 curtida

Olá, você poderia criar uma fábrica de aluno, assim quando quiser adicionar um novo Aluno , bastar chama o método de criação , que vai retorna um objeto do tipo Aluno, e adicionar em uma lista.
exemplo:

ALUNO

public class Aluno {

	private String nome;
	private int idade;
	private double notas[];

	public Aluno(String nome, int idade, double... notas) {
		this.nome = nome;
		this.idade = idade;
		this.notas = notas;
	}

	public Aluno(String nome, int idade) {
		this.nome = nome;
		this.idade = idade;
	}

	public String getNome() {
		return nome;
	}

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

	public int getIdade() {
		return idade;
	}

	public void setIdade(int idade) {
		this.idade = idade;
	}

	public double[] getNotas() {
		return notas;
	}

	public void setNotas(double[] notas) {
		this.notas = notas;
	}

	@Override
	public String toString() {
		if (notas != null) {
			return "Aluno [nome=" + nome + ", idade=" + idade + ", notas=" + Arrays.toString(notas) + "]";
		}
		return "Aluno [nome=" + nome + ", idade=" + idade + ", notas= sem notas no sistema"  + "]";
	}

}

FÁBRICA DE ALUNO

public class FabricaAluno {
	
	 //A fábrica de aluno, vai retornar uma instancia de aluno
	 
	public Aluno criarAluno(String nome, int idade, double...notas){
		return new Aluno(nome, idade, notas);
	}
	public Aluno criarAluno(String nome, int idade){
		return new Aluno(nome, idade);
	}
}

MAIN

public class Main {

	public static void main(String[] args) {

		List<Aluno> list = new ArrayList<>();
		// fábrica que criar aluno
		FabricaAluno frabica = new FabricaAluno();

		Aluno aluno = frabica.criarAluno("José", 25);
		// adicionei um aluno
		list.add(aluno);

		// novo aluno
		aluno = frabica.criarAluno("Francisco", 24);
		// adicione outro aluno
		list.add(aluno);

		// novo aluno
		aluno = frabica.criarAluno("Maria", 57, 8, 7, 6, 8);
		// adicione outro aluno
		list.add(aluno);

		System.out.println(list);

	}
}
1 curtida