Torna indietro   Hardware Upgrade Forum > Software > Programmazione

PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-04-2006, 11:39   #1
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Refactoring delle gemme e controllo ad eventi degli effetti della caduta

Principalmente questo refactoring si dovrà occupare di:

- creare una gerarchia di classi che includerà tutte quelle che possiamo definire Droppable (Stone, Gem, Flashing Gem, Chest, BigGem).

Secondo me a questo punto ci dovremmo fermare e verificare che tutto funzioni e tutti i test passino...

Il refactoring da effettuare successivamente sarà:

- creare un'interfaccia DroppableController, da cui deriveranno tutti i Controller delle rispettive classi della gerarchia sopra

- implementare un meccanismo in ogni classe della gerararchia che allochi e restituisca il controller che si dovrà occupare di gestire gli eventi da applicare ai Droppable

- implementare gli eventi ed un gestore di eventi (che potrebbe essere il controller)
Ad esempio questa dovrebbe essere la gestione dell'evento "una gemme si è fermata" :

DropapbleController controller = droppable.getController();
controller.onHalt(grid);

- la gestione dell'evento "tutte le gemme sono ferme" provocherà i crush, che lavoreranno in maniera diversificata a seconda del Droppable

Questa è la mia proposta...a voi
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 12:17   #2
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Faccio 2 puntualizzazioni per vedere se ho capito

1) Ci vuole ovviamente l'interfaccia Droppabel
2) La gestione degli eventi comporta anche la creazione di 2 interfaccie:
-quella di chi genera gli eventi
-quella di chi li ascolta, il listener
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 13:06   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Bonfo
1) Ci vuole ovviamente l'interfaccia Droppabel
Sì, ora fek preferirebbe un'interfaccia, sinceramente io preferirei una classe base
Quote:
Originariamente inviato da Bonfo
2) La gestione degli eventi comporta anche la creazione di 2 interfaccie:
-quella di chi genera gli eventi
-quella di chi li ascolta, il listener
Dipende un po' da come organizzaimo la cosa...
Se esisterà una sola classe evento e ci sarà un tipo a discriminare l'evento generato, basta uno switch (soluzione che scala male)...

Se invece facciamo una classe evento per ogni evento da gestire allora bisogna definire un'interfaccia per il listener, mentre per chi genera gli eventi non ci sarà bisogno di interfaccia...

Vediamo un po' come gestirla...

I generatori di eventi potrebbero essere due: Grid e GridController... Questi sono sicuri...

Il listener dovrebbe essere GridController... Ditemi voi come pensereste di organizzare la cosa...

PS: ho pensato che, dopo, ad eventi sarebbe possibile gestire qualsiasi cosa che fa GridController...come la gestione dei vari timestamp...l'inserimento di una nuova gemma... Ditemi voi...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 13:18   #4
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da cionci
Sì, ora fek preferirebbe un'interfaccia, sinceramente io preferirei una classe base
Perchè non tutte e due...interfaccia e classse astratta che implementa tale interfaccia

Quote:
Originariamente inviato da cionci
Il listener dovrebbe essere GridController...
Nella mia testa era il contrario
GridControler genera l'evento e il CrushGemListener si registra all'evento
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 13:27   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
mmmhhh...quindi te faresti un listener per ogni evento ? Non ci avevo pensato sinceramente...

Io invece farei così, supponendo di definire una classe per ogni evento:
Codice:
class DroppableHaltedEvent
{
   public processEvent(Listener listener)
   {
       listener.onDroppableHalted();
   }
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 13:59   #6
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quindi tu faresti generare a GridController degli eventi che poi GrdiContyroller deve gestire....

Mi sembra un po' masochistico

A parte gli scherzi, penso che l'idea principale che deve guidare il refactoring di GridController è prorio quella di dividere le responsabilità.
Quello che secondo me dobbiamno fare è eliminare quell'update in GridController e trasformarlo in una semplice generazione di eventi.

Ora per amore di Ingegneria del Software dovrebbe essere possibile che all'evento "gemsPair ferma" possano corrispondere più azioni, ovvero più listener.

Quindi in conclusione io farei:
- N listener in base alle responsabilità, ovvero a che cosa deve fare. Io vedo bene come listener i GemAction...alla fine sono quelli i compiti da svolgere.
- M eventi che notificano i momenti chiave del gioco

in realtà ciò che penso io è un pattern observer, dove gli observable sono "eventi", ovvero accadimenti del gioco
Codice:
------------------------------------------------------------------
GridController.registerEventGemsPairStop(CrushGemListener);

------------------------------------------------------------------
if(!gemsPairsCanMoveDown)
     for(registeredListener)
        notifyEvent()
------------------------------------------------------------------
public void notifyEvent()
{
      processEvent()
}

Così a GridController la facciamo dimagrire in fretta
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 14:23   #7
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
La proposta mi sembra buona, preferisco ovviamente l'interfaccia e poi, eventualmente, una classe astratta base (proprio se necesaria). L'importante e' suddividere il refactoring in piccoli passi verificabili e ben testabili. Non voglio un lungo refactoring che ha bisogno di essere concluso prima che il tutto torni a funzionare. E poi, voglio che le cose si semplifichino: non fatevi prendere la mano dal refactoring aggiungendo piu' flessibilita' di quella strettamente necessaria. Cose tipo per l'Amore dell'Ingegneria del Software mi suonano gia' male: diciamo per l'amore di semplicita' e fate le cose semplici
fek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 14:48   #8
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da fek
Cose tipo per l'Amore dell'Ingegneria del Software mi suonano gia' male: diciamo per l'amore di semplicita' e fate le cose semplici


Comunque era ironico
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 03-04-2006 alle 14:50.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 15:54   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ripeto...io non farei un listener per ogni azione da svolgere...
Io invece a questo punto farei un solo listener che contenga i vari metodi da richiamare...

Codice:
class DroppableHaltedEvent implements GridEvent
{
   Droppable droppable;

