Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2004, 17:07   #1
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Classi Statiche [Java]

Raga, ho confusione..
chi mi aiuta bene a capire perchè una classe potrebbe aver bisogno di essere dichiarata statica? e che differenza c'è dalle altre classi?

Grazie
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 10:09   #2
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Classi statiche non vuol dire nulla...smmai sono le variabili o i metodi di una classe ad essere statici. In parole semplici ogni istanza di quella classe condividerà la zona di memoria relativa alla variabile o al metodo statico. Solitamente le variabile statiche sono delle costanti (che ovviamente non devono essere diverse per ogni istanza della classe!).
L'utilità di un metodo statico consiste principalmente nel fatto che non devi istanziare un nuovo oggetto della classe, ma usare l'istanza creata dal compilatore al momento della compilazione. Logicamente il metodo non deve essere legato a nessuna istanza di quella classe.
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 10:17   #3
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originariamente inviato da cn73
Classi statiche non vuol dire nulla...smmai sono le variabili o i metodi di una classe ad essere statici. In parole semplici ogni istanza di quella classe condividerà la zona di memoria relativa alla variabile o al metodo statico. Solitamente le variabile statiche sono delle costanti (che ovviamente non devono essere diverse per ogni istanza della classe!).
L'utilità di un metodo statico consiste principalmente nel fatto che non devi istanziare un nuovo oggetto della classe, ma usare l'istanza creata dal compilatore al momento della compilazione. Logicamente il metodo non deve essere legato a nessuna istanza di quella classe.

ti sbagli, Java permette di definire inner class statiche.

a livello di design non mi vengono in mente degli utilizzi molto frequenti, se non quello di potere scrivere delle classi di test in situazioni particolari perche' le inner class statiche hanno la possibilità di accedere a membri e metodi privati all'interno della "outer" class che le ospita.

in altre occasioni mi sembrano solo una complicaione a livello di design....
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 10:39   #4
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
O yes... Hai perfettamente ragione. Sono poco utilizzate ma permesse. Fra l'altro ne ho scritta una proprio la settima scorsa. Come hai detto tu si tratta comunque di InnerClass, non credo che il nostro amico intendesse quelle. Logicamente il concetto è sempre quello: una innerclass statica fornisce dei valori da considerarsi costanti e condivisi: non si necessita di un oggetto della outer-class per creare un oggetto della inner-class. Inoltre non si può accedere ad un oggetto della outer-class da un oggetto della innerclass statica .

Ultima modifica di cn73 : 17-05-2004 alle 10:41.
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 16:48   #5
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Egregi colleghi (di forum), mi sia consentito dissentire da entrambi (cn73 e kingv), sia sul piano tecnico (sono volati degli "inner-outer" e "static inner" da far drizzare i capelli ) che nel merito.

Trattiamo di strumenti avanzati dell'OOP in Java: probabilmente tra i pochi che rendono Java un linguaggio tremendamente complesso. Sicuramente è uno di quelli che lo rendono favoloso. Poichè l'argomento è lungo, spinoso e malamente trattato (se non del tutto trascurato) dai manuali su Java, vorrei un piccolo "hei sono ancora vivo e interessato" da parte di luxorl prima di salire in cattedra (sperando che la cattedra regga ).

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 16:58   #6
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Ei sono ancora vivo e interessato!

cmq è vero, ho sbagliato.. nn dovevo scrivere classi, ma metodi!!
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 17:14   #7
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originariamente inviato da luxorl
Ei sono ancora vivo e interessato!

cmq è vero, ho sbagliato.. nn dovevo scrivere classi, ma metodi!!


ah un errorino da niente....
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 17:16   #8
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
e vabbè daiiii... studio java da pochissimo...
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 19:49   #9
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Quote:
Originariamente inviato da luxorl
Ei sono ancora vivo e interessato!

cmq è vero, ho sbagliato.. nn dovevo scrivere classi, ma metodi!!
ops, ho schiacciato il tasto sbagliato.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 20:02   #10
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Quote:
Originariamente inviato da luxorl
Ei sono ancora vivo e interessato!

cmq è vero, ho sbagliato.. nn dovevo scrivere classi, ma metodi!!

Io l'avevo capito
Cmq caro prof PGI sono interessato anche io! Purtoppo ho davvero poco tempo per la teoria, ma presto sopperirò a questa mancanza!
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 21:44   #11
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Quote:
Originariamente inviato da luxorl
Ei sono ancora vivo e interessato!

cmq è vero, ho sbagliato.. nn dovevo scrivere classi, ma metodi!!
"classi statiche" e "metodi statici" sono cose diverse, come avrai già capito. Io ti parlo di "classi statiche".

Ma prima risolviamo le questioni "terminologiche".

In java non esistono "inner class statiche" o, meglio, non è questo il termine che definisce l'elemento a cui si riferisce kingv (che certamente conosce sostanza e termini, io colgo solo l'occasione per precisare a chi si avvicini per la prima volta a Java che esistono, come in tutti i linguaggi, dei termini "tecnici" che identificano fenomeni precisi. In via colloquiale poi è tutto un altro discorso, conta il succo, ma sapere non fa mai male ).

