Torna indietro   Hardware Upgrade Forum > Software > Programmazione

ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-04-2006, 22: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 22:24.
DarkSiDE è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 23: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 : 18-04-2006 alle 23:35.
fbcyborg è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2006, 23: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, 07: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, 08: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, 08: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, 08: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, 09: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, 09: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, 10: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, 10: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, 11: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, 12: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, 12: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, 12: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, 16: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, 16: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, 17: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, 09: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, 09: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 09:21.
luxorl è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Death Stranding 2 diventa Steam Deck Ver...
TSMC spinge i chip per smartphone verso ...
OpenAI prepara un modello per la cybersi...
Il CMF Phone 3 Pro sta arrivando: tra le...
Le migliori offerte Amazon di oggi: robo...
Altro che ridimensionamento: OnePlus sta...
YouTube batte Netflix come rivale della ...
I nuovi ASUS ROG Zephyrus G14 e G16 (202...
Meno di 200€ per un robot aspirapolvere ...
La CPU torna protagonista: 400 milioni s...
Il nuovo pannello OLED top di gamma di S...
Offerte LEGO Amazon: Formula 1, Harry Po...
Il Motorola Edge 70 Pro sta arrivando e ...
Amazon pronta a sfidare NVIDIA? La lette...
L'IA ridurrà drasticamente il lav...
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: 10:36.


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