   public DroppableHaltendEvent(Droppable droppable)
   {
       this.droppable = droppable;
   }

   public processEvent(GridEventHandler handler)
   {
       handler.onDroppableHalted(droppable);
   }
}


class GridEventHandler
{
   ....
   public notifyEvent(GridEvent event)
   {
      event.processEvent(this);
   }

   public onDroppableHalted(Droppable droppable)
   {
      DropapbleController controller = droppable.getController();
      controller.onHalt(grid); 
   }
}
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 18:19   #10
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Cionci a me la tua soluzione piace molto
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 18:32   #11
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Piace anche a me. A occhio non c'e' un'indirezione di troppo? (non ci giuro affatto, probabilmente ho perso qualcosa io).
fek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 18:35   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Però c'è una cosa che non mi sconfiffera...questo affare resta sicrono

Il mio dubbio è questo:

Codice:
if(!gemsPairsCanMoveDown)
     for(registeredListener)
        notifyEvent(new DroppableHaltedEvent (droppable))
In pratica appena avviene un evento viene eseguito l'handler...allora tanto vale chiamare questo, no ????
Codice:
if(!gemsPairsCanMoveDown)
     for(registeredListener)
        handler.onDroppableHalted(droppable);
Potremmo desincronizzarlo ????? Avrebbe senso ??? Sarebbe utile Semplificherebbe ?

Intendo praticamente mettere in coda gli eventi...

Dentro update di GridController avverrà l'update di Grid (che metterà in coda alcuni eventi)...verrà eseguito il resto del codice di Gridcontroller (che metterà in coda altri eventi)....a questo punto potrebbe essere chiamata gridEventHandler.processEventList() che non farà alltro che eseguire glie venti dal più vecchio al più recente...

Che ne dite ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 18:35   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da fek
Piace anche a me. A occhio non c'e' un'indirezione di troppo? (non ci giuro affatto, probabilmente ho perso qualcosa io).
Vedi sopra...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 19:08   #14
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da cionci
Che ne dite ?
La seconda versione tutta la vita, perche' toglie un'indirezione. Al momento non vedo motivo per desincronizzare, ci interessa solo portare fuori da Grid il codice di gestione dell'evento.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 19:16   #15
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da cionci
Che ne dite ?
Scusate...ma notifyEvent() è senza parametro.
Io la metteri perchè all'interno di questo metodo, anche privato, vengono invocati tutti i handler.onDroppableHalted(droppable);....

....però se si usa un solo handler, ovvero listener, va bene uguale
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 19:21   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Bonfo
vengono invocati tutti i handler.onDroppableHalted(droppable);....
No, ne viene invocato solo uno...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2006, 22:06   #17
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma quando ci lavoriamo su questo refactoring ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2006, 00:52   #18
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Propongo un'altra cosa:

all'interno di GridController quando una GemsPair viene droppata viene eseguito qualcosa, viene atteso un tot di tempo, di nuovo viene eseguito qualcosa etc...

Non sarebbe bello un observer pattern con tot observers?
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2006, 03:23   #19
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
é quello che volevo fare con i listener, ovveo gli observer
__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2006, 08:17   #20
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
io butto li un idea...

introdurre una specie di pattern state in gridController(uno per quando ci sono le gemme in movimento, uno per quando si fa cadere le gemme che possono cadere, uno per le crush, uno per l'update delle stone, etc), che contengano un metodo update(che faccia il lavoro per quello stato), e che restituiscano lo stato successivo del gridController. In modo da simulare una specie di macchina a stati.
thebol è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Scivolone ASRock: annuncia il Ryzen 9 99...
DLSS 5: NVIDIA spiega il funzionamento, ...
PlayStation come NVIDIA DLSS: Sony punta...
OnePlus Nord 6 sta arrivando e avr&agrav...
CPU desktop: Intel dice addio ai socket ...
Google sta testando un'app di Gemini per...
NVIDIA GeForce RTX 5070 Laptop: in arriv...
Il Tribunale di Roma ha annullato la mul...
AppleCare One potrebbe arrivare presto i...
Amazon ci riproverà: l'azienda st...
Apple e Samsung dominano la classifica d...
Un game designer di 9 anni, due fogli a ...
Il weekend Amazon parte col botto: gross...
Amazfit Active 2 scende a 69,99€: i migl...
Smart TV No IVA su Amazon: QLED, Mini-LE...
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: 03:02.


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