"inner class statica" va letto come classe "nested".

In Java non esiste una relazione inner-outer (vale quanto sopra), perchè non esistono classi "outer".

La relazione "inner-outer" va letta come "nested-top level".

Una classe "nested" è una classe dichiarata all'interno del corpo di un'altra classe. Una classe "top level" è una classe che non sia "nested". Una classe "inner" è una classe "nested" (quindi, dichiarata all'interno del corpo di un'altra classe) non "static". Da qui l'impossibilità del termine "inner static".

La relazione che esiste tra una classe nested-inner e la classe nel cui corpo essa è dichiarata è in realtà definita come relazione tra la classe inner e l'istanza della classe entro cui essa è racchiusa. Questo sottolinea un aspetto importante, vale a dire la dipendenza tra un modello, quello della classe inner, ed un oggetto che lo racchiude (anzichè un altro modello).

Al contrario, la relazione "nested-top level" esprime una dipendenza tra modelli.

Direi di fare a questo punto le presentazioni: ecco una classe top-level con una classe "nested":

Codice:
public class Automobile {

  public static class Motore {
  }

}
Motore è una classe "nested".

Come ogni strumento, anche le classi nested sono effettivamente un'"inutile complicazione di design" se usate a sproposito. Diventano indispensabili quando usate propriamente. Che siano indispensabili è dimostrato dall'esistenza di una relazione OO che si affronta raramente, a motivo del fatto che essa entra in gioco seriamente solo per modelli di simulazione estesi.

Poichè studi Java, probabilmente hai già affrontato il concetto di ereditarietà, e come l'ereditarietà possa esprimere la relazione tra tipi "è un".

Nel seguente modello di relazione:

Codice:
public abstract class Mammifero {
}

public class Cane extends Mammifero {
}
il rapporto che esiste tra Mammifero (modello padre) e Cane (modello figlio) è detto appunto "è un" (is-a), poichè, ogni Cane "è un" Mammifero.

Meno noto, dicevamo, il fatto che esista un secondo tipo di relazione nei modelli orientati agli oggetti: "è parte di" (part-of). Si tratta di un concetto molto comune: tutti gli oggetti composti posseggono una serie di relazioni "è parte di". Un po' più ostico è il passaggio dalla relazione tra oggetti alla relazione tra modelli di oggetti.

Prendi ad esempio i seguenti elementi:

Veicolo Motore
|(is-a) |
Automobile <--- (part of)

