Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-05-2010, 12:14   #1
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
[Java] Pattern Decorator, non riesco a capire dove sia l'errore :-(

mmm...mi dà un errore che non riesco proprio a capire da cosa dipenda !!! Ci stò impazzendo.

L'esempio è il seguente:

1) Ho un'interfaccia Employee che è l'interfaccia comune e che rappresenta un generico impiegato e che serve a garantire la relazione di aggregazione

2) Ho la classe concreta Engineer che implementa l'interfaccia Employee: un ingegnere è un impiegato.

3) Ho la classe astratta ResponsibleWorker che implementa sempre l'interfaccia Employee e che mi servirà per definire i vari decoratori concreti della classe concreta Engineer

4) Ed ho due estensioni di ResponsibleWorker che mi servonoa decorare Engineer e che sono: AdministrativeManager e ProjectManager

Il mio codice è il seguente:

1) Interfaccia Employee:
Codice:
/* E' l'interfaccia comune che rappresenta un generico impiegato e serve a garantire la relazione di
 * aggregazione tra oggetti concreti che rappresentano diversi tipologie di impiegati */

public interface Employee {
	
	public String getName();	// Un generico oggetto impiegato deve saper ritornare il suo nome
	public String getOffice();	// ritorna l'ufficio dove lavora l'impiegato
	public void whoIs();		// Stampa chi è l'impiegato, dove lavora e la sua eventuale qualifica

}
2) Classe Engineer:
Codice:
/* E' la classe concreta di base: un impiegato può essere un ingegnere */

public class Engineer implements Employee {
	
	private String name;		// nome dell'impiegato
	private String office;		// nome dell'ufficio dove lavora l'impiegato
	
	/* Costruttore: riceve il nome dell'impiegato ed il nome dell'ufficio dove lavora e costruisce un
	 * nuovo oggetto di tipo Engineer */
	public Engineer(String nam, String off){
		name = nam;
		office = off;
	}
	
	// Metodo che ritorna al chiamante il nome dell'impiegato:
	public String getName(){
		return name;
	}
	
	// Metodo che ritorna al chiamante il nome dell'ufficio dove lavora l'impiegato:
	public String getOffice(){
		return office;
	}
	
	// Metodo che stampa chi è l'impiegato e dove lavora:
	public void whoIs(){
		super.whoIs();			// Per prima cosa invoca il metodo whoIs del supertipo (se c'è)
		// Poi stampa un messaggio personalizzato per quel particolare tipo di impiegato
		System.out.println("Sono " + getName() + " e lavoro all'ufficio " + getOffice() + ".");
	}

}
3) Casse astratta ResponsibleWorker:
Codice:
/* Classe astratta che implementa l'interfaccia Employe e le cui estensioni rappresentano i vari
 * decorator della classe concreta di base --> Engineer potrà essere decorato con diverse
 * responsabilità rappresentate dalle estensioni di ResponsibleWorkere: AdministrativeManager e 
 * ProjectManager */

public abstract class ResponsibleWorker implements Employee {
	
	protected Employee responsible;		// Un impiegato è un generico responsabile
	
	/* Costruttore: */
	public ResponsibleWorker(Employee employee){
		// Mette dentro la variabile responsabile il riferimento ad un generico impiegato
		responsible = employee;		
	}
	
	// IMPLEMENTAZIONE DEI METODI DICHIARATI NELL'INTERFACCIA Employee:
	
	public String getName(){
		// Invoca il metodo getName() sull'oggetto concreto referenziato da responsible
		return responsible.getName();
	}
	
	public String getOffice(){
		// Invoca il metodo getOffice() sull'oggetto concreto referenziato da responsible
		return responsible.getOffice();
	}
	
	public void whoIs(){
		// Invoca il metodo whoIs() sull'oggetto concreto referenziato da responsible
		responsible.whoIs();
	}

}
4) Estensioni di ResponsibleWorker:

Codice:
/* Classe che estende la classe astratta ResponsibleWorker e che rappresenta un decoratore concreto per
 * Engineer --> un Engineer può essere un Administrative manager ed avere determinate responsabilità */

public class AdministrativeManager extends ResponsibleWorker {
	
	/* Costruttore: riceve il riferimento ad un generico impiegato e costruisce un oggetto di tipo
	 * Administrativemanager */
	public AdministrativeManager(){
		/* Invoca il costruttore del supertipo ResponsibleWorker che mette dentro la variabile
		 * responsible il riferimento ad un impiegato --> ora quell'impiegato è un responsabile */
		super(empl);
	}
	
	// Implementazione del metodo whoIs() per un ProjectManager:
	public void whoIs(){
		sayIaBoss();			// Invoca il metodo sayIaBoss()
		super.whoIs();			// Invoca il metodo whoIs del supertipo che stampa le info comuni
	}
	
