Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 05-03-2004, 21.44.29   #1
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
[Java] Esercizio Telefonino

Devo svolgere questo esercizio:
Si vuole realizzare un sistema per la composizione dei messaggi da inviare tramite telefonino. Ad ogni messaggio corrisponde un codice. Ad esempio al codice "ta" corrisponde il messaggio completo "ti amo, amore.". Definire la classe TestoMessaggio per la gestione dei messaggi. La classe deve avere un metodo per creare oggetti TestoMessaggio leggendo il codice e il messaggio completo da tastiera, un metodo per restituire il codice ed un metodo per restituire il testo del messaggio.
Per questa prima parte di classe va bene questa.
[PHP]
class TestoMessaggio{
private String code;
private String mex;
public TestoMessaggio(String code, String mex){
this.code= code;
this.mex = mex;
}
public string getCode(){
return code;
}
public string getMex(){
return mex;
}
}
[/PHP]

Prosegue così:
Un messaggio deve contenere il numero da chiamare, il mittente ed il testo del messaggio. Definire una classe Messaggio, con:

1) un metodo che crea un'istanza a partire da un oggetto di classe TestoMessaggio e 2 stringhe che rappresentano il numero di tel. del mittente e destinatario

2) un metodo che crea un'istanza a partire da un oggetto di classe TestoMessaggio ed una stringa che rappresenta il numero di telefono del mittente

3) un metodo che crea un'istanza a partire da un oggetto di classe TestoMessaggio

4) un metodo che riceve come parametro il numero di telefono del destinatario ed aggiorna il destinatario del messaggio

5) un metodo per la stampa del messaggio

Ho pensato a questa classe:
[PHP]
public class Messaggio extends TestoMessaggio {
public Messaggio(String code, String mex, String mitt, String dest) {
super(code, mex);
String numMitt = mitt;
String numDest = dest;
}
public Messaggio(String code, String mex, String mitt) {
super(code, mex);
String numMitt = mitt;
}
public Messaggio(String code, String mex) {
super(code, mex);
}
public void modificaDest(String numDest) {
***********************************
}
public void stampaMessaggio(Messaggio m) {
System.out.println(m.getMex());
}
}
[/PHP]

Dove ci sono gli asterischi ci andrebbe il metodo che cambia il numero del destinatario, ma come lo faccio? Devo scrivere anche un metodo che restituisca il numero oppure c'è un altro modo per sostituirlo?
Alhazred non è collegato   Rispondi citando
Vecchio 06-03-2004, 00.20.59   #2
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Prima osservazione:

nel primo dei costruttori che hai messo, dopo la chiamata a super() che è corretta, fai due assegnamenti: a cosa?
numMitt e numDest dovranno essere delle variabili della classe Messaggio
E questa è anche la risposta al tuo dubbio...

Codice:
public void modificaDest(String numDest) { 
    ***********************************     
    }
quello che devi mettere nel metodo è il codice che modifica il valore di numDest, niente più. Prova a vedere la mia risposta sull'uso di this nell'altro thread, e ragionaci Non devi restituire niente poi, quello è solo un metodo che, come da specifica, imposta il valore di qualcosa: è un metodo detto "modifier", in contrapposizione ai metodi "listener" *** (no, si chiamano in un altro modo... ora non ricordo) che invece prendono qualche informazione dalla classe.

Un altro appunto: in stampaMessaggio tu passi il messaggio stesso... non ha senso. Tu chiami quel metodo su un certo oggetto messaggio, a cui hai appunto il riferimento, che ti restituisce il testo del messaggio stesso. E nel corpo del metodo, non devi usare un metodo della classe Messaggio stessa, ricorda sempre "this" (certo, puoi benissimo usarlo, nessuno lo vieta ma... non è propriamente la cosa migliore da fare ).

Buon lavoro!


*** EDIT: ecco, ho ricordato, si chiamano "Observer", perchè appunto osservano qualche cosa della classe: il getMex, per esempio, è observer perchè restituisce un qualche cosa della classe, cioè il messaggio.

