Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-05-2009, 09:26   #1
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
[JAVA] Uso interface, ho fatto giusto? Qualche dubio...

Ciao,
tra pochissimi giorni avrò un esame universitario di Java...vi propongo un esercizio di un vecchio appello e la mia soluzione, mi potreste dire se ho fatto giusto? Sembra lungo ma in realtà il dubbio ce l'ho solo sull'implementazione di una classe, il resto del codice lo posto solo per completezza.

Questo è il testo d'esame:

Siano date le due classi CollezioneDiStringhe e CollezioneDiInteger, le cui specifiche sono
illustrate nel seguito:

1) CollezioneDiStringhe rappresenta e gestisce collezioni statiche di oggetti di tipo String non
contenenti duplicati. La sua interfaccia è la seguente:

Codice:
CollezioneDiStringhe(String[] S): il costruttore che crea un oggetto istanza di CollezioneDiStringhe il cui stato corrisponde ad S privato degli eventuali duplicati;

int size(): restituisce il numero di elementi della collezione;

String get(int i): se il parametro i ha un valore valido restituisce la i–esima stringa della collezione, altrimenti restituisce null.
2) CollezioneDiInteger rappresenta e gestisce collezioni dinamiche di oggetti di tipo Integer. La
sua interfaccia è la seguente:


Codice:
CollezioneDiInteger(): il costruttore che crea un oggetto istanza di CollezioneDiInteger il cui stato corrisponde alla collezione vuota;

void add(int n): aggiunge il parametro alla collezione;

Integer get(int i) throws IndiceErratoException: se il parametro i ha un valore valido restituisce l’i–esimo elemento della collezione, altrimenti solleva una eccezione checked di tipo IndiceErratoException.

Problema 1. Si consideri un metodo di tipo boolean cercaElemento che prende in ingresso due parametri,
C e og: il tipo del primo parametro C è una collezione generica di oggetti, mentre il secondo parametro og è
un oggetto generico. Il metodo cercaElemento estrae da C un iteratore e, utilizzando tale iteratore, verifica se
og è contenuto in C. Si richiede il progetto e l’implementazione in linguaggio Java di cercaElemento e di
tutti gli eventuali tipi di dato coinvolti.

Problema 2. Si richiede il progetto e l’implementazione in linguaggio Java di due tipi di dato corrispondenti
a CollezioneDiStringhe e CollezioneDiInteger in modo tale che essi possano essere parametri del
metodo cercaElemento.


MIA SOLUZIONE:

Vabbè per risolvere il primo punto semplicemente creo una classe Test dove ci caccio dentro il metodo static cercaElemento. A tale metodo faccio prendere in input un parametro di tipo CollConIteratore (che rappresenta una generica collezione dotata di iteratore) ed un object.

Allora definisco un'interface CollConIteratore che appunto mi definisce le caratteristiche di una generica colezione dotata di iteratore e tale caratteristica è proprio l'avere disponibile un iteratore.

Infine prendo le due classi che mi dà lui, le incarto in altre due classi che chiamo CollStrConIteratore e CollIntConIteratore che estendono rispettivamente le relative due classi fornitemi e che implementano entrambe la mia interface CollConIteratore.

Vi posto i codici delle varie classi tanto per maggior chiarezza ma il vero dubbio lo ho sulla classe CollIntConIteratore

classe Test:

Codice:
public class Test{
	
	/** EFFECTS: Verifica se il parametro og è contenuto nella collezione referenziata dal paramentro c
		@param: c di tipo CollConIteratore
		@param obg ti tipo Object
		@return: un valore booleano */
	
	static boolean cercaElemento(CollConIteratore c, Object obg){
		
		boolean ris = false;
		Iterator it = c.enumera();			// Estrae un iteratore da c
		
		/* Finchè nella collezione ci sono ancora elementi su cui iterare e finchè non è stato trovato un elemento nella
		   collezione */
		while(it.hasNext() && !ris){
			if(obj.equals(it.next())	// Se il parametro obj equivale all'elemento corrente su cui si sta iterando
					ris = true;			// setta ris a true
			
			it.remove;	// Elimina l'elemento corrente dall'iteratore (non dalla collezione) e passa al prossimo elemento
		}
		
		return ris;		// Ritorna ris al chiamante;
	}
}
Interface CollConIteratore:

Codice:
public interface CollConIteratore{
	public Iterator enumera();
}
Classe CollStrConIteratore:

Codice:
public class CollStrConIteratore extends CollezioneDiStringhe implements CollConIteratore{ // Ereditarietà multipla
	
	/** EFFECTS: Costruisce un oggetto di tipo CollStrConIteratore eliminando i duplicati dall'array parametro
		@param: Un'array di stringhe
		@return: Il riferimento ad un nuovo oggetto di tipo CollStrConIteratore */
	
	public CollStrConIteratore(String[] x){
		super(x);		// Invoca il costruttore della superclasse CollezioneDiStringhe passandogli l'array di stringhe x
	}
	
