Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce
Abbiamo provato il nuovo HUAWEI Pura 80 Pro. Parliamo di uno smartphone che è un vero capolavoro di fotografia mobile, grazie ad un comparto completo in tutto e per tutto, In questa colorazione ci è piaciuto molto, ma i limiti hardware e software, seppur in netto miglioramento, ci sono ancora. Ma HUAWEI ha fatto davvero passi da gigante per questa nuova serie Pura 80. Buona anche l'autonomia e soprattutto la ricarica rapida sia cablata che wireless, velocissima.
Opera Neon: il browser AI agentico di nuova generazione
Opera Neon: il browser AI agentico di nuova generazione
Abbiamo provato il nuovo web browser con intelligenza artificiale della serie Opera accessibile tramite abbonamento. Ecco le nostre prime impressioni sulle funzionalità di Opera Neon basate su AI e come funzionano
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-04-2006, 23:21   #1
DarkSiDE
Senior Member
 
L'Avatar di DarkSiDE
 
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
limitare il numero di instanze di una classe

è una domanda di teoria, non si riferisce ad un linguaggio specifico

se volessi limitare il numero delle istanze di una classe cosa mi converebbe fare?

vi sembra una 'buona' soluzione questa?

Codice:
public class MyClass {

private static int instanze=0;

MyClass(){
 if (instanze < numero)
   instanze++;
else throw new Exception();
}

}
__________________
Non farò mai più affari con khalhell, 4HwGenXX.

Ultima modifica di DarkSiDE : 18-04-2006 alle 23:24.
DarkSiDE è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 00:13   #2
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Guarda.. al momento a me non viene in mente una soluzione definitiva anche se a primo impatto direi che bisognerebbe fare un giro nell'Heap e contare le istanze di questa classe di cui vuoi limitare le istanze. Nel senso: per ogni classe nell'Heap che equivale a MyClass incrementa il contatore... Per verificare se una classe è istanza di MyClass puoi usare istanceOf() oppure isInstance(Object obj) di Class.
Per esempio nella forma:
Codice:
if ( Class.forName ( classNameString ).isInstance ( myObject ) ) ...
oppure:
Codice:
Oggetto o = new Oggetto(); if (o instanceof MyClass) ...
Questo controllo nell'heap lo farei ogni volta prima di creare una nuova istanza di MyClass.. e se è stato raggiunto il numero massimo non la creo. Ora però non so se si possa fare questo "giro" nella memoria heap.

Onestamente penso che l'esempio da te riportato sia un po' scorretto. Intanto.. come fa ogni classe a incremetare un contatore "generale" se esso si trova all'interno della stessa?
Quel contatore non diventerà mai maggiore di 1, perchè ogni volta che si chiama il costruttore quello vede che la condizione nell'if è verificata e incrementa, e crea l'oggetto. Poi se ci sono altre invocazioni di quella classe/oggetto, verrà creato un nuovo contatore, anche se a dire il vero essendo statico potrebbe essere modificato da altre classi... ma a questo punto dovrebbe essere anche pubblica la variabile.. non so.. è un po' strano quello che hai scritto.. poi questo blocco:
Codice:
if (instanze < numero)
   instanze++;