Ultima modifica di Dav82 : 06-03-2004 alle ore 00.28.56
Dav82 non è collegato   Rispondi citando
Vecchio 06-03-2004, 11.25.53   #3
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da Dav82
...
quello che devi mettere nel metodo è il codice che modifica il valore di numDest, niente più.
...
Credo così di aver risolto:
Codice:
public void modificaDest(String numDest) {
		String nuovoDest = JOptionPane.showInputDialog("Inserisci il nuovo destinatario");
		this.numDest = nuovoDest;
Non ho potuto verificare perché non riesco a scrivere una riga che mi scriva il numero del destinatario
Ho provato con una cosa di questo tipo:
Codice:
import javax.swing.JOptionPane;
public class Cliente {
	String numero;
	public static String leggiNumero() {
		String numero = JOptionPane.showInputDialog("Inserisci il numero del destinatario");
		return numero;
	}
	public void main (String[] args) {
		String numMitt = "3973186876";
		String numero = leggiNumero();
		Messaggio m1 = new Messaggio("cs","Come stai?",numMitt,numero);
		System.out.println(this.numero);
		String nuovoDest = JOptionPane.showInputDialog("Inserisci il nuovo destinatario");
		modificaDest(nuovoDest);
		System.out.println(this.numero);
	}
}
Ottengo un errore nella chiamata a modificaDest:
" cannot resolve symbol
symbol : method modificaDest (java.lang.String)"

Togliendo la chiamata e ricompilando va tutto bene, però in esecuzione mi si presenta un altro errore:
"Exception in thread "main": Java.lang.NoSuchMethodError: main"
Alhazred non è collegato   Rispondi citando
Vecchio 06-03-2004, 13.32.10   #4
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Ovviamente ti dice che non trova nessun metodo modificaDest(): infatti lui lo cerca nella classe Cliente, è come se prima di modificaDest(nuovoDest) ci fosse un this, in pratica tu chiami this.modificaDest(nuovoDest) che non esiste. Tu dovresti chiamare m1.modificaDest(nuovoDest), perchè è il Messaggio che ha quel metodo, non il Cliente.
La seconda println di numero è uguale alla prima, perchè tu non modifichi la variabile numero nella classe Cliente fra una println e l'altra.
Non capisco invece l'eccezione nel thread main, tu il main ce l'hai... boh!

Un appunto sulla costruzione delle classi: in Cliente tu fai in modo di salvare in un attributo della classe il numero del destinatario, ma questo numero è proprio del messaggio, non del Cliente. Dovresti invece tenere come attributo della classe Cliente il numero del mittente, questo sì: lo fai in parte, scrivendo nel main String numMitt = "3973186876": così facendo però l'informazione non è persistente, in sostanza numMitt è una variabile allocata nel main, non è una vera e propria variabile della classe. Ti faccio un esempio.
Se tu dal main chiamassi un metodo che serve al Cliente per impostare il proprio numero, una cosa così insomma:

Codice:
public static void main (String[] args){

    // tutto il resto...
 
    impostaNumMitt();

    // tutto il resto...


    private void impostaNumMitt(){

        String buffer = JOptionPane.showInputDialog("Imposta num:");
        numMitt = buffer;
    }
}
non potresti farlo, perchè nel metodo impostaNumMitt tu fai riferimento a numMitt, che è dichiarata nel main, e non è una variabile di classe: in sostanza, nel metodo non la puoi vedere!
Dav82 non è collegato   Rispondi citando
Vecchio 06-03-2004, 16.55.30   #5
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da Dav82
...
scrivendo nel main String numMitt = "3973186876": così facendo però l'informazione non è persistente, in sostanza numMitt è una variabile allocata nel main, non è una vera e propria variabile della classe.
...
Questo l'ho fatto perché mi interessa vedere solo se i metodi richiesti dall'esercizio funzionano.

A forza di tentativi ci sono quasi, la classe Cliente l'ho fatta diventare così:
Codice:
import javax.swing.JOptionPane;
public class Cliente {
	String numero;
	public static String leggiNumero() {
		String numero = JOptionPane.showInputDialog("Inserisci il numero del destinatario");
		return numero;
	}
	public static void main (String[] args) {
		String numMitt = "3973186876";
		String numero = leggiNumero();
		Messaggio m1 = new Messaggio("cs","Come stai?",numMitt,numero);
		System.out.println(m1.numDest);
		String nuovoDest = JOptionPane.showInputDialog("Inserisci il nuovo destinatario");
		m1.modificaDest(nuovoDest);
		System.out.println(m1.numDest);
	}
}
adesso funziona tutto tranne per il fatto che il primo println mi restituisce sempre null.
Alhazred non è collegato   Rispondi citando
Vecchio 06-03-2004, 17.18.34   #6
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ho risolto, stavolta il problema era nella classe Messaggio, iniziava così:
Codice:
public class Messaggio extends TestoMessaggio {
	String numMitt;
	String numDest;
	public Messaggio(String code, String mex, String mitt, String dest) {
		super(code, mex);
		String numMitt = mitt;
		String numDest = dest;
	}
.....
ora l'ho cambiata in questo modo e funziona
Codice:
public class Messaggio extends TestoMessaggio {
	String numMitt;
	String numDest;
	public Messaggio(String code, String mex, String mitt, String dest) {
		super(code, mex);
		this.numMitt = mitt;
		this.numDest = dest;
	}
......
L'eccezione era dovuta al fatto che main l'avevo dichiarato non-static.
Alhazred non è collegato   Rispondi citando
Vecchio 06-03-2004, 17.20.21   #7
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Grazie dell'aiuto Dav
tanto avrò ancora bisogno di fare altre domande, questo esercizio continua... ma non oggi, adesso basta
Alhazred non è collegato   Rispondi citando
Vecchio 06-03-2004, 17.25.27   #8
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Urca urca, non avevo fatto caso ad una cosa!!!! E questa cosa sta più o meno alla base di tutta la programmazione ad oggetti.

Tu in cliente fai la print passando come parametro m1.numDest: così facendo accedi dalla classe Utente ad un attributo della classe Messaggio. In generale questo non è assolutamente consigliabile, perchè in questo modo potresti anche direttamente fare, sempre dalla classe Utente, m1.numDest = "quello che vuoi tu".
In Messaggio gli attributi devono essere private, così possono essere toccati solo dall'interno della classe messaggio stessa

Public e private funzionano per gli attributi come per i metodi.

Ci sono poi anche altri tipi di visibilità oltre a public e private: sono "friendly", "protected" e "package" : non mi ricordo mai bene come sono, anzi due sono la stessa cosa... se vuoi guarda sul manuale

Ciao
Dav82 non è collegato   Rispondi citando
Vecchio 06-03-2004, 17.30.38   #9
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da Dav82
...
In generale questo non è assolutamente consigliabile, perchè in questo modo potresti anche direttamente fare, sempre dalla classe Utente, m1.numDest = "quello che vuoi tu".
In Messaggio gli attributi devono essere private, così possono essere toccati solo dall'interno della classe messaggio stessa
...
Mi era già venuto in mente ripensando alla tua risposta nell'altro 3d, infatti ho modificato il tutto usando in cliente il metodo getDest() della classe Messaggio
Grazie ancora.
Alhazred non è collegato   Rispondi citando
Vecchio 06-03-2004, 17.33.02   #10
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Di niente, figurati
Dav82 non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
PRESENTATO TELEFONINO PER CIECHI, LEGGE TESTI A UTENTE giobar57 Segnalazioni Web 0 15-07-2008 19.50.52
Sicuramente OT! WinME e Telefonino NEC338 Frengo Software applicativo 3 20-07-2005 19.23.40
No al caro-cellulare - sciopero del telefonino previsto per il 18/12 Macao Segnalazioni Web 1 13-12-2004 10.22.50
Esercizio matematico... handyman Chiacchiere in libertà 33 23-04-2004 22.20.48
Ke telefonino mi consigliate di comprare Peppe D Chiacchiere in libertà 20 22-09-2003 00.55.54

Orario GMT +2. Ora sono le: 01.44.48.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.