|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Orrore, abbiamo una GetType!!!
AbstractDroppable.getType. se ancora non mi sono rincoglionito del tutto e ricordo qualcosa di quanto mi ha insegnato fek, quella "cosa" va eliminata.
|
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
Codice:
DroppableType firstGemType = firstGem.getGridObject().getType();
<...>
assertEquals("gfx/droppables/" + firstGemType.getName() + "/"
+ firstGemColor.getName(),
((MockEngine)environment.getEngine()).getImage(0).getName());
avendo le subdirectory nomi ("gems", "boxes", "stones", "flashing") interamente lowercase e soprattutto diversi dagli identificatori dei rispetti DroppableType, desumo che non si potesse passare per toString()... comunque sì, la struttura attuale è troppo convoluta... Quote:
__________________
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
|
||
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
major achievements dei refactoring che ho fatto oggi: ho eliminato una catena di if, ridisposto alcuni test case in modo tale che i packages rispecchino la struttura del codice di produzione, e ho eliminato un parametro in un metodo virtuale
più altri minor achievements. PS: del metodo virtuale in questione va eliminato anche l'altro parametro, ci penso domani. PPS: preciso che di tutto ciò solo la catena di if è in-topic i prossimi passi per eliminare quella getType sono di trasportare in AbstractDroppable (se non addirittura eliminare del tutto) tutti i metodi che stanno in AbstractDroppableType: non ha assolutamente senso tenersi oggetti aggiuntivi per descrivere il tipo dei droppables quando in realtà la stessa AbstractDroppable si suddivide in BigGem, Gem, Chest, ecc. per dirla in altri termini: non dobbiamo sfruttare la tabella delle funzioni virtuali degli oggetti AbstractDroppableType, ma quella degli oggetti AbstractDroppable. |
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
questa parentesi meritava un approfondimento.
molti di quei metodi ci tengo ad eliminarli proprio, e se ne guardate i nomi capirete il perché: isChest, isGem, isStone... sono tutte "simil-getType", cioè sono tutti metodi che testano a runtime il tipo di oggetto, e noterete anche che dove questi metodi vengono chiamati gli if non mancano di certo. il metodo createInstance invece di per se' potrebbe anche restare, ma refattorizzando in modo tale da trasportarlo in AbstractDroppable esso si trasforma naturalmente in una semplice chiamata a un costruttore (almeno spero ).
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
L'idea che cullo da parecchio tempo è quella di avere un'interfaccia (o classe astratta) base da cui far derivare tutti gli oggetti che stanno in una griglia, e di variare quindi soltanto l'implementazione dei metodi virtuali dei discendenti.
In sostanza il tutto si dovrebbe ridurre a un'interazione (più ad alto livello) fra oggetti che rispondono agli stessi "stimoli", e si "adeguano" di conseguenza. Bisogna però definire per benino quest'interfaccia, e non è cosa semplice.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
AbstractDroppable non corrisponde alla descrizione?
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Probabilmente la struttura convoluta viene fuori dalla stratificazione diversi task di diverse storie. Per fortuna esiste il refactoring!!!
In ogni caso, se non ricordo male, il probelma del getType era in relazione all "colore" della gemma o del chest, non tanto relativo al tipo di droppable. In ogni caso sono d'accordo con te, più "getType" si eliminano, meglio è! |
|
|
|
|
|
#8 | |||||
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
Quote:
Quote:
Quote:
in quel caso si testava il colore della gemma passando dal nome della texture usata... bisogna vedere se ci sono altri casi di questo tipo ed eventualmente quali sono sono riferiti alla "logica" del gioco e quali effettivamente all' aspetto grafico (nel qual caso non servono assolutamente) Quote:
__________________
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 : 27-01-2008 alle 22:30. |
|||||
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Esattamente. Vorrei vedere eliminati tutti i metodi "isChest" ecc. sostituendoli con metodi che vengano interrogati, invece, su quello che questi oggetti sono in grado di fare (allo stato attuale o in risposta a determinate sollecitazioni), come ad esempio la possibilità di essere "inglobate" (in una big gem) oppure di essere distrutte, ecc.
Per quanto riguarda il colore, se serve conoscerlo si può sempre realizzare un metodo apposito che lo restituisce (non è come restituire un tipo).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Il fronte anti interfacce continua acrescere
Perché non aprite un branch e fate qualche commit sperimentale? Fran potrebbe non essere d'accordo ora ma magari se vede che il codice è più pulito potreste riuscire a convincero a fare un merge. |
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
io non sono mica anti interfacce: io sono solo contrario a qualsiasi tipo di testing a runtime del tipo di un oggetto. isChest per me se ne deve andare, assieme ovviamente a isStone, isGem, ecc.
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
Quote:
Comunque non sono convintissimo che si riescano a togliere tutti i vari isType senza complicare codice e test(a volte si può aver bisogno di comportamenti diversi per vari componenti, ma non è possibile/è complicato integrarli nel componente stesso) Si potrebbe comunque provare come branch è vedere se ne vale la pena o no. |
|
|
|
|
|
|
#13 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
|
||
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Se vedo una GetType nella code base, prendo l'aereo da Varna, mi paracaduto in Italia, vi spezzo a tutti quanti le ginocchia e poi riparto per l'Inghilterra.
Certo che dopo la FP vi siete dati alla pazza gioia... le pagherete tutte :|
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
A me piace lavorare per interfacce, ma non e' un dogma. Se il codice che esce dal refactoring e' piu' semplice e pulito, non c'e' alcun problema a fare il merge.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Ho scritto centinaia di migliaia di righe di codice di produzione senza usare nulla di simile al GetType, quindi non vedo il problema.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
quindi, si può rimuovere le varie getType(), isChest() e affini - a patto però di ripensare anche il resto del codice che circonda la Grid; oppure, si può come dici tu usare instanceof, ma l' "obbrobrio" finirebbe anche nel codice di produzione e non solo nei test; oppure, si può: lasciare un set di "capability query", relativo a ciò che le droppable specializzate possono eventualmente fare, come metodi virtuali nella classe base astratta, lasciare il resto del codice dei test più o meno com'è ora ( a riprogettarlo c'è sempre tempo) applicando un refactoring meno gravoso EDIT: non avevo letto i post di fek
__________________
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 : 28-01-2008 alle 20:41. |
|
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
fek, tanto che ci sei devo chiederti due cose fondamentali:
1) che dobbiamo fare quando vediamo in una classe metodi pubblici utilizzati solamente dai test, cerchiamo di eliminarli e di testare in altri modi? 2) possiamo usare instanceof solo nei test, e non nel codice di produzione? |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Se fossi anti-interfacce non avrei masochisticamente
Io vedo ogni costrutto sintattico come uno strumento, coi suoi pregi e difetti, e cerco di usare quello che mi sembra "migliore" per il particolare problema che mi si presenta.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:01.











vi faccio un esempio: la getType viene utilizzata da un metodo toString per ottenere un oggetto "tipo" che deve a sua volta restituire il nome del tipo (tramite un metodo getName tra l'altro; toString ci faceva proprio schifo eh?) utilizzato poi per costruire la stringa. ora, come mai tutta questa perifrasi della getType? perché passare per il "tipo" per ottenere il nome, non si può semplicemente mettere già nel droppable un metodo toString?

).








