Oggetti e allocazione di memoria()

di il
2 risposte

Oggetti e allocazione di memoria()

Ciao.
per quanto riguiarda la memoria, conviene scrivere un codice come questo o usare gli oggetti m1, m2, m3, m4?

public class TestUni {

	public static void main(String[] args) {
		// crea il corso di laurea
		Materia m1 = new Materia("Informatica");
		Materia m2 = new Materia("Analisi");
		Materia m3 = new Materia("Fisica");
		Materia m4 = new Materia("Biologia");
		CorsoDiLaurea corsoDiLaurea = new CorsoDiLaurea("Ing.Informatica");
		corsoDiLaurea.aggiungiMateria(m1);   // oppure    corsoDiLaurea.aggiungiMateria(new Materia("Informatica"));  ?????
		corsoDiLaurea.aggiungiMateria(m2);
		corsoDiLaurea.aggiungiMateria(m3);
		// crea un professore
		Professore professore = new Professore("Tizio", "Caio");
		professore.aggiungiMateria(m1);   // oppure    professore.aggiungiMateria(new Materia("Informatica"));  ?????
		// crea uno Studente
		// associa Studente corso di laurea
		// sostiene due esami
		Studente studente = new Studente("Pippo", "Pluto", "123456", corsoDiLaurea);
		studente.aggiungiEsamiSostenuti(m1, 27))  // oppure    studente.aggiungiEsamiSostenuti(new Materia("Informatica"), 27);  ?????
		studente.aggiungiEsamiSostenuti(m2, 24))  // oppure    studente.aggiungiEsamiSostenuti(new Materia("Analisi"), 24);  ?????
		
	...........
	...........
	...........
	}
}
Gli oggetti di tipo Materia finiscono in un ArrayList.
A questo punto, conviene istanziare e mantenere gli oggetti m1,2,3,4 oppure aggiungerli all'ArrayList con new Materia() e lasciare che poi vengano distrutti?

ovviamente se dovessi usare gli oggetti Materia per altre cose, userei m1 come ho fatto, ma questa è un'altra sotria.

A livelo di prestazioni e memoria, se un oggetto serve solo in quell'istante, conviene crearlo come variabile e poi passarlo come parametro o crearlo direttamente quando si chiama il metodo?
come conviene fare?
Non so se mi sono spiegato
Grazie.
tagan

2 Risposte

  • Re: Oggetti e allocazione di memoria()

    tagan ha scritto:


    		corsoDiLaurea.aggiungiMateria(m1);   // oppure    corsoDiLaurea.aggiungiMateria(new Materia("Informatica"));  ?????
    		professore.aggiungiMateria(m1);   // oppure    professore.aggiungiMateria(new Materia("Informatica"));  ?????
    		studente.aggiungiEsamiSostenuti(m1, 27))  // oppure    studente.aggiungiEsamiSostenuti(new Materia("Informatica"), 27);  ?????
    		studente.aggiungiEsamiSostenuti(m2, 24))  // oppure    studente.aggiungiEsamiSostenuti(new Materia("Analisi"), 24);  ?????
    
    Se ai primi 3 metodi passi "al volo" un nuovo oggetto Materia (come hai scritto nei commenti) hai ovviamente ... 3 oggetti distinti. Necessita chiaramente di più memoria. E quindi serve proprio? Dipende anche da cosa ci devi fare con un oggetto Materia. E' una classe "mutabile" o "immutabile"? Se è mutabile, ciascuno dei tre oggetti distinti può variare in modo indipendente dagli altri. Se invece fosse immutabile, NON c'è (di norma) alcun motivo particolare per avere più oggetti con lo stesso stato ... ne basta uno solo!
  • Re: Oggetti e allocazione di memoria()

    La classe Materia in realtà l'ho creata classe per esercitarmi in modo da inglobare classi create da me, ma in effetti è solo una stringa.
    
    public class Materia {
    	private String nome;
    
    	public Materia(String nome) {
    		setNome(nome);
    	}
    
    	public String getNome() {
    		return nome;
    	}
    
    	private void setNome(String nome) {
    		this.nome = nome;
    	}
    }
    
    Lasciarla classe, dovrebbe essere immutabile perché "Matematica" è "Matematica", non diverrà mai "Italiano".
    il metodo SetNome è privato e una volta istanziata non potrà mai cambiare. In effetti questa classe ha la stessa utilità di una stringa.

    Comunque mi pare di capire che conviene di rado creare oggetti al volo, solo nei casi in cui serve al momento un metodo ma poi nient'altro e lasciare che venga distrutto.
    Ho visto alcuni esempi in cui gli oggetti venivano creati in quel modo, senza un reference, ma non c'erano commenti del perché veniva fatto.
    Grazie.

    PS: cmq il tuo blog è fico. lo seguirò spesso...!
Devi accedere o registrarti per scrivere nel forum
2 risposte