	public Iterator enumera(){			// Metodo enumera 
		return new MioIteratore();		// che restituisce un oggetto di tipo MioIteratore definito nella classe interna
	} 
	
	/* Nella classe interna MioIteratore implemento i metodi dell'interface Iterator */
	private class MioIteratore implements Iterator{	
		
		int i;
		
		public MioIteratore(){			// COSTRUTTORE DEL GENERATORE
			i = 0;						// Quando viene costruito parte ad iterare dal primo elemento della collezione
		}
		
		public Object next(){			// Restituisce l'i-esimo elemento della collezione
			return get(i);
		}
		
		public boolean hasNext(){		// Dice se c'è un altro elemento nella collezione
			return i<size();
		}
		
		public void remove(){	 // Rimuove l'elemento dall'iteratore (non dalla collezione) passando al prossimo elemento
			i++;
		}
	}
}
Classe CollIntConIteratore:

Codice:
public class CollIntConIteratore extends CollezioneDiInteger implements CollConIteratore{	// Ereditarietà multipla

	/* NELLA SOTTOCLASSE CollIntConIteratore NON C'E' BISOGNO DI IMPLEMENTARE IL COSTRUTTORE IN QUANTO NELLA CLASSE PADRE
	   CollezioneDiInteger IL COSTRUTTORE E' SENZA PARAMETRO */
	   
	public Iterator enumera(){			// Metodo enumera 
		return new MioIteratore();		// che restituisce un oggetto di tipo MioIteratore definito nella classe interna
	} 
	
	/* Nella classe interna MioIteratore implemento i metodi dell'interface Iterator */
	private class MioIteratore implements Iterator{
		
		public MioIteratore(){			// COSTRUTTORE DEL GENERATORE
			i = 0;						// Quando viene costruito parte ad iterare dal primo elemento della collezione
		}
		
		public Object next(){			// Restituisce l'i-esimo elemento della collezione
			Object ris;
			
			try{						// Prova ad eseguire l'operazione
				ris = get(i);			// Metti in ris il riferimento all'i-esimo oggetto della collezione
			}catch(IndiceErratoException e){  // Se viene sollevata una IndiceErratoException (quando ho iterato su tutti gli elementi
				throw IndiceErratoException	  // Rilancia al chiamante l'eccezione così si accorge che non ci sono più elementi su cui iterare
				}
			
			return ris;
		}
	
		public boolean hasNext(){				// Dice se c'è un altro elemento nella collezione
			boolean EsistProssimo = true;					// Setto a true la variabile booleana EsisteProssimo
		
			try{			// Prova ad eseguire il metodo get() sull'(i+1)-esimo elemento della collezione
				get(i+1);
			}catch(IndifceErratException e){	// Se viene sollevata l'eccezione significa che l'i-esimo elemento era l'ultimo
				ris = false;					// allora gestisce l'eccezione settando EisteProssimo a false
			}
		
			return EsisteProssimo;
		}
	
		public void remove(){	 // Rimuove l'elemento dall'iteratore (non dalla collezione) passando al prossimo elemento
			i++;
		}
	}
	
}

Ah vabbè mi sono appena accorto che in teoria nelle classi dovrei importare l'iteratore fornito dalla JDK ma vabbè quella è una riga per ogni classe...

Cmq il dubbio è sulla mia implementazione di CollIntConIteratore sopratutto per quanto riguarda il metodo next che voglio che fornisca l'elemento corrente della collezione (l'elemento che non è stato ancora eliminato dall'iteratore con delete).
Posso farlo quel giochetto dell'ecezione che ho fatto? cioè che se next prova ad accedere ad un elemento non valido gli arriva l'eccezione e lui gestendola la rilancia al chiamante che viene così avvertito che l'elemento non è valido?

Discorso simile per il metodo hasNext dove se provo ad accedere al successivo elemento e ricevo un'eccezione allora la gestisco settando a false la variabile...si può fare?

Please help me

Grazie
Andrea
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 11:35   #2
D4rkAng3l
Bannato
 
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
up
D4rkAng3l è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Ecovacs presenta la gamma 2026: paviment...
Efficienza energetica fino a 2.000 volte...
Lenovo 360: il programma di canale dell'...
Appena 10.000 qubit per rompere la critt...
Analisi dei transistor durante il funzio...
Attacco informatico a Booking.com: espos...
A quattro mesi dal divieto dei social ne...
NVIDIA GeForce RTX 5060 e 5060 Ti: in ar...
Rebellions, Arm e SK Telecom, nuova alle...
Modernizzazione delle app: Red Hat OpenS...
Nel mirino di Google c'è il back ...
PRAGMATA in bundle con GeForce RTX 5000:...
Le novità MOVA per il 2026: robot e impi...
Windows, stop all'attivazione telefonica...
ASUS porta la serie TUF nel formato Mini...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:55.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v