Archive for the ‘Java’ Category

And here goes another UI article from Code Zero: CPS, continuation passing style, which is powerful Pattern Design, that I would like to integrate in WPF while designing with M-V-VM pattern… let’s see something…in italian ;)

Parlando di UI Responsiveness, cioè la capacità dell’interfaccia utente di rimanere sempre attiva, ci inoltriamo ora in un campo ancora in piena esplorazione: i Design Patterns. I design patterns sono delle tecniche che ci consentono di modellare un software in maniera organica. Tra i più famosi nel .NET framework è il M-V-VM (Model-View – ViewModel), ma sta prendendo piede anche il CPS (continuation passing style), che interpreta una azione (ad esempio un Click) come continuazione di un altra azione.
E’ un concetto abbastanza complesso da capire, ma vedremo ora un esempio un po’ più chiarificatore, dal quale si potrà facilmente dedurre il perchè venga usato spesso per la UI responsiveness.
Supponiamo di avere un form vuoto sul quale attacchiamo un pannello che chiameremo ButtonPanel.

Ora se volessimo stampare sulla Console il testo della TextBox al click del bottone avremo un codice del genere:

private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine(textBox1.Text);
}

Ma significa che tutto è demandato al ButtonPanel, e se volessimo avere qualcosa di più riusabile sarebbe difficile. Quello che si vuole fare invece è demandare a Form1 il controllo della stampa a console e lasciare a a Button Panel solo la gestione del click. Cioè intendiamo la stampa a Console come la continuazione di un evento scatenato dal click, gestita però in maniera completamente autonoma da Form1, quindi questa azione potrà esistere solo se Form1 lo desidera, non legata indissolubilmente a ButtonPanel.
Quindi avremo che ButtonPanel eseguirà solo l’azione e diventerà così:

public partial class ButtonPanel : UserControl
{
Action<object> _onTextAction;

public ButtonPanel(Action<object> textAction)
{
InitializeComponent();

_onTextAction = textAction;
}

private void button1_Click(object sender, EventArgs e)
{
_onTextAction(textBox1.Text);
}
}

Mentre Form1, cioè il chiamante sarà così:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

ButtonPanel panel = new ButtonPanel(s => OnButtonClick(s));

this.Controls.Add(panel);
}

private void OnButtonClick(object text)
{
Console.WriteLine(text);
}
}

Si noti anche l’uso delle Lambda Expression nel parametro di ButtonPanel, che, in questo caso, ci consentono una flessibilità ancora maggiore sulla chiamata.
Ecco che in pochissime righe di codice otteniamo un esempio di classe altamente riusabile, fatta in CPS, che destina il compito di gestire la stampa a Form1, e il compito di chiamarla a ButtonPanel. In questo caso ButtonPanel è perfetta, sarà difficile che si rompa in sè e per sè, piuttosto sarà sbagliato il passaggio di parametri, ma ciò non compete ButtonPanel.

This is a work in Java done for an exam.

I’ve used the wonderful GTGE graphic engine.

defaultlogogtge

Hopefully this game would be a good point to start gaming in Java ;)
Enjoy it!

Here goes the full source code:
Barone Sardo source