<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>

<channel rdf:about="http://www.siforge.org/articles/forum/../../articles/2005/04/23-strangepatterns2.html">
<title>[SIForge.org] Strange Patterns 2 </title>
<link>http://www.siforge.org/articles/forum/../../articles/2005/04/23-strangepatterns2.html</link>
<description>Commenti all'articolo "Strange Patterns 2 "</description>
<dc:language>it</dc:language>
<dc:publisher>redazione@siforge.org</dc:publisher>
<dc:creator>redazione@siforge.org</dc:creator>
<syn:updatePeriod>hourly</syn:updatePeriod>
<syn:updateFrequency>1</syn:updateFrequency>
<syn:updateBase>1901-01-01</syn:updateBase>
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#22838402" />
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#84087612" />
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#10768676" />
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#28282578" />
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#06153363" />
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#23003143" />
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#87711254" />
  <rdf:li rdf:resource="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#48423085" />
 </rdf:Seq>
</items>
<image rdf:resource="http://www.siforge.org/images/skin/default/sidebar/icon32.gif" />
<textinput rdf:resource="http://www.siforge.org/articles/search/" />
</channel>

<image rdf:about="http://www.siforge.org/images/skin/default/sidebar/icon32.gif">
<title>SIForge.org</title>
<url>http://www.siforge.org/images/skin/default/sidebar/icon32.gif</url>
<link>http://www.siforge.org/</link>
</image>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#22838402">
<title>Marco Lamberto (26 apr 2005, 20:32:43)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#22838402</link>
<description>Conoscendo Perl, la reference di SLEEP mi sembra strizzare l&#39;occhio in molte cose piu` a PHP che a Perl (array in primis), non che sia un male pero` ...
Inolte checkError non mi garba molto, gia` in C non amo giocare con l&#39;errno, in Perl puoi giocare con delle clausole booleane a fine comando che rendono la cosa un po&#39; piu` gradevole (per i Perl-ofili). ;P

Per la relfection di Java condivido anche io un po&#39; della scetticita` di Stefano, purtroppo per cose particolarmente arzigogolate si rischia di infilarsi in vespai.

Ciao,
Marco</description>
</item>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#84087612">
<title>Stefano Fago (26 apr 2005, 13:57:14)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#84087612</link>
<description>1) ...noi di SIFORGE sappiamo attendere ;-)

2) il testo che proponi &#232; molto bello ma...Attenzione! Il bravo programmatore che gioca con la reflection(Eh s&#236;! Il libro &#232; strutturato come le avventure di un developer) poi si v&#224; a scontrare con il ClassLoader e a quel punto, nella realt&#224;, sono cavoli!...Memory Leak, thread impazziti, classi ripetute...wwwowww! :-(

2) Big Design Up Front: questo tema &#232; veramente una patata bollente...Sapessi come si sono litigati l&#39;approccio pi&#249; figo gli agile e gli XP-er! E&#39; comunque interessante un testo come questo(giusto per riordinarsi le idee o avere un punto di vista differente):
--------------------------------------------------------
Extreme Programming Refactored  

 By Matt Stephens and Doug Rosenberg
Publisher: Apress L.P.

 Cuts through the hype and tells &quot;the other side of the story&quot; about Extreme Programming 
 Provides a thorough and systematic analysis of XP practices and separates the &quot;agile&quot; from the &quot;fragile&quot; 
 Proposes better ways of achieving XP&#39;s agile goals, applicable to a much wider range of projects 
-------------------------------------------------------------------
E poi ci sono dei testi sul TDD e refactoring che se si leggono ti fanno crollare ogni convinzione!...
Comincio a credere che ci voglia tanta FEDE e tanta ESPERIENZA e...tornare al COBOL!...
p.s.
Hai visto SLEEP(perl like scripting) &lt;a href='http://sleep.hick.org/'>http://sleep.hick.org/&lt;/a> ????

 
 
</description>
</item>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#10768676">
<title>gabriele renzi (26 apr 2005, 12:43:57)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#10768676</link>
<description>eh, purtroppo nn ho molto tempo per scrivere qualcosa di completo :/

Comunque cerco di spiegarmi meglio:

