Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-06-2008, 10: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 11: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, 11: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, 12:02   #3
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
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, 12: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, 12:43   #5
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
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, 12: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, 13: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 15:16.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 13:39   #8
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
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, 16: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, 18: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 20:35.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 16-06-2008, 20:41   #11
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
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, 21: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, 09: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


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Arianespace potrebbe lanciare il primo r...
Google Pixel 10a disponibile al prezzo m...
Microsoft Copilot nei guai: email riserv...
AOC a 399€ su Amazon: QD-OLED 240 Hz e 0...
La Cina ha recuperato dal mare il primo ...
Boeing CST-100 Starliner: la NASA rende ...
hiop e TaDa uniscono le forze per trasfo...
Thermal Grizzly mostra il Ryzen 7 9850X3...
AMD Ryzen 'Olympic Ridge' Zen 6 per desk...
Donald Trump renderà pubbliche in...
Prezzo mai visto da mesi: ECOVACS DEEBOT...
Non solo S26, Samsung sta per lanciare a...
Windows 11 avrà a breve uno Speed...
Ask Intel: l'assistente IA che ti aiuta ...
Nasce Freedom.gov: il portale USA per ag...
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: 04:32.


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