Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-06-2008, 09:55   #1
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
[JAVA] uso di instanceOf

salve a tutti!, ho creato una classe astratta che è estesa da diverse classi concrete e da un'ulteriore classe astratta estesa a sua volta da altre classi concrete, sembra un delirio ma provo a schematizzare C.A = classe astratta e C.C uguale classe concreta

Classe A Astratta
|ssssssss|ssssss|
|ssssssss|ssssss|
|ssssssss|ssssss|
C.AssssssC.CssssC.C
|s|
|s|
|s|
C.C C.C

Dato che inizialmente viene creata una matrice di tipo "classe A astratta" che può contenere uno qualsiasi dei tipi concreti definiti al suo interno ( ma la scelta di cosa contiene ogni elemento della matrice è random) come faccio per sapere cosa contiene? uso istanceOf() in che modo? non l'ho mai fatto prima e devo capirlo assolutamente perchè a seconda dell'istanza che ottengo devo compiere certe operazioni...grazie
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0

Ultima modifica di Re_Kotc : 16-06-2008 alle 10:03. Motivo: ho aggiunto gli spazi "s" altrimenti dopo aver postato il messaggio gli spazi vuoti venivano tolti e non si capiva lo schema
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 10:00   #2
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
le "s" significano spazio vuoto ...se però non riempivo quegli spazi dopo aver postato venivano cancellati e non si capiva più lo schema
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 11:02   #3
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
se hai la necessità di utilizzare instanceof per sapere quale codice eseguire allora hai semplicemente sbagliato la progettazione del sistema e devi rifarla....
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 11:19   #4
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
mmmh...non sono sicuro di aver capito il tuo commento..in realtà è la struttura di un progetto che mi è stato consegnato per esercitarmi..e non è che possa variare più di tanto, l'idea di usare instanceof è mia ma avere una matrice di elementi astratti che vengono riempiti con oggetti concreti random è parte del testo dell'esercizio...per questo non riesco a proseguire ...e non posso modificare la cosa visto che devo rispettare le specifiche..se poi sono state scritte da incompetenti questo non so dirtelo..
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 11:43   #5
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
ah ok, se è fatto per esercizio allora va bene...
instanceof ti dice semplicemente se l'oggetto istanziato è di un certo tipo.
Comunque non puoi avere una matrice di oggetti astratti dato che un oggetto astratto non può essere istanziato..
quindi ancora mi sfugge quello che devi fare..
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 11:56   #6
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
:P intanto grazie della disponibilità , cmq io prima dichiaro questa matrice senza istanziare niente

MazeElement[][] maze;

MazeElement è la classe astratta che contiene tutte le altre, poi però secondo dei parametri passati dall'esterno devo istanziare ogni elemento della matrice tramite un new classeConcreta(), però io non so quale delle classi concrete verrà utilizzata per instanziare l'oggetto in una determinata posizione della matrice visto che questo è deciso dall'esterno.
il punto è che poi scorrendo la matrice a seconda dell'oggetto istanziato devo effettuare delle operazioni diverse, ma come faccio a sapere se l'oggetto è di una o di un'altra classe?

tipo così?

