Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-08-2007, 12:27   #1
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
singleton pattern

perchè si ricorre al attern singleton invece di usare una classe con soli membri statici? operativamente mi sembra la stessa cosa... o mi sfugge qualcosa?
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 12:35   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
perchè si ricorre al attern singleton invece di usare una classe con soli membri statici? operativamente mi sembra la stessa cosa... o mi sfugge qualcosa?
No, sono cose diverse. In Java, ad esempio, una classe come java.lang.Math ha il costruttore private e tutti i membri sono static e compiono solo operazioni matematiche. Non viene creata alcuna istanza di Math né all'interno di Math né, ovviamente, all'esterno.

Il pattern singleton prevede che ci sia un metodo statico che ritorna una istanza (l'unica possibile) della classe.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 12:37   #3
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da andbin Guarda i messaggi
No, sono cose diverse. In Java, ad esempio, una classe come java.lang.Math ha il costruttore private e tutti i membri sono static e compiono solo operazioni matematiche. Non viene creata alcuna istanza di Math né all'interno di Math ne, ovviamente, all'esterno.

Il pattern singleton prevede che ci sia un metodo statico che ritorna una istanza (l'unica) della classe.
si lo so bene... la mia domanda, evidentemente espressa male, è:

perchè usare il pattern singleton per fare quello che, se non sto prendendo cantonate, si può fare con una classe con soli membri statici?
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 12:57   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Io il problema non me lo pongo, visto che non mi piacciono sia le classi con soli membri statici che il singleton pattern (tra l'altro l'uso, ma soprattutto l'abuso, è sconsigliato anche da chi l'ha messo su carta).
Comunque prima di tutto ci sono differenze a livello operativo: la classe con i soli metodi statici non ha un costruttore. Si può ovviare a questo mettendo un membro statico di controllo che richiami un membro statico "costruttore", ma crea notevoli ripetizioni nel codice, un codice con troppe ripetizioni non è un buon codice.
Altri dubbi mi vengono dal significato che assume una classe con tutti membri statici...se le critiche mosse al singleton sono quelle di andare a ricreare una sorta di variabile globale quando anche nella programmazione non OO cercavamo di farne il più possibile a meno, le critiche che si possono fare alla classe di metodi statici sono ancora più serie: è la negazione della programmazione OO, in quanto di fatto si buttano dalla finestra le funzioni globali per reintrodurle da sotto la porta
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 13:10   #5
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da cionci Guarda i messaggi
Io il problema non me lo pongo, visto che non mi piacciono sia le classi con soli membri statici che il singleton pattern (tra l'altro l'uso, ma soprattutto l'abuso, è sconsigliato anche da chi l'ha messo su carta).
Comunque prima di tutto ci sono differenze a livello operativo: la classe con i soli metodi statici non ha un costruttore. Si può ovviare a questo mettendo un membro statico di controllo che richiami un membro statico "costruttore", ma crea notevoli ripetizioni nel codice, un codice con troppe ripetizioni non è un buon codice.
Altri dubbi mi vengono dal significato che assume una classe con tutti membri statici...se le critiche mosse al singleton sono quelle di andare a ricreare una sorta di variabile globale quando anche nella programmazione non OO cercavamo di farne il più possibile a meno, le critiche che si possono fare alla classe di metodi statici sono ancora più serie: è la negazione della programmazione OO, in quanto di fatto si buttano dalla finestra le funzioni globali per reintrodurle da sotto la porta
perfettamente d'accordo. ma nei rari casi in cui è necessaria un'entità centralizzata che deve essere accessibile a più entità clienti senza la necessità di passare l'oggetto condiviso come parametro che altre strade hai? una factory ha molti vantaggi a livello di design ed è un singleton, per esempio...

io ritengo che l'abuso di qualsiasi cosa sia dannoso (salvo eccezioni che sarebbero OT ), ma l'uso oculato è, per definizione, buona cosa.

Quanto al costruttore: creare un singleton con un parametro di costruzione è una cosa delicata di per sè... comuqnue questa situazione mi pare l'unica in cui un singleton è diverso da una classe con solo membri statici... è corretto?

grazie a tutti per i vostri interventi passati e futuri
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 13:34   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
perfettamente d'accordo. ma nei rari casi in cui è necessaria un'entità centralizzata che deve essere accessibile a più entità clienti senza la necessità di passare l'oggetto condiviso come parametro che altre strade hai? una factory ha molti vantaggi a livello di design ed è un singleton, per esempio...
Non è detto che debba essere un singleton, se la si astrae debitamente di comporterà come un singleton, ma non lo sarà. Soprattutto non la si rende disponibile ovunque come una variabile globale.
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
Quanto al costruttore: creare un singleton con un parametro di costruzione è una cosa delicata di per sè... comuqnue questa situazione mi pare l'unica in cui un singleton è diverso da una classe con solo membri statici... è corretto?
Non è tanto il parametro del costruttore il problema, ma se l'oggetto istanziato una sola volta ha necessità di operazioni di inzializzazione.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 13:58   #7
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da cionci Guarda i messaggi
Non è tanto il parametro del costruttore il problema, ma se l'oggetto istanziato una sola volta ha necessità di operazioni di inzializzazione.
un inizializzatore statico non va bene?
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 14:06   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
un inizializzatore statico non va bene?
Certo che va bene, ma in ogni altro metodo statico devi controllare se l'inizializzazione è già avvenuta e se non è avvenuta devi chiamare il metodo statico che fa l'inizializzazione.

if(!initDone) doInit();

Il che implica una duplicazione in ogni metodo statico.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 14:10   #9
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da cionci Guarda i messaggi
Certo che va bene, ma in ogni altro metodo statico devi controllare se l'inizializzazione è già avvenuta e se non è avvenuta devi chiamare il metodo statico che fa l'inizializzazione.

if(!initDone) doInit();

Il che implica una duplicazione in ogni metodo statico.
scusa, ma in java c'è il blocco static{} richiamato quando la classe viene caricata, in c# ci sono i costruttori statici... non fanno proprio quello di cui parli?
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 14:11   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
scusa, ma in java c'è il blocco static{} richiamato quando la classe viene caricata, in c# ci sono i costruttori statici... non fanno proprio quello di cui parli?
In C++ non c'è niente di tutto questo...facevo riferimento a quello
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 14:22   #11
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Odio il singleton pattern, abusato da molti perche` altrimenti non sanno come passare variabili nei metodi.

Si tratta dell'equivalente di scrivere codice C usando variabili globali invece che parametri e questa e` una cosa comunemente riconosciuta come sbagliata.

Il singleton e` piu` accettato, secondo me, perche`:
- E` un pattern quindi usarlo e` bene anche se leggendo i lpattern si son saltate un po` di righe...
- E` object oriented.
- E` sempre meglio che usare variabili globali.

Comunque non so se ti riferisci a Java o C# ma in C++ il singleton viene usato principalmente perche` l'ordine di inizializzazione delle variabili globali e` undefined e se hai singleton che usano altri singleton nel costruttore (oddio!!!) avresti comportamento undefined.

Ultima nota sul singleton pattern: si usa il singleton pattern quando il design esplicitamente richiede che esista UNA SOLA istanza di quell'oggetto e se mai nella vita del progetto dovessero esistere due o piu` istanze questo sarebbe un grave errore.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 14:35   #12
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da Ufo13 Guarda i messaggi
Odio il singleton pattern, abusato da molti perche` altrimenti non sanno come passare variabili nei metodi.

Si tratta dell'equivalente di scrivere codice C usando variabili globali invece che parametri e questa e` una cosa comunemente riconosciuta come sbagliata.

Il singleton e` piu` accettato, secondo me, perche`:
- E` un pattern quindi usarlo e` bene anche se leggendo i lpattern si son saltate un po` di righe...
- E` object oriented.
- E` sempre meglio che usare variabili globali.
il fatto che molti usino male alcuni strumenti non fa di questi strumenti una cosa negativa... il fatto che molti scrivano cattivo codice in un linguaggio X non rende il linguaggio X una schifezza.

Una variabile globale è assolutamente non protetta, un oggetto o una classe permettono l'incapsulamento, non è assolutamente la stessa cosa!

"Generalmente" non significa "sempre"

quanto alla tua lista di punti:
- non uso cose perchè altri mi han detto che è bene: voglio sapere SE, QUANDO e PERCHE' è bene (e quali sono i compromessi)... per questo ho aperto il thread chiedendo la differenza tra una classe con membri static e un singleton
- va beh, ma oop è un paradigma, non il dio supremo
- ho già scritto a riguardo poche righe fa

Quote:
Originariamente inviato da Ufo13 Guarda i messaggi
Ultima nota sul singleton pattern: si usa il singleton pattern quando il design esplicitamente richiede che esista UNA SOLA istanza di quell'oggetto e se mai nella vita del progetto dovessero esistere due o piu` istanze questo sarebbe un grave errore.
se non fosse così non starei prendendo in considerazione il singleton pattern
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 15:31   #13
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Una classe con metodi statici genera una dipendenza di definizione che, per l'orientamento agli oggetti, significa che oggetto è l'unione tra la definizione di quella classe e quella della classe utente.

E' corretto quando dici "l'unica differenza mi pare essere quella del costruttore con argomenti" perchè il confronto che fai è tra due forme Java che, sempre dal punto di vista dell'orientamento agli oggetti, generano entrambe dipendenza di definizione. Resta solo il "dettaglio tecnico" del costruttore.

Al bocciofilo si dice che questo sia sbagliato. In verità è una questione di significati. L'orientamento agli oggetti è una prospettiva totalizzante. Non ci sono cose incompatibili con l'orientamento agli oggetti ma semplici alterazioni di significato. Dell'unico significato esistente nell'orientamento agli oggetti, vale a dire cosa sia oggetto e cosa sia parte della definizione di un oggetto.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 15:44   #14
mad_hhatter
Senior Member
 
L'Avatar di mad_hhatter
 
Iscritto dal: Oct 2006
Messaggi: 1105
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
Una classe con metodi statici genera una dipendenza di definizione che, per l'orientamento agli oggetti, significa che oggetto è l'unione tra la definizione di quella classe e quella della classe utente.

E' corretto quando dici "l'unica differenza mi pare essere quella del costruttore con argomenti" perchè il confronto che fai è tra due forme Java che, sempre dal punto di vista dell'orientamento agli oggetti, generano entrambe dipendenza di definizione. Resta solo il "dettaglio tecnico" del costruttore.

Al bocciofilo si dice che questo sia sbagliato. In verità è una questione di significati. L'orientamento agli oggetti è una prospettiva totalizzante. Non ci sono cose incompatibili con l'orientamento agli oggetti ma semplici alterazioni di significato. Dell'unico significato esistente nell'orientamento agli oggetti, vale a dire cosa sia oggetto e cosa sia parte della definizione di un oggetto.
ehm... ti offendi (e io faccio tanto la figura del babbeo) se ti confesso che credo di non aver capito bene?

soprattutto quando parli di dipendenza di definizione
mad_hhatter è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 17:01   #15
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
il fatto che molti usino male alcuni strumenti non fa di questi strumenti una cosa negativa... il fatto che molti scrivano cattivo codice in un linguaggio X non rende il linguaggio X una schifezza.
L'uso corretto del singleton e` quello di forzare una sola istanza.

Ricordo in diamonds i test che fallivano senza motivo per colpa del singleton pattern e l'uso oltrettutto era corretto...
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 17:05   #16
Nous
Senior Member
 
Iscritto dal: Oct 2002
Città: Como
Messaggi: 709
Quote:
Originariamente inviato da mad_hhatter Guarda i messaggi
perchè usare il pattern singleton per fare quello che, se non sto prendendo cantonate, si può fare con una classe con soli membri statici?
Una classe con i soli metodi statici è una classe di utilità, che fornisce metodi il cui output dipende solo dall'input fornito e non dallo stato dell'oggetto (che non hai perchè non istanzi la classe). Esempio : un metodo che somma due numeri.

Il pattern singleton lo usi quando vuoi che ci sia una sola istanza di una classe per tutta la durata dell'applicazione, mediamente quando vuoi che ad una risorsa acceda sempre una classe per evitare problemi di concorrenza o di (mancanza di) atomicità sui dati. Esempio : un logger di sistema, ne vuoi uno solo che si occupi di memorizzare gli eventi sul sistema. Hai un'istanza, quindi hai un'oggetto con uno stato e i metodi che fornisce la classe modificano lo stato dell'oggetto (almeno in teoria, in pratica dipende dal tuo modo di vedere la programmazione ad oggetti).
__________________
Cristian ,il nOUS che invoglia
i5-2500 (Sandy Bridge) Quad-Core 3,30 Ghz - Asus P8Z68-V PRO / GEN3 - 2x4GB DDR3 - GeForce GTX 550 Ti Pci-E 4 Gb ddr3 - Barracuda 7200.12 1 Tb Sata 600 Buffer 32 Mb 7200 Rpm
Nous è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 17:06   #17
Nous
Senior Member
 
Iscritto dal: Oct 2002
Città: Como
Messaggi: 709
Quote:
Originariamente inviato da cionci Guarda i messaggi
la classe con i soli metodi statici non ha un costruttore.
Falso, il costrutto di default è sempre implicito. Tant'è che una buona classe di utilità dovrebbe definire esplicitamente il costruttore e con scope privato.
__________________
Cristian ,il nOUS che invoglia
i5-2500 (Sandy Bridge) Quad-Core 3,30 Ghz - Asus P8Z68-V PRO / GEN3 - 2x4GB DDR3 - GeForce GTX 550 Ti Pci-E 4 Gb ddr3 - Barracuda 7200.12 1 Tb Sata 600 Buffer 32 Mb 7200 Rpm
Nous è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 17:14   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Nous Guarda i messaggi
Falso, il costrutto di default è sempre implicito. Tant'è che una buona classe di utilità dovrebbe definire esplicitamente il costruttore e con scope privato.
Il costruttore di default c'è ma non viene mai utilizzato
Se io uso la classe con i soli metodi statici il costruttore di default non verrà mai chiamato.
Allora mettiamola così: una classe con soli metodi statici non ha un costrutto equivalente al costruttore che permette di inizializzare la classe, almeno in C++ a quanto sembra.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 17:16   #19
Nous
Senior Member
 
Iscritto dal: Oct 2002
Città: Como
Messaggi: 709
Quote:
Originariamente inviato da cionci Guarda i messaggi
Il costruttore di default c'è ma non viene mai utilizzato
Se io uso la classe con i soli metodi statici il costruttore di default non verrà mai chiamato.
Allora mettiamola così: una classe con soli metodi statici non ha un costrutto equivalente al costruttore che permette di inizializzare la classe, almeno in C++ a quanto sembra.
Sì ma è istanziabile, provare per credere
E' sbagliato che lo sia...e quindi si deve renderlo non istanziabile
__________________
Cristian ,il nOUS che invoglia
i5-2500 (Sandy Bridge) Quad-Core 3,30 Ghz - Asus P8Z68-V PRO / GEN3 - 2x4GB DDR3 - GeForce GTX 550 Ti Pci-E 4 Gb ddr3 - Barracuda 7200.12 1 Tb Sata 600 Buffer 32 Mb 7200 Rpm
Nous è offline   Rispondi citando il messaggio o parte di esso
Old 03-08-2007, 17:17   #20
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Nous Guarda i messaggi
Sì ma è istanziabile, provare per credere
E' sbagliato che lo sia...e quindi si deve renderlo non istanziabile
Certo che lo è...vorrei anche vedere...
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Zscaler Threat Report 2026: l'adozione d...
Claude AI minaccia omicidi e ricatti qua...
Dentro la gara: a Milano Cortina 2026 i ...
Samsung Display presenta QD-OLED Penta T...
KONAMI torna con "Silent Hill: Town...
Rende il citofono smart a 44,99€: Ring I...
ThunderX3 XTC, la sedia da ufficio che s...
Mercy, Mission Impossible, Aronofsky: il...
Project Windless: il nuovo action in esc...
Saros: mostrato il gameplay del gioco de...
God of War: Sons of Sparta annunciato e ...
John Wick torna in un nuovo videogioco a...
MADE chiude il 2025 con 59 partner e 250...
007 First Light: allo State of Play un n...
Gli iPhone su Amazon costano meno che su...
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: 23:42.


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