quello che intendevo &#232; in realt&#224; quello che dicono anche Marco e Stefano (che per&#242; non era evidente dall&#39;articolo, almeno per me che sono tonto), ovvero che spezzare le interfacce &#232; un&#39;ottima cosa *se e solo se* questa frammentazione emerge dallo sviluppo ma non se compare come risultato di un Big Design Up Front. 

In &quot;Object Oriented Software Construction&quot; si parla di Taxomania come di una specie di &quot;disfunzione del design&quot; in cui si cerca di massimizzare il riuso imponendo l&#39;esistenza di una classe (la notazione &#232; diversa, ma il concetto &#232; analogo) per ogni singola differenza.
 
Il fatto per&#242; &#232; che, a fronte di un lavoro di design massiccio,  il guadagno pratico in modularit&#224; &#232; ridotto o assente, poich&#233; alcuni artefatti potrebbero non essere mai necessari. 
Basta pensare ad una gerarchia in cui per l&#39;interfaccia Serializzabile esistano due superinterfacce ScrivibileSerializzata e LeggibileSerializzata.
E&#39; indubbiamente una divisione dei ruoli sensata, ma non accadr&#224; mai (credo) di voler serializzare una struttura senza volerla leggere di nuovo. 


L&#39;argomento relativo all&#39;uso di moduli non sotto il diretto controllo del design (esterni o quant&#39;altro) &#232; analizzato in maniera interessante nel libro &quot;Java Reflection in Action&quot;, e affrontato senza l&#39;uso di adapter ma tramite reflection, vi rimando a quello (magari un&#39;occhiatina tramite Safari.oreilly.com :) 


Infine, Nice &#232; proprio quello (nice.sf.net) ed &#232; imho un progetto molto interessante, anche se non ci ho mai fatto nulla tranne giocarci. E&#39; interessante perch&#233; si tratta sostanzialmente di un linguaggio che &#232; &quot;pi&#249; java di java&quot;. 

Con ci&#242; intendo che gli sviluppatori di Nice hanno fuso dei concetti dei linguaggi funzionali come ML dove (quasi) ogni errore di tipo &#232; bloccato a compile time, in java, ottenendo come risultato molte pi&#249; garanzie sulla robustezza del programma, ed anche una maggiore espressivit&#224;.

Inoltre, grazie al multiple dispatch, &#232; possibile specializzare qualsiasi metodo gi&#224; esistente per una nuova signature (per la differenza tra overloading e MMD rimando a &lt;a href='http://c2.com/cgi/wiki?MultipleDispatch).'>http://c2.com/cgi/wiki?MultipleDispatch).&lt;/a> 
In questo modo non c&#39;&#232; bisogno di inventare un&#39;interfaccia, ne&#39; una gerarchia di adpater, basta aggiungere, solo quando necessario, un nuovo metodo speciallizato.

Ora vado a leggermi il pdf che sembra interessante :)</description>
</item>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#28282578">
<title>Stefano Fago (26 apr 2005, 09:29:33)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#28282578</link>
<description>Suppongo NICE (http://nice.sourceforge.net/), forse l&#39;unico concorrente serio di Groovy!...Lo usi correntemente? Sembra molto carino, ma nel caos dei linguaggi di scripting preferisco riferirmi ai grandi (Python, Ruby, JavaScript and so on) comunque...sempre aperti alle news! 
Relativamente al tuo commento:

1) La reflection &#232;, quando usata con cautela, un&#39;ottima cosa anche se &#232; bene tener presente quello che zio Bob Martin ci ha indicato: KILL RTTI! Anche se pu&#242; sembrare una posizione da dinosauro, l&#39;unico progetto che ho visto funzionare bene con un team di 15 persone junior e 2 senior, &#232; stato quello in cui, per tipizzazione, gli junior erano costretti ha fare la &quot;cosa giusta&quot;!

