|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#21 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
![]() In ogni caso pernso che l'eliminazione di isChest e altri non è con un canCrush ( che alla fine siamo lì), ma con il polimorfismo. Ovvero tutti quanti hanno il metodo crush() che fa qualcosa e in base a che istanza sono mi comporto di conseguenza... Il getType si elimina veramente solo con il polimorfismo! |
|
|
|
|
|
|
#22 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
E' esattamente ciò che auspico.
__________________
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 |
|
|
|
|
|
#23 | |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
ma, come dicevo nel post precedente, non ci sono solo le Droppables con le loro interfaccie, ma anche un sistema di GridAction, che si appoggiano a quelle interfaccie - ma anche, che incapsulano la policy nonchè la conoscenza ( ad es liste di Droppable da testare, o cancellare dalla Grid) con cui gestire le Droppables le quali da oggetti passivi si limitano a essere testate e manipolate se venisse introdotto un design polimorfico questa relazione tra Droppables e Grid Action verrebbe invertita, o sovvertita (le GridAction in effetti avrebbero molto meno senso di esistere) se si introducesse un metodo crush() in ogni Droppable, bisognerebbe trovare un design appropriato per gestire a livello della singola Droppable (tenendo conto della "simmetria" tra Droppable) la policy e la "conoscenza" che prima era "globale" nella GridAction, e probabilmente ricontestualizzare il comportamento della Droppable stessa ( riadattare gli stati della Grid inficianti il behaviour) ... non dico che sia intrinsecamente difficile (anzi magari viene fuori che può essere implementato con pochissimo codice 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 : 29-01-2008 alle 15:04. |
|
|
|
|
|
|
#24 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Quote:
|
|
|
|
|
|
|
#25 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
2) instanceof non mi piace, mi sembra sempre una scorciatoia poco elegante per non pensare al design e buttare giu' qualcosa alla spera in fek (delirio di onnipotenza
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#26 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Non li ho visti, maledetti.
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#27 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#28 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
il problema qui è che questa getType che abbiamo restituisce un oggetto AbstractDroppableType che rispecchia esattamente il tipo (la classe) di gemma, inteso come foglia dell'albero della gerarchia sopra descritta. if e catene di if a non finire insomma, cioè se usassimo instanceof nel codice di produzione sarebbe esattamente la stessa cosa )non c'è da ristrutturare la gerarchia, ci troviamo semplicemente nella situazione in cui: 1) i metodi polimorfici di AbstractDroppableType e derivati possono essere spostati dall'oggetto tipo all'oggetto vero e proprio, cioè la gemma (e questo refactoring è non dico semplice ma non-troppo-complesso) 2) tra questi metodi, tutti quelli che cominciamo con "is" effettuano un test a runtime del tipo di gemma (e qui viene il discorso "instanceof sarebbe la stessa cosa" perché il refactoring del punto 2 è difficile? non perché vada ristrutturata la gerarchia delle gemme radicata in AbstractDroppable (che resta così com'è tale e quale), ma perché va ristrutturato ben altro; indovina cosa? il codice per il logging delle actions ![]() il problema è il seguente: quei metodi isXxx vengono usati ad esempio per testare se una gemma che ha appena finito di cadere è un chest o una flashing gem, insomma se può "crushare", perché in quel caso il crush va effettuato tramite una action, che è l'unico modo per modificare Grid (o almeno in teoria dovrebbe esserlo ai fini della costruzione del log, ma in realtà il log che attualmente esce fuori da una partita è fatto male perché mancano alcuni eventi a causa del fatto che non tutto il codice usa le actions, ancora ci sono dei metodi "diretti" in Grid): una volta istanziata la action questa chiama un metodo isXxx e controlla come si deve comportare a seconda del tipo di gemma. il tutto mi porta (OT) al discorso "codice di logging": quando è stato deciso di introdurre il paradigma delle actions avevamo del codice ancora piuttosto sporco per poterlo fare, e sostituire tutti i metodi diretti non era facile (e quindi lo si è fatto solo in parte). il codice per il logging insomma è un lavoro mai terminato che per ora (IMHO) ci crea solo problemi. possiamo eliminarlo? (cosa che avevamo già fatto nella versione di SourceForge )l'idea comunque non era male, solo che la reintrodurrei (se proprio necessaria) casomai molto più avanti, a codice completamente ripulito. edit - sia chiaro, un conto è il logging delle actions e un conto sono le actions di per se'; a creare problemi sono le actions (sono le maggiori utenti dei metodi isXxx di cui sopra), ma ovviamente senza le actions scompare anche il logging. Ultima modifica di 71104 : 30-01-2008 alle 01:05. |
|
|
|
|
|
|
#29 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#30 |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Beh, visto che hai tirato in ballo la toString() facciamo in modo che la toString() di ogni droppable ritorni il nome dell'istanza dell'oggetto, così siamo apposto
Ciao
__________________
GPU Compiler Engineer |
|
|
|
|
|
#31 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
infatti ci avevo pensato, però io a toString preferisco addirittura instanceof: mi sembra completamente univoco, "hardcoded", senza possibilità di errore.
|
|
|
|
|
|
#32 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
ottimo, allora farò così |
|
|
|
|
|
|
#33 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Sicuramente il meccanismo ad actions e gli states ( ovvero tutta la logica di gioco
) sono la parte piu' "critica" dell'applicazione.Non per nulla le action hanno la complessita' piu' alta di tuttoil resto,come testimonia cobertura. Per i test, siccome te le crei tu a manina le istanze o di gem o di chest, basta stare attenti mentre si fa il test a non perdersi le refrenze e tutto dovrebbe andre a posto da solo Ultima cosa: asfaltiamo il logging e rifacciamolo. Sicuramente se avremo le action fatte bene, basta che le facciamo implementare il pattern command e dovremmo avre logging e replay della partita praticamente gratis. |
|
|
|
|
|
#34 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Quote:
|
|
|
|
|
|
|
#35 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
Quote:
|
|
|
|
|
|
|
#36 | ||||
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Quote:
Mi apri un topic e mi scrivi una serie di task dettagliati che descrivono i passi di questi due refactoring? Ogni passo dev'essere sufficientemente breve e conciso e relativamente semplice da implementare e testare. Diciamo che ti sto chiedendo un "task break down" del lavoro. Quote:
Quote:
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
||||
|
|
|
|
|
#37 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Un problema per volta: una volta che siamo alle prese con questo codice vediamo se c'e' un modo semplice per testare queste classi senza usare instanceof.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
|
#38 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Quote:
|
||
|
|
|
|
|
#39 | ||||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() il codice su cui stiamo lavorando è antecedente, no? :| Quote:
Quote:
Quote:
(ho già tolto i due isNull) |
||||
|
|
|
|
|
#40 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:37.













)
)