si nota una relazione "genitore-figlio" tra Veicolo e Automobile ed una relazione di "parte a tutto" tra Motore e Automobile. In un sistema così semplice non è strano definire la relazione di appartenenza usando il solo campo di classe (che però è una relazione tra un modello ed un oggetto racchiuso, l'inverso di inner-encosing instance, e non tra due modelli):

Codice:
public class Automobile extends Veicolo {
    protected Motore;
}
da leggersi come "un'automobile è un veicolo che possiede un motore".

Tutto bene? Si, finche il sistema resta limitato ad un tipo di veicolo.

Quando la simulazione si allarga le cose si complicano:

Veicolo Motore
| |
Automobile Motorino

Sia Automobile che Motorino sono Veicoli e posseggono un Motore. E' evidente però che idealmente i due motori non possano appartenere allo stesso modello.

La soluzione "povera" consiste nel creare una gerarchia di motori:

Motore
| |
MotoreAutomobile MotoreMotorino

La povertà sta nell'incoerenza: creiamo una gerarchia di modelli di motore in funzione dell'appartenenza di questi modelli a classi di veicoli, senza che vi sia alcuna relazione tra il modello di motore e la classe di veicolo.

Ha senso un modello di motore per automobile che non appartenga al concetto di modello di automobile? La logica grida no.

Codice:
package partiVeicolo;
public class Motore {
}

package veicoli;
public abstract class Veicolo {
}

package veicoli;
public class Automobile extends Veicolo {
  public static class Motore extends partiVeicolo.Motore {
  }
}

package veicoli;
public class Motorino extends Veicolo {
  public static class Motore extends partiVeicolo.Motore {
  }
}
Il che ti consente di creare delle automobili che abbiano come parte un motore per automobile, a partire da due modelli funzionalmente collegati.

Quindi, le classi "nested" sono l'espressione forte della relazione "è parte di" tra modelli, che è diversa dalla relazione "è parte di" tra un modello ed un oggetto (che ottieni quando inserisci un campo in una classe) e che è diversa ancora dalla relazione tra una "top-class" ed una sua "inner-class", che è di tipo esclusivamente strumentale (serve al linguaggio ma non al design del modello di simulazione, ma qui è IMHO).

Quanto è importante tutto l'ambaradam? Moltissimo: il succo della programmazione orientata agli oggetti è esprimere un modello in aderenza alla realtà. Questo genera sistemi solidi, facili da estendere, rimpicciolire, mantenere, perchè rispondono ad uno schema in tutto e per tutto simile al modo in cui crei il modello immaginario della realtà che stai simulando.

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2004, 09:10   #12
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
PGI -> appena ho un attimo leggo tutto il post che sembra interessante
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2004, 12:05   #13
Passy
Senior Member
 
L'Avatar di Passy
 
Iscritto dal: Jul 2000
Città: Vignola (MO)
Messaggi: 316
Quote:
Originariamente inviato da PGI
"classi statiche" e "metodi statici" sono cose diverse, come avrai già capito. Io ti parlo di "classi statiche"......il modello immaginario della realtà che stai simulando.

Ciao.
Ma quanto ne sai
Se ne impara tutti i gironi una nuova

Ciao
__________________
<Asus A8N-E Deluxe> <Amd64 3000+> <Ram 2.5 Gb> <Geffo3> <2 Maxtor 160 Gb RAID 1> <Adsl ZyXEL 645r> <ESS Maestro>
<GNU/Linux Debian Etch>
Wii 1037 4238 6261 1967
Passy è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2004, 20:43   #14
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Quote:
Originariamente inviato da PGI
"classi statiche" e "metodi statici" sono cose diverse, come avrai già capito. Io ti parlo di "classi statiche".

Ma prima risolviamo le questioni "terminologiche"...

Molto interessante
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2004, 13:08   #15
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Ho un professore all'università per POO! Fantastico!!
e tu me lo hai ricordato tantissimo... si sente la passione per la programmazione

cmq grazie per le dritte!
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2004, 13:11   #16
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
L'altro giorno abbiamo studiato proprio l'ereditarietà!

un concetto che mi è sfuggito è quello di casting!

forse perchè ho una gran confusione in testa.. che schifo il nuovo ordinamento!!!!!!

provate a mettermi un po' di ordine nell'encefalo? :P :P
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2004, 16:13   #17
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Aspettando PGI provo a chiarirti il concetto. Rientra nel concetto più ampio di polimorfismo. Un oggetto può assumere molte forme. Ad esempio se conosci i Vector, saprai che gli oggetti in esso contenuti sono degli Object (il papà di tutte le classi Java). Ma per utilizzarli, devi sapere cosa effettivamente sono. Ad esempio se sai che sono delle Stringhe, dovrai castizzarle come tali.

String oggetto= (String)myVector.elementAt(0)... ovviamente se l'oggetto non è una stringa, a runtime (ma non in fase di compilazione!!) avrai una ClassCastException.

Un'altro esempio può essere questo: tu hai n classi che implemetano un'interfaccia.

Class1 implements MyInterface
Class2 implements MyInterface
...
Classn implements MyInterface

Ogni istanza di una qualunque delle n classi può essere castizzata come MyInterface. L'utilità?? Pensa a un metodo che prende come parametro un oggetto MyInterface. Tu puoi passargli indifferentemente un qualunque oggetto di una classe che lo implementa(naturalmente class1...classn implementano i metodi definiti VUOTI nell'interfaccia).

O ancora se MyClass1 extends MyClass2 extends MyClass3...

una istanza di MyClass1 può essere castizzata(e usata) come una qualunque istanza delle classi padri.

MyClass1 mioOggetto= new MyClass1(...);Se hai un metodo che necessita di un oggetto MyClass3, puoi passargli
(MyClass3)mioOggetto.

Pensa invece a MyClass1 mioOggetto= new MyClass2(...); è lecito?? E il contrario??
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2004, 13:57   #18
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Dovrebbe essere lecito, ma nn il contrario...
dal generale al particolare si, dal particolare al generale no!
o sbaglio?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2004, 19:22   #19
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Forse rivedendo meglio... è class 3 la padre di tutte!
e quindi sarebbe lecito:

MyClass2 mioOggetto= new MyClass1(...);

e nn viceversa!!

al primo mettiamo il generale, e dopo new il particolare.. giusto?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2004, 20:39   #20
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Pensa a queste 2 dichiarazioni:

MyClass1 miaclasse = new Object();
Object oggetto = new MyClass1();

cn73 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
La previsione di CATL: barche elettriche...
Stangata in arrivo: PC e notebook coster...
Lian Li si è inventata il primo a...
Amazon in raptus sconti: ogni 24 ore nov...
44 idee regalo sotto i 50€: con le offer...
Super Sconti Amazon Haul: ribassi fino a...
Cloudflare ha bloccato 416 miliardi di r...
Prezzo mai visto: POCO F7 12/256GB in su...
Svuotano tutto: super sconto su due scop...
Warner-Netflix, l'accordo riaccende le s...
6 robot al prezzo del Black Friday e non...
Russia, i cani randagi diventano hotspot...
Ogni giorno sconti nuovi: oggi iPhone 17...
Non solo Mac: anche alcuni futuri iPhone...
La costruzione del telescopio spaziale N...
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: 12:48.


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