Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-01-2008, 15:51   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Eliminazione actions e getType

PREMESSA

il refactoring che ci apprestiamo a fare mira all'eliminazione di AbstractDroppable.getType nonché di alcuni altri metodi "getType" (cioè che effettuano dei test di runtime sul tipo di un dato oggetto) presenti in AbstractDroppableType e derivate.

poiché le actions sembrano utilizzare parecchio i metodi di cui sopra, e poiché esse non hanno più motivo di esistere in sostituzione di metodi diretti per modificare Grid (il codice di logging è stato eliminato), questo refactoring comporta anche l'eliminazione del design delle actions.

i task che cerco di riassumere nel seguito sono soggetti a possibile modifiche man mano che la situazione si evolve.


TASK LIST

1) eliminazione di AbstractDroppableType - spostare tutti i metodi di AbstractDroppableType (isXxx) in AbstractDroppable o derivate. eliminare metodo getType.

2) refactoring interfacce - controllare se i metodi spostati necessitano di essere utilizzati solamente da chi conosce gli oggetti sotto forma di interfacce specifiche (FallingObject, GridObject, ecc.), e non tramite tutta la AbstractDroppable; spostare eventualmente i metodi nelle rispettive interfacce.

3) eliminazione delle actions - ora, per ciascuna action:

3a) smistamento codice - il codice della action deve essere spostato in uno o più metodi nel chiamante della stessa: i test per quella action vanno anch'essi spostati nel test case corretto e refattorizzati di conseguenza.

3b) rimozione della action - rimuovere la action appena sostituita; i test ad essa relativi dovrebbero essere già scomparsi poiché dovrebbero essere stati spostati tutti in altri test case.

4) (ancora non è finita ) metodi polimorfici - tra i metodi spostati al punto 1, tutti quelli che cominciamo con "is" effettuano un test a runtime del tipo di gemma: devono essere eliminati ed il tutto refattorizzato di conseguenza, e non devono essere sostituiti da metodi canXxx perché sarebbe una cosa molto simile. Introdurre appositi metodi polimorfici con implementazioni specifiche per ogni tipo di droppable: vedi esempio di Jappilas, metodo crush in Abstract(Single)Droppable che nell'implementazione di default non fa nulla, mentre nell'implementazione della classe Chest effettua un crush.


NOTE AGGIUNTIVE

non iniziate ancora che non sono molto sicuro di questi passaggi, vorrei prima il parere di fek. a parer mio una volta svolto questo mega-refactoring Diamond Crush sarà molto più pulito, oserei dire al 70-80%

Ultima modifica di 71104 : 30-01-2008 alle 20:52.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 16:17   #2
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
non ho la code base sotto mano, ma quante sono le action?

