Torna indietro   Hardware Upgrade Forum > Software > Programmazione

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.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
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


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...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
Xiaomi L1 a 153€: il proiettore smart 10...
Dopo Amazon, anche il data center di Gro...
Scoppia il caso Meta AI: l'Europa apre u...
Torna in sconto dopo mesi il super table...
Ricarica elettrica senza cavi: in Svizze...
iPhone SE (2016) entra ufficialmente nel...
The God Slayer: Pathea svela il nuovo op...
Spotify Wrapped 2025: il nuovo Wrapped P...
Offerte OPPO per Natale 2025: i migliori...
ROG Matrix RTX 5090: la GPU gaming pi&ug...
AMD, Cisco e HUMAIN: una joint venture p...
Una bottiglia d'acqua si rovescia nell'a...
Blink Mini quasi regalate: videocamere d...
NASA OSIRIS-REx: trovati ribosio e gluco...
Una delle figure più rilevanti de...
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: 14:58.


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