else throw new Exception();
io lo metterei più in una classe chiamante (quella che creerebbe l'oggetto MyClass) piuttosto che nel costruttore della stessa...
Non so... contraddicimi pure.. nella confusione sono riuscito solo a fre queste deduzioni e ragionamenti che in parte saranno anche sbagliati.. spero ti aiutino a ragionarci su però.

EDIT: cmq... il fatto che java impedisca di accedere alla memoria penso che inibisca anche la possibilità di vedere quali e quante istanze ci siano in memoria di una certa classe. L'unico sistema è contarle ogni volta che vengono invocate. Per esempio:
variabile statica come contatore; allo scatenarsi di un evento (non so pressione di un pulsante per esempio) verifico il contatore, se esso è inferiore a un certo valore, creo un nuovo oggetto e incremento il contatore, altrimenti lancio eccezione.

ciaoo!
__________________
^ThE CyBoRg^

Ultima modifica di fbcyborg : 19-04-2006 alle 00:35.
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 00:49   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Il codice di DarkSide non fa una grinza (salvo un throws Exception omesso nel costruttore).

Poichè non tutti le lingue che usano costruttori stabiliscono che i costruttori restituiscano istanze (uno di quelli che non lo fa è proprio Java), opterei per un pattern factory (qualcuno diverso da MyClass genera istanze di MyClass), anche per poter decidere la politica di intervento in caso di raggiungimento del limite. Tanto per lasciare la porta aperta perchè l'uso dell'eccezione è in sè, scusa il gioco di parole, ineccepibile.

Io non mi incartapecorirei nella memoria della JVM, cosa pure possibile a partire da Java 5 con JMX.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 08:43   #4
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
i dati membro statici vanno inizializzati al di fuori della classe con l'operatore di risoluzione di scope altrimenti non servono a niente
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 09:40   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da BountyKiller
i dati membro statici vanno inizializzati al di fuori della classe con l'operatore di risoluzione di scope altrimenti non servono a niente
E dove sta scritto!??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 09:54   #6
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Credo che basti estendere (modificare) correttamente questo pattern.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 09:57   #7
Galotar
Utente sospeso
 
L'Avatar di Galotar
 
Iscritto dal: Jul 2002
Città: Ostia/Roma
Messaggi: 1191
Quote:
Originariamente inviato da DarkSiDE
è una domanda di teoria, non si riferisce ad un linguaggio specifico

se volessi limitare il numero delle istanze di una classe cosa mi converebbe fare?

vi sembra una 'buona' soluzione questa?

Codice:
public class MyClass {

private static int instanze=0;

MyClass(){
 if (instanze < numero)
   instanze++;
else throw new Exception();
}

}
Non vorrei dire una cacchiata ma cosi facendo ti ritroveresti ad avere n classi "MyClass" con l'intero "istanze" settato a 1.
__________________
Codice:
Ho concluso affari con : 8310(1,2),luxo,weather65,gokou,Zara,LotharInt,Mammabell,cionci,omerook,nathbigga,V0r[T3X],FatMas,3N20,smickys,CICUS,Dreamland,morpheus89,AMDman,Andi89,drive97,mich25,killerbox,abc3d,Sclergio,saint80,mazä,MR_GINO,OdinEidolon,ezekiel22
Galotar è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 10:00   #8
fbcyborg
Senior Member
 
L'Avatar di fbcyborg
 
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
Quote:
Originariamente inviato da Galotar
Non vorrei dire una cacchiata ma cosi facendo ti ritroveresti ad avere n classi "MyClass" con l'intero "istanze" settato a 1.
Appunto! è quello che pensavo anche io!
come fa a "non fare una grinza" ?
Quote:
Originariamente inviato da fbcyborg
[...]
Quel contatore non diventerà mai maggiore di 1, perchè ogni volta che si chiama il costruttore [...]
__________________
^ThE CyBoRg^
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 10:37   #9
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
Quote:
Originariamente inviato da DarkSiDE
è una domanda di teoria, non si riferisce ad un linguaggio specifico

se volessi limitare il numero delle istanze di una classe cosa mi converebbe fare?

vi sembra una 'buona' soluzione questa?

Codice:
public class MyClass {

private static int instanze=0;

MyClass(){
 if (instanze < numero)
   instanze++;
else throw new Exception();
}

}
Il tuo codice può anche andare bene, a patto che tu intenda limitare il numero di istanze costruite. Se invece intendi limitare il numero di istanze contemporaneamente esistenti in un dato istante ti conviene pensare al concetto di pooling. Esistono tanti modi per metterlo in pratica, ad esempio se sovrascrivessi nella tua classe il metodo:

Codice:
public void finalize() throws Throwable {
    istanze--;
}
Il grosso difetto del tuo codice è che non è thread-safe: e se ti stai chiedendo "che me ne frega del thread-safe?" allora perchè non delegare all'unico thread che utilizza MyClass il controllo sul numero di istanze?

Un esempio di pooling lo trovi qui .
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 11:18   #10
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da DarkSiDE
è una domanda di teoria, non si riferisce ad un linguaggio specifico

se volessi limitare il numero delle istanze di una classe cosa mi converebbe fare?

vi sembra una 'buona' soluzione questa?

Codice:
public class MyClass {

private static int instanze=0;

MyClass(){
 if (instanze < numero)
   instanze++;
else throw new Exception();
}

}

La soluzione migliore dipende fortemente da quello che vuoi fare. Spesso e volentieri la soluzione migliore e' non limitare il numero di istanze, oppure passi attraverso un Factory method e rendi il costruttore privato.

Che cosa devi fare di preciso? Devi limitare ad una sola istanza? Devi avere non piu' di un certo numero di istanze vive e riciclarle?
fek è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 11:30   #11
DarkSiDE
Senior Member
 
L'Avatar di DarkSiDE
 
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
raga, attenzione eh:
Quote:
Originariamente inviato da DarkSiDE
è una domanda di teoria, non si riferisce ad un linguaggio specifico
__________________
Non farò mai più affari con khalhell, 4HwGenXX.
DarkSiDE è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 12:26   #12
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da DarkSiDE
raga, attenzione eh:
Allora l'unica risposta e': dipende.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 13:48   #13
BountyKiller
Utente sospeso
 
Iscritto dal: Oct 2002
Messaggi: 2156
Quote:
Originariamente inviato da andbin
E dove sta scritto!??
da qualche parte nella mia mente ma se ci pensi un attimo penso che potrai convenire con me.... il problema di andare a inizializzare un membro statico dentro alla classe che lo possiede è il fatto che tutte le istanze di quella classe fanno quell'inizializzazione e così perdi la "memoria " del membro statico......attenzione che ho scritto inizializzare......se una classe modifica (attenzione: modifica, con un incremento prefisso se il membro è un numero intero,ad esempio) un suo dato membro statico non posso dire a priori che sia sbagliato.......
__________________
sign editata dallo staff
BountyKiller è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 13:50   #14
DarkSiDE
Senior Member
 
L'Avatar di DarkSiDE
 
Iscritto dal: Dec 2001
Città: Lecce
Messaggi: 3936
Quote:
Originariamente inviato da fek
Allora l'unica risposta e': dipende.
è una domanda 'generica', una risposta 'generica' va bene
__________________
Non farò mai più affari con khalhell, 4HwGenXX.
DarkSiDE è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 13:53   #15
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Insisto col factory .

Vuoi creare degli oggetti, affidi il compito a qualcuno e poichè quel qualcuno li crea può anche contare quanti ne abbia creati. Che io sappia non c'è un linguaggio sedicente orientato agli oggetti che impedisca la definizione di un produttore di altri oggetti. Devo però ammettere di conoscere solo alcuni linguaggi di programmazione e non tutti: magari qualcuno esclude la possibilità di usare il pattern factory.

OT: Le variabili di classe sono create e inizializzate una sola volta, all'atto della preparazione della classe o interfaccia (JLS, 3a ed., 4.12.3, 12.3.2)
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 17:14   #16
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
In effetti non funziona in quel modo.
Ogni oggetto MyClass in quel modo ha il suo intero "instanze", che ovviamente sarà sempre fisso ad 1.
Si dovrebbe risolvere mettendo fuori dalla classe la variabile in modo che per qualsiasi oggetto MyClass vede quella.
Quindi mettere MyClass dentro un'altra classe.. sbaglio? se si, dove?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 17:16   #17
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Quote:
Originariamente inviato da PGI-Bis

OT: Le variabili di classe sono create e inizializzate una sola volta, all'atto della preparazione della classe o interfaccia (JLS, 3a ed., 4.12.3, 12.3.2)
Quindi quello che ho scritto su è sbagliato??
Ahhh! comincio a fare confusione..
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 19-04-2006, 18:01   #18
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Usciamo dal seminato perchè la domanda è "in generale" ma visto che c'è la curiosità di saperlo...

Se "istanze" è una variabile di classe, allora esiste una sola variabile "istanze" per l'unica MyClass, per ogni ClassLoader.

Lasciando da parte i ClassLoader, tutte le istanze di MyClass (ma non solo) condividono la stessa variabile "istanze". Le operazioni che un'istanza di MyClass conduca su quella variabile "istanze" saranno visibili ad ogni altra istanza di MyClass.

A scanso d'equivoci, questo non vuol dire che in Java le informazioni si condividano tra oggetti così (o necessariamente così). E' di gran lunga più comune che la condivisione sia mediata da un terzo oggetto, noto ad entrambi i condividenti. Esiste però anche questa possibilità in forza della quale ogni classe Java è potenzialmente un singleton.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2006, 10:00   #19
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Quote:
Originariamente inviato da PGI-Bis
Usciamo dal seminato perchè la domanda è "in generale" ma visto che c'è la curiosità di saperlo...

Se "istanze" è una variabile di classe, allora esiste una sola variabile "istanze" per l'unica MyClass, per ogni ClassLoader.

Lasciando da parte i ClassLoader, tutte le istanze di MyClass (ma non solo) condividono la stessa variabile "istanze". Le operazioni che un'istanza di MyClass conduca su quella variabile "istanze" saranno visibili ad ogni altra istanza di MyClass.

A scanso d'equivoci, questo non vuol dire che in Java le informazioni si condividano tra oggetti così (o necessariamente così). E' di gran lunga più comune che la condivisione sia mediata da un terzo oggetto, noto ad entrambi i condividenti. Esiste però anche questa possibilità in forza della quale ogni classe Java è potenzialmente un singleton.

Quindi in poche parole il codice di darkside in linea generale è esatto..
perchè ogni oggetto MyClass creato incrementerà di 1 "instanze" fino ad arrivare a "numero" e quindi al prossimo tentativo di creazione di un oggetto MyClass avremo indietro l'eccezione.. no?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2006, 10:17   #20
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
E in effetti provando funziona...

Codice:
import poo.inout.*;

public class Test{
	private static int istanze=0;
	private boolean esisto;
	public Test(boolean esisto){
		if(istanze<4){
			this.esisto=esisto;
			istanze++;
		}else{
			System.out.println("STOP, TROPPE ISTANZE");
			System.exit(-1);
		}
	}

	public static void main(String args[]){
		int n=Console.readInt("Quante istanze? ");
		Test vettore[]=new Test[n];
		for(int i=0; i<n; i++){
			vettore[i]=new Test(true);
		}
		System.out.println("OK");
	}


}
nb: poo.inout è una libreria per leggere da console... vedi: Console.readInt().

Risultati:

Codice:
Quante istanze?  3
OK
Premere un tasto per continuare . . .
Codice:
Quante istanze?  4
OK
Premere un tasto per continuare . . .
Codice:
Quante istanze?  5
STOP, TROPPE ISTANZE
Premere un tasto per continuare . . . . .
__________________

Ultima modifica di luxorl : 20-04-2006 alle 10:21.
luxorl è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


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...
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
La Luna è stata colpita da un pic...
Creative Aurvana Ace 3: il futuro dell'a...
AMD chiarisce una volta per tutte (si sp...
Super sconti sui Google Pixel: Pixel 10,...
Addio SRAM? La nuova tecnologia GCRAM pr...
La repubblicana Anna Paulina Luna chiede...
1.000 Hz, risoluzione HD Ready: il futur...
Polestar 4 legge la strada al tuo posto:...
Mercato auto in Italia: vola l'elettrico...
Gli AI browser aggirano i paywall: i cas...
MSI regala Football Manager 26 con sched...
Come va in casa Broadcom/VMware? Computa...
Startup Marathon 2025: chi sono le 12 az...
Spotify continua a dominare il mercato d...
Il settore delle eSIM 'da viaggio' regis...
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: 21:21.


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