	// Metodo private che stampa una stringa
	private void sayIamBoss(){
		System.out.println("I am a boss");
	}
	
}
e

Codice:
/* Classe che estende la classe astratta ResponsibleWorker e che rappresenta un decoratore concreto per
 * Engineer --> un Engineer può essere un Project Manager ed avere determinate responsabilità */

public class ProjectManager extends ResponsibleWorker{
	
	private String Project;		// Rappresenta il progetto diretto dall'ingegnere
	
	/* Costruttore: riceve il riferimento ad un impiegato ed il nome del progetto da esso diretto e 
	 * costruisce un nuovo oggetto di tipo Prooject Manager */
	public ProjectManager(Employee empl, String proj){
		/* Invoca il costruttore del supertipo ResponsibleWorker che mette dentro la variabile
		 * responsible il riferimento ad un impiegato --> ora quell'impiegato è un responsabile */
		super(empl);
		project = proj;		// Copia la stringa ricevuta relativa al nome del progetto diretto
	}
	
	// Implementazione del metodo whoIs() per un ProjectManager:
	public void whoIs(){
		super whoIs(); // Per prima cosa invoca il metodo whoIs del supertipo che stampa le info comuni
		// Poi stampa un secondo messaggio personalizzato relativo solo ai Project Manager
		System.out.println("Gestisco il progetto: " + project);
	}

}
5) Classe di test contenente il metodo main():
Codice:
/* Classe di test che contiene il metodo main() */

public class Application {
	
	public static void main(String[] args){
		
		// Creo un impiegato come generico ingegnere e lo assegno ad un certo dipartimento:
		Employee thisWillBeFamous = new Engineer("Luca Rocchi", "Dipartimento Sviluppo");
		
		System.out.println("Who are you?");
		thisWillBeFamous.whoIs();
		
		// Lo decoro con la qualifica di Project Manager:
		thisWillBeFamous = new ProjectManager(thisWillBeFamous, "D.O.S. - Doors Operating System");
		
		System.out.println("Who are you?");
		thisWillBeFamous.whoIs();
		
		// LGli assegno una nuova qualifica di Project Manager:
		thisWillBeFamous = new ProjectManager(thisWillBeFamous, "qualifica 2");
		
		System.out.println("Who are you?");
		thisWillBeFamous.whoIs();
		
	}
	
}
L'errore che mi dà è che nel main pare non riconoscere Employee come tipo:
Codice:
Description	Resource	Path	Location	Type
Employee cannot be resolved to a type	Application.java	/Decorator1/src	line 8	Java Problem
La riga dell'errore esattamente è questa:
Codice:
// Creo un impiegato come generico ingegnere e lo assegno ad un certo dipartimento:
		Employee thisWillBeFamous = new Engineer("Luca Rocchi", "Dipartimento Sviluppo");
Anche questo esempio è stato preso dalle slide del corso...cosa c'è che non funziona?

Grazie
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2010, 13:08   #2
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
controlla gli import.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2010, 13:12   #3
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
controlla gli import.
import di cosa?
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2010, 13:25   #4
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
se Employee non viene risolto.......
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2010, 13:33   #5
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
se Employee non viene risolto.......
eh ma stanno nello stesso package...non ce ne dovrebbe essere bisogno !!!
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2010, 13:40   #6
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
posta la struttura di directory utilizzata.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2010, 16:44   #7
CwNd
Senior Member
 
L'Avatar di CwNd
 
Iscritto dal: Jun 2007
Città: Milano
Messaggi: 413
Secondo me nella classe nel metodo whoIs della classe Engineer non ci vuole la chiamata super.whoIs().

Se fosse un import secondo me darebbe un errore di compilazione.
CwNd è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2010, 17:20   #8
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da CwNd Guarda i messaggi
Secondo me nella classe nel metodo whoIs della classe Engineer non ci vuole la chiamata super.whoIs().

Se fosse un import secondo me darebbe un errore di compilazione.
presumo abbia tolto quella riga, altrimenti otterrebbe un ulteriore errore di compilazione (come lo è quello riportato), in quanto il metodo non è presente in Object.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Snap e Perplexity unite: dal prossimo an...
La Cina dice addio a NVIDIA? Il governo ...
Microlino, simbolo italiano della mobili...
Apple disattiverà la sincronizzaz...
Google lancia l'allarme: attenzione ai m...
Primo test drive con Leapmotor B10: le c...
'Non può essere un robot': l'uman...
Monopattino elettrico Segway Ninebot Max...
Syberia Remastered è disponibile:...
Sony scopre che tutti i modelli AI hanno...
Amazon nasconde un -15% su 'Seconda Mano...
Due occasioni Apple su Amazon: iPhone 16...
Verso la fine della TV tradizionale? I g...
Cassa JBL a 39€, portatili, smartphone, ...
Cometa interstellare 3I/ATLAS: la sonda ...
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: 04:44.


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