Newsgroup: it.comp.java
Titolo: domanda sui wrapper

I wrapper sono oggetti che incorporano un tipo primitivo per poterlo  
sottoporre a diversi test.
A me sembrerebbe sensata una sintassi del genere:
boolean test = false;
Character glifo = new Character('A'); // incorporo il carattere 'A' nel  
wrapper Character
test = glifo.isLetter();  // mi accerto che sia una lettera e non una  
virgola
e invece questa sintassi non funziona; bensì funziona questa:
boolean test = false;
Character glifo = new Character('X'); // 'X' per dire 'Y', 'Z', qualsiasi  
cosa...
test = glifo.isLetter('A');  // mi accerto che sia una lettera e non una  
virgola
Che senso ha passare al costruttore un carattere a caso, se poi è nel  
metodo della classe che devo inserire l'argomento che mi interessa?
Grazie.
Michele Giordano

Michele Giordano wrote:

Infatti non ha nessun senso (quello che hai scritto tu!) ;)
Se sfogli la documentazione dell'API Java e guardi la signature del
metodo che hai citato, troverai questo:
public static boolean isLetter(char ch)
        ^^^^^^
Il modificatore static specifica che non c'e' bisogno di creare
un'istanza di Character per utilizzare tale metodo!
Conoscere le basi del linguaggio Java alle volte
puo' tornare comodo... ;)
Ciao
Roberto

 puo' tornare comodo... ;)
"E' possibile utilizzare un oggetto per chiamare un metodo statico [...],  
anche se questa notazione può confondere le idee".
Horstmann, Cornell, coreJAVA, vol. 1, p. 123
Ti ringrazio per la tua risposta che mi ha indotto a controllare le mia  
basi di Java, però, come vedi, anche chi le basi le conosce bene avanza  
qualche perplessità su questo punto del linguaggio.
Per me, che vengo da Pascal, un metodo statico non è altro che la vecchia  
function, con buona pace del linguaggio ad oggetti.
Michele Giordano

anche se questa notazione può confondere le idee.
Certo che è possibile ma IMHO è sbagliato farlo :)

 vecchia  function, con buona pace del linguaggio ad oggetti.
E sbagli: se vieni dal Pascal (o da qualsiasi altro linguaggio
strutturato), e' meglio che ti dimentichi tutto e ricominci da capo... ;)
Saluti
Roberto

 Certo che è possibile ma IMHO è sbagliato farlo :)
Se alla parola "sbagliato" dai un significato operativo hai torto, perché  
operativamente il codice funziona quindi è "corretto".
Se ne fai una questione di principio, invece, allora hai ragione, perché  
il discorso riguarda la filosofia del linguaggio di programmazione. In  
effetti, io credo di aver pensato troppo "per oggetti", quando Java  
consente questa scappatoia ibrida dei metodi statici.
E' su questo terreno che mi piacerebbe sentire il parere di chi usa Java  
da molto tempo più di me.
Michele Giordano

 consente questa scappatoia ibrida dei metodi statici.
hai ragione, dal punto di vista OO sarebbe più bello, ma Java affonda le
sue radici in C. 
Puoi comunque realizzarlo molto semplicemente, e questo è un utile
esercizio!
ciao
uL
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 esercizio!
Non capisco che cosa intendi: che non ti scandalizza l'idea di instanziare  
un oggetto che ha dei metodi statici che non richiedono di essere  
richiamati da un oggetto istanziato?
Ma questo ci riporta al punto di partenza. Devo dire che ieri sera, il  
fatto che questo frammento di codice funzionasse mi ha molto sorpreso:
boolean test = false;
Character glifo = new Character('X'); // 'X' per dire 'Y', 'Z', qualsiasi  
cosa...
test = glifo.isLetter('A');  // mi accerto che sia una lettera e non una  
virgola
perché è chiaramente ridondante e fuorviante.
Ciao.
Michele Giordano

 
E infatti un buon compilatore te lo segnala come warning ;)
Ciao
Roberto