Non si rischia di far ingrassare troppo grid?(possibile fosse una motivazione per l'introduzione delle action?)
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 17:49   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da thebol Guarda i messaggi
non ho la code base sotto mano, ma quante sono le action?
in it.diamonds.grid.action ne conto 10 e anche belle corpose (vedi sotto).

Quote:
Non si rischia di far ingrassare troppo grid?
sono d'accordo, infatti nel frattempo tocca anche spolparla con refactoring di contorno. è faticoso, lo so, ma secondo me è ciò che va fatto per riportare la codebase ad uno stato di pulizia
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 17:52   #4
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ricordo che ad un certo punto Grid era diventato un mostro a dieci test: va tenuto il piu' possibile snello e pulito a colpi di Extract Class.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 18:01   #5
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Prima di procedere vorerei ricordare che bisogna prima pulire i test !!! Se iniziamo a fare il resto prima rimaniamo di nuovo impantanati (http://www.hwupgrade.it/forum/showpo...2&postcount=7)!

__________________
Software engineer
Bonfo's Blog
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 18:22   #6
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da Bonfo Guarda i messaggi
Prima di procedere vorerei ricordare che bisogna prima pulire i test !!! Se iniziamo a fare il resto prima rimaniamo di nuovo impantanati (http://www.hwupgrade.it/forum/showpo...2&postcount=7)!

E abbiamo il volontario per il refactoring dei test relativi a Grid e AbstractDroppables.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 18:24   #7
Bonfo
Senior Member
 
L'Avatar di Bonfo
 
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
Quote:
Originariamente inviato da fek Guarda i messaggi
E abbiamo il volontario per il refactoring dei test relativi a Grid e AbstractDroppables.
Volentieri!! Rispondi però alla domanda Agile (Grazie )

EDIT:
Ehm.. c'è da piangere !!!!
__________________
Software engineer
Bonfo's Blog

Ultima modifica di Bonfo : 30-01-2008 alle 18:44.
Bonfo è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 20:19   #8
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
Quote:
Originariamente inviato da 71104 Guarda i messaggi
<...>
3a) introduzione metodo diretto - introdurre in Grid un metodo la cui esecuzione corrisponda ad una chiamata doIteration(xxxAction);
vedi altro thread - se pensi a "cosa" fa una action o meglio ancora una Crush in termini di operazioni base, vedi che è possibile che un metodo per ogni action (almeno non un metodo equivalente) in Grid, non serva

Quote:
4) (ancora non è finita ) metodi polimorfici -
siccome alla fine alla Droppable è richiesto un comportamento autonomo in due situazioni , cioè in fase statica nella griglia e al termine della caduta ( questo vale sia per la nuova gempair sia per le Droppable che si muovono a seguito di una crush, potenzialmente innescandone un' altra )
quindi tutta l' intelligenza delle singole Droppable potrebbe in effetti condensarsi in crush() ( o touchDown() ) ed eventualmente update(timestamp)
__________________
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
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 20:47   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da jappilas Guarda i messaggi
vedi altro thread - se pensi a "cosa" fa una action o meglio ancora una Crush in termini di operazioni base, vedi che è possibile che un metodo per ogni action (almeno non un metodo equivalente) in Grid, non serva
ho visto l'altro thread, avete ragione; provo a modificare la task list.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-01-2008, 20:53   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
il punto 3 è diventato da così:
Quote:
3a) introduzione metodo diretto - introdurre in Grid un metodo la cui esecuzione corrisponda ad una chiamata doIteration(xxxAction); naturalmente il metodo non deve contenere quella chiamata, ma svolgere il codice della action in questione. il metodo deve essere sviluppato TDD nella maniera più semplice possibile (repetita iuvant ).

3b) refactoring dei chiamanti - individuare tutte le chiamate a doIteration con quella action e sostituirle con una chiamata al metodo diretto. non dovrebbero essere sviluppati nuovi test per questo passaggio, ma controllate che i test vecchi passino ancora.

3c) rimozione della action - rimuovere la action appena sostituita ed i test ad essa relativi.
a così:
Quote:
3a) smistamento codice - il codice della action deve essere spostato in uno o più metodi nel chiamante della stessa: i test per quella action vanno anch'essi spostati nel test case corretto e refattorizzati di conseguenza.

3b) rimozione della action - rimuovere la action appena sostituita; i test ad essa relativi dovrebbero essere già scomparsi poiché dovrebbero essere stati spostati tutti in altri test case.
che ne pensate?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 02:04   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
mi sono preso la libertà di cominciare a spostare i metodi da AbstractDroppableType ad AbstractDroppable
tanto il punto 1) della task list è una cosa che va fatta sicuramente al 100%.

ho spostato il metodo toString, il quale ora è diventato un getTypeName implementato in ciascun tipo di droppable. inizialmente credevo fosse inutile el'ho eliminato, poi mi sono accorto che veniva utilizzato per costruire i nomi dei files delle textures, e quindi ho introdotto test-driven il metodo getTypeName.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 09:44   #12
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Tutto cio` che coinvolge Grid, GridController, Actions e Stati della griglia e` una delle parti piu` delicate al momento.

Volevo occuparmi della separazione del codice di rendering dal codice che gestisce la logica ma temo che questo task dovra` aspettare per ora...

Ieri ho pensato a cosa si potrebbe fare per semplificare il tutto e mi sono venute un po' di idee:

- Grid deve essere soltanto una griglia che contiene gemme. Le operazioni permesse sarebbero qualcosa tipo: insertGemAt(Droppable, Cell) e getGemAt(Cell).