if (maze[i][j] instanceof classeA){ ecc

?
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 12:36   #7
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4747
Quote:
e non posso modificare la cosa visto che devo rispettare le specifiche..se poi sono state scritte da incompetenti questo non so dirtelo..
credo che una soluzione adatta in questo caso sia usare semplicemente il polimorfismo delle classi concrete in fase di accesso agli oggetti contenuti nella matrice, e una factory esterna in fase di riempimento della matrice... violerebbe le specifiche?
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name
Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish
Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate

Ultima modifica di jappilas : 16-06-2008 alle 14:16.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 12:39   #8
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
Quote:
Originariamente inviato da Re_Kotc Guarda i messaggi
:P intanto grazie della disponibilità , cmq io prima dichiaro questa matrice senza istanziare niente

MazeElement[][] maze;

MazeElement è la classe astratta che contiene tutte le altre, poi però secondo dei parametri passati dall'esterno devo istanziare ogni elemento della matrice tramite un new classeConcreta(), però io non so quale delle classi concrete verrà utilizzata per instanziare l'oggetto in una determinata posizione della matrice visto che questo è deciso dall'esterno.
il punto è che poi scorrendo la matrice a seconda dell'oggetto istanziato devo effettuare delle operazioni diverse, ma come faccio a sapere se l'oggetto è di una o di un'altra classe?

tipo così?

if (maze[i][j] instanceof classeA){ ecc

?
ok ora è chiarissimo
si puoi fare benissimo in quel modo per capire di che tipo è la classe ed agire di conseguenza
nel "mondo reale" piuttosto che fare una cosa del genere, ogni oggetto di tipo diverso avrà al suo interno dei metodi che si comportano in maniera diversa a seconda del tipo istanziato..
Praticamente, sfruttando il polimorfismo, anzichè fare qualcosa del genere:
Codice:
if (obj instanceof A) {
    obj.doSomething();
} else if (obj instanceof B) {
    obj.doAnotherThing();
} else if 
.......
basterebbe fare:
Codice:
obj.doSomething();
e ogni tipo saprà già come comportarsi correttamente, risparmiandoti una bella catena di if-else
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 15:07   #9
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
@tigershark : ok :P quindi da quanto ho capito posso fare con le instanceOf() e poi gestire di conseguenza una catena di if XD....vabbene grazie!



@jappilas : sorry ma sei troppo tecnico per le mie molto modeste conoscenze di java non ho capito cosa intendi


cmq avrei un secondo dubbio legato a questo, se poi l'elemento della matrice
maze[i][j] contiene un 'istanza della classe concreta A che estende MazeElement, io posso usare direttamente su questa istanza i metodi definiti nella classe concreta A ? del tipo

if (obj instanceof A) {
obj.doSomething();
} else if (obj instanceof B) {
obj.doAnotherThing();
} else if

dove :

class A extends MazeElement {


public int doSomething(); ecc


}

cioè il metodo è definito nella classe concreta e maze[i][j] contiene un'istanza di tale classe, posso usare direttamente il metodo in quel modo?
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 17:59   #10
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4747
Quote:
Originariamente inviato da Re_Kotc Guarda i messaggi
cioè il metodo è definito nella classe concreta e maze[i][j] contiene un'istanza di tale classe, posso usare direttamente il metodo in quel modo?
cioè usare
Codice:
maze[i][j].doSomething()
?

certo, se in doSomething incapsuli il comportamento differenziato di ogni istanza ( quello che prima avresti fatto eseguire sulla base degli esiti dei controlli di tipo ) - si tratta appunto del polimorfismo a cui ci si riferiva prima

Quote:
sorry ma sei troppo tecnico per le mie molto modeste conoscenze di java non ho capito cosa intendi
hai ragione, scusami
il factory è un pattern che consente la creazione di oggetti senza sapere a priori a quale classe concreta appartengono ( l' importante sarebbe che sia esportato un metodo di creazione comune) - ma in effetti se nel tuo caso dovevi randomizzare i tipi degli oggetti inseriti nella matrice, probabilmente la soluzione è ancora più semplice...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name
Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish
Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate

Ultima modifica di jappilas : 16-06-2008 alle 19:35.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 19:41   #11
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12113
Quote:
Originariamente inviato da Re_Kotc Guarda i messaggi
cmq avrei un secondo dubbio legato a questo, se poi l'elemento della matrice
maze[i][j] contiene un 'istanza della classe concreta A che estende MazeElement, io posso usare direttamente su questa istanza i metodi definiti nella classe concreta A ? del tipo

if (obj instanceof A) {
obj.doSomething();
} else if (obj instanceof B) {
obj.doAnotherThing();
} else if

dove :

class A extends MazeElement {


public int doSomething(); ecc


}

cioè il metodo è definito nella classe concreta e maze[i][j] contiene un'istanza di tale classe, posso usare direttamente il metodo in quel modo?
si ma devi effettuare prima il cast:
Codice:
f (obj instanceof A) {                           
    ((A)obj).doSomething();
} else if (obj instanceof B) {
    ((B)obj).doAnotherThing();
} else if
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 20:34   #12
morskott
Member
 
Iscritto dal: Jul 2005
Messaggi: 291
il polimorfismo in 2 parole in croce ti permette di fare una cosa tipo
Codice:
public abstract class A{
public abstract void doSomething();
}
Codice:
public class B extends A{
public void doSomething(){System.out.println("Sono B");}
}
Codice:
public class C extends A{
public void doSomething(){System.out.println("Sono C");}
}
per poi utilizzarle così
Codice:
public class Test{
public static void main(String[] args){
A a1=new B();
A a2=new C();
a1.doSomething();
a2.doSomething();
}
}
che stampa rispettivamente
Codice:
Sono B
Sono C
__________________
CPU: Intel Core 2 Quad Q6600 - Mobo: Asus P5E - RAM:4x2GB DDR2 - sk video: Power Color ATI Radeon HD3870 - HD:Western Digital 750GB
morskott è offline   Rispondi citando il messaggio o parte di esso
Old 17-06-2008, 08:07   #13
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
grazie mille a tutti!! davvero! ....ho capito alcune cose importanti sul polimorfismo e su come usare quel maledetto instanceOf() .....
gracias!!

buona giornata !
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
AMD: l'alternativa al DLSS 5 sarebbe in ...
Canon EOS R8 Mark II: sensore da 24,2 MP...
Alla Napoli Shipping Week 2026 arriva il...
Addio bollo: il Governo cancella la tass...
Speciale Logitech G: mouse PRO X SUPERLI...
Cosa pensano Altman, Amodei, Benioff e H...
Microsoft: evento il 7 ottobre dedicato ...
Scoperti 84 corpi cosmici anomali: cosa ...
Dimensity 9600 Pro contro A20 Pro, il nu...
HillMiles MileCity1 torna a 648,99€: e-b...
Enel Mobile, il debutto è sempre ...
Nuova rimodulazione per il fisso di TIM ...
iPhone 18 Pro e Pro Max, preordini sotto...
Ha craccato 26 giochi: ora Denuvo vuole ...
Xiaomi 18 Pro, il lancio è uffici...
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: 00:41.


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