> E infatti un buon compilatore te lo segnala come warning ;)
Scusa, ma mi sembra di aver spiegato che non sto parlando di arte della  
stesura del codice, bensì delle caratteristiche del linguaggio Java.
Io uso JDK 5.0 e non mi dà alcun warning.
Ciao.
Michele Giordano

 Io uso JDK 5.0 e non mi dà alcun warning.
Il compilatore integrato in Eclipse puo' essere configurato
per segnalarlo ;)
Ciao
Roberto

il discorso riguarda la filosofia del linguaggio di programmazione.
Ne faccio una questione di principio ovviamente :)
Il mio problema è che vedo troppo codice in giro in cui qualche
programmatore (he non ha capito bene cosa sono i metodi statici)
istanzia un oggetto di una classe, per invocare su questo un metodo
static... E' ovvio che la cosa funziona lo stesso, ma mi incazzo
perchè significa che mancano dei concetti base...

per segnalarlo ;) 
Appunto !!!

Non sarebbe più logico che la classe in questione (Character) sia Abstract,
così non la posso istanziare ma posso comunque usare il metodo statico
suddetto? Così sarebbe meno fuorviante e (forse) più logico. Che ne pensate?
Un modo di rendere ufficiali le chiamate "funzione"?
ale

 perchè significa che mancano dei concetti base...
Per come l'ho capita io il *concetto* di base è che in Java esistono solo  
gli oggetti, e tutta la logica di programmazione, perciò, dovrebbe  
conformarsi a questa idea.
In realtà poi si scopre che ti puoi fare degli sconti, e invocare senza  
tante storie un metodo di una classe che non hai istanziato. Ma come? E'  
questo pensare per oggetti?
Guarda che se è così, allora i custodi del *concetto* dei concetti sono  
proprio quelli che ti fanno incazzare.
Saranno oggettivamente ignoranti, hai ragione tu, ma senza volerlo forse  
sono i più coerenti. :-)
Ciao.
Michele Giordano

 E'  questo pensare per oggetti?
Secondo me ti stai arrovellando su un falso problema: il concetto di metodo
statico e' utile nella programmazione ad oggetti e non ne stravolge la teoria.
Si tratta solo di non abusarne, come del resto vale anche per l'ereditarieta'.
Ripeto: "googlizza" con le chiavi "Design Patterns" e "Singleton" ;)
Ciao
Roberto

 Ripeto: "googlizza" con le chiavi "Design Patterns" e "Singleton" ;)
Ok, farò così.
Ciao.
Michele Giordano

questo pensare per oggetti?
Si certo che lo è !!!
Un metodo static)non viola i principi dell'OO, tanto è vero che è
indispensabile disporre di metodi di classe per implementare pattern
come il singleton.
Java non è sicuramente un linguaggio OO 'puro', ma guarda caso i
linguaggi non OO 'puri' come C++, Java e C# hanno tutti il concetto di
metodi static. E guarda caso sono quelli che si sono ampiamente
diffusi.
Viceversa quelli OO puri (Smalltalk o Eiffel) hanno avuto una
diffusione limitata... E peraltro non ricordo se definiscono metodi
static (o concetti analoghi) e in tutta sincerità non ho nessuna
voglia di andare a controllare :)
Ribadisco il punto che volevo sottolineare: il problema non sono i
metodi static, ma il non aver capito la differenza tra un metodo static
e uno che non lo è :(

 suddetto? Cosě sarebbe meno fuorviante e (forse) piů logico. Che ne pensate?
Beh non č che Character serva solamente per via dei suoi metodi statici 
:) Serve anzitutto perché č un wrapper, e in quanto tale va istanziato. 
A mano o in lavatrice (tramite l'autoboxing :)).
pole
-- 
ammentos - a lightweight persistence framework for JDK5
http://www.sourceforge.net/projects/ammentos
http://ammentos.biobytes.it