- GridController gestirebbe un po' piu` esplicitamente l'esecuzione degli stati e le transizioni tra uno stato e l'altro.

- Idealmente non ci sarebbe piu` l'idea di droppable polimorfi ma di una singola classe Droppable che puo` contenere una o piu` Strategie (tipo nello strategy pattern) a seconda dello stato. Per esempio se lo stato e` MERGING_CELLS, molti droppable non faranno nulla quando il metodo droppable.update(State currentState) viene eseguito ma le BigGem invece eseguiranno la MergingStrategy. MERGING_CELLS potrebbe benissimo essere un enumeratore cosi` da poter tenere gli stati in una mappa.


Questa e` un'idea generale che sicuramente necessita una revisione
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 09:52   #13
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
L'idea di uno Strategy o State dentro Droppable mi piace perche' semplifica molto la gerarchia.

Sto guardando la classe AbstractCrushAction e contiene dipendenze ovvie su Grid, Gem e usa isGem() per eseguire il suo compito. Questo e' sbagliato. Dovrebbe limitarsi a chiamare un qualche metodo crush() su un droppable, ma viste le dipendenze ha bisogno di un po' di refactoring per potere spostare la logica da questa Action al Droppable.

Questa cosa qui poi e' del tutto fuori dagli schemi:

Codice:
    protected void setAddAtScore(boolean addAtScore)
    {
        this.addToScore = addAtScore;
    }
Sta cambiando il comportamento di questa classe attraverso un flag. Si fa in C, non in Java
fek è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 09:55   #14
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Ah si mi sono svanito una parte. Alla fine droppable abbiamo detto che avrebbe una hashmap<State, Strategy>. A questo punto, in teoria, non dovremmo piu` avere bisogno di diverse classi per Gem, Chest etc...

Ci basterebbe avere una factory che crea gli oggetti con le strategie giuste.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 10:34   #15
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Voglio togliere quello Sprite da Droppable e creare un oggetto che sia una collezione di Sprite e relativo Droppable: qualcosa tipo RenderableDroppable o DrawableDroppable.

Ci provi tu Fede o ci provo io stasera se torno presto?
fek è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 10:41   #16
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da Ufo13 Guarda i messaggi
Ah si mi sono svanito una parte. Alla fine droppable abbiamo detto che avrebbe una hashmap<State, Strategy>. A questo punto, in teoria, non dovremmo piu` avere bisogno di diverse classi per Gem, Chest etc...

Ci basterebbe avere una factory che crea gli oggetti con le strategie giuste.
non è un po la riporoposizione dell'AbstractDroppableType(magari un po più potente)?
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 11:52   #17
Ufo13
Senior Member
 
L'Avatar di Ufo13
 
Iscritto dal: Nov 2005
Messaggi: 1545
Quote:
Originariamente inviato da fek Guarda i messaggi
Voglio togliere quello Sprite da Droppable e creare un oggetto che sia una collezione di Sprite e relativo Droppable: qualcosa tipo RenderableDroppable o DrawableDroppable.

Ci provi tu Fede o ci provo io stasera se torno presto?
Non sono sicuro di aver capito quello che hai in mente... La mia idea era creare un oggetto GridRenderer che prendesse tutti i Droppable da Grid e li renderizzasse.

L'informazione su come renderizzare un Droppable dovrebbe essere decoupled (scusate non mi viene un termine in italiano) il piu` possibile.

Fra possiamo vederlo insieme se ti va.
Ufo13 è offline   Rispondi citando il messaggio o parte di esso
Old 31-01-2008, 13:53   #18
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ok, lo guardiamo stasera assieme.
fek è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Il nuovo Snapdragon 8 Elite Gen 6 sar&ag...
Nintendo Switch 2: risultati sotto le at...
Weekend con tante sorprese su Amazon: to...
HONOR non si ferma più: il 2025 &...
Speciale best seller: EUREKA J15 Evo Ult...
Roborock Q10 X5+ da 10.000 Pa a 199€ &eg...
E-mail reset password di Instagram: la c...
La NASA ha discusso le problematiche del...
Il razzo spaziale NASA SLS e la capsula ...
Stazione Spaziale Internazionale: Crew-1...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
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: 11:12.


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