2) Hai assolutamente ragione sul fatto che un&#39;eccessiva specializzazione/frammentazione delle interfacce pu&#242; essere un caos-engine. Un autore del giro di Fowler ha preso, a riguardo, posizioni un p&#242; XP: &lt;a href='http://www.martinfowler.com/ieeeSoftware/continuousDesign.pdf!'>http://www.martinfowler.com/ieeeSoftware/continuousDesign.pdf!&lt;/a> La verit&#224; &#232; nel mezzo: quanto dico lo puoi vedere, persino, nell&#39;approccio TDD! Utilizzando i mock-object emergono necessit&#224; rispetto al concetto iniziale che ti fanno alterare il design iniziale...Dalla cosa pi&#249; facile, che generalmente &#232; un elemento concreto, ti ritrovi ad un paio di interfacce, un&#39;implementazione ed un Context per i servizi globali o elementi di utilit&#224;! NetBeans(IDE Javoso) &#232; basato sul concetto di COOKIE(weak interface) COMPOSITION per il MIXING di responsabilit&#224;: rivedere la risposta di Giovanni! Va bene! La smetto qui; per&#242; &#232; una discussione interessante: fatti coraggio &#232; parlaci della tua esperienza! GRAZIE</description>
</item>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#06153363">
<title>Marco Lamberto (26 apr 2005, 06:46:43)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#06153363</link>
<description>Dimenticavo, Gabriele, siii, se hai tempo scrivici qualche cosa!! :)
Come ben sai sono un tuo fan sfegatato! ;)
Marco</description>
</item>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#23003143">
<title>Marco Lamberto (26 apr 2005, 06:45:34)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#23003143</link>
<description>MMD = multimethod dispatch.
In ogni caso credo che la frammentazione delle interfacce vada valutata di caso in caso e non debba essere un puntiglio sin dall&#39;inizio, ovvero, se rifattorizzando serve &quot;rompere&quot; che si spezzi pure! Non penso esista La ricetta, ma come al solito al programmatore e soprattutto al suo buon senso, e` lasciato il resto. ;)
Ciao,
Marco</description>
</item>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#87711254">
<title>Giovanni (25 apr 2005, 20:26:18)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#87711254</link>
<description>Avere interfacce atomizzate e&#39; una linea di pensiero che dovrebbe aumentare la intercambiuabilita&#39; degli oggetti. 
Volendo essere molto sintetici, se semplifico, cioe&#39; indebolisco  le interfacce, ho una sorta di &quot;tipizzazione dinamica alla buona&quot; che pero&#39; e&#39; sempre controllabile dal compilatore. 
Progettare cosi&#39; e&#39; durissima secondo me, ma il framework risultante e&#39; sicuramente piu&#39; flessibile.
Che cos&#39;e&#39; Nice? Cosa vuol dire NDD? Ti va di spiegarlo e/o di fare un mini articolo su questo meccanismo?</description>
</item>

<item rdf:about="http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#48423085">
<title>gabriele renzi (23 apr 2005, 12:53:53)</title>
<link>http://www.siforge.org/articles/forum/index.cgi/show/t20050423__strangepatterns2#48423085</link>
<description>bell&#39;articolo, ma ho una controriflessione da fare, relativa all&#39;ultima parte dell&#39;articolo.

Viene suggerito che le interfacce debbano essere piccole, facili da implementare e che ci&#242; riduca l&#39;accoppiamento, ma io non ne sono del tutto convinto. 
Infatti ho l&#39;impressione che tale approccio porti ad una taxomania (per dirla con Meyer) che ben poco aggiunge alla validit&#224; della libreria o applicazione, ma che complica la struttura e divide artificialmente concetti che andrebbero uniti. 
Ad esempio, per un metodo che usa getColoreOcchi() di una classe Persona, ha davvero senso introdurre una interfaccia IOcchiColorati piuttosto che lasciare un parametro Persona? 

Secondo me in un caso in cui sia *necessaria* una microinterfaccia, perch&#233; non si vuole scrivere una intera gerarchia di adapter, o perch&#233; non si possono adattare tutti gli elementi software da usare, 
la scelta migliore e affidarsi alla reflection, invocando dinamicamente i metodi ed ottenendo una sorta di duck typing. Oppure usare Nice che ha il MMD :)

(Noto anche che: sebbene apprezzi i meccanismi di adapting in python come sistema unificato di conversione tra tipi/protocolli, non mi piace l&#39;idea che diventino una sorta di type check, ma sono gusti :) 

</description>
</item>

<textinput rdf:about="http://www.siforge.org/articles/search/">
<title>Ricerca</title>
<description>Cerca negli articoli pubblicati</description>
<name>s_query</name>
<link>http://www.siforge.org/articles/search/</link>
</textinput>

</rdf:RDF>
