# Interaction Flow Modeling Language

Interaction Flow Modeling Language (IFML) è un linguaggio di modellazione standardizzato nel campo dell'ingegneria del software e più precisamente nell’ambito dell’ingegneria guidata dal modello. IFML include un set di notazioni grafiche per creare modelli visuali che rappresentano le interazioni dell'utente con i front-end dei sistemi software.
Interaction Flow Modeling Language è stato sviluppato tra 2012 e il 2013 sotto la guida di WebRatio ed è stato ispirato dalla notazione WebML, nonché da alcune altre esperienze nel campo della modellazione di progetti Web.
È stato adottato come standard da Object Management Group (OMG) nel marzo 2013.

## Caratteristiche generali

IFML supporta la descrizione, indipendente dalla piattaforma di sviluppo, di interfacce utente grafiche per applicazioni utilizzabili su sistemi come computer desktop, computer portatili, PDA, telefoni cellulari e tablet. Il focus della descrizione è sulla struttura e sul comportamento dell'applicazione come percepito dall'utente finale.
IFML descrive le interazioni dell'utente e i comportamenti del front-end delle applicazioni appartenenti ai seguenti domini:
* Applicazioni Web basate su HTML + HTTP.
* Rich Internet Applications, come supportato dallo standard HTML5
* Applicazioni mobili
* Applicazioni client-server
* Applicazioni desktop
* Interfaccia uomo-macchina incorporata per applicazioni di controllo
* Applicazioni multicanale e context-aware
IFML non soddisfa le specifiche della grafica bidimensionale e tridimensionale basata su computer.
IFML non si applica alla modellazione dei problemi di presentazione (layout/look and feel) di un'applicazione front-end o alla progettazione di business logic e componenti di dati. Sebbene questi aspetti non siano al centro del linguaggio, IFML consente ai progettisti di fare riferimento a modelli esterni o artefatti di modellazione relativi a questi aspetti all'interno dei modelli IFML.

## Contenuto dello standard

La specifica IFML consiste in:
* Il metamodello IFML (MOF).
* Il profilo UML IFML.
* La sintassi visiva IFML (definita attraverso la “Diagram Definition” e la “Diagram Interchange specification”).
* Il formato di scambio del modello IFM XMI.

## Aspetti della modellazione

Un modello IFML è costituito da uno o più view containers (eventualmente annidati). Ad esempio, finestre in applicazioni desktop tradizionali o template di pagina in applicazioni Web. Un view container può contenere view components, che denotano la pubblicazione di contenuto statico o dinamico o elementi di interfaccia per l'immissione di dati (come i moduli di input). Un view component può avere input e output parameters.
Un view container e un view component possono essere associati ad events, che possono rappresentare le interazioni degli utenti o le occorrenze generate dal sistema. Ad esempio, un evento per selezionare uno o più elementi da un elenco o per inviare input da un modulo. L'effetto di un evento è rappresentato da una connessione di interaction flow. L’Interaction flow esprime un cambiamento di stato dell'interfaccia utente. Un evento può anche innescare una action, che viene eseguita prima di aggiornare lo stato dell'interfaccia utente; ad esempio, un'operazione di eliminazione o aggiornamento di istanze in una base di dati. Una dipendenza input-output tra elementi può essere specificata tramite parametri associati a flussi di navigazione o attraverso data flows, che descrivono solo il trasferimento di dati.
IFML include anche concetti per la definizione di vincoli, modularizzazione e context awareness (ad esempio, in base al profilo utente, dispositivo, posizione) sugli elementi di modellazione. I concetti IFML possono essere estesi con meccanismi di estensione standard basati su stereotipi.

## Vantaggi principali

Il costo dello sviluppo di applicazioni front-end è aumentato con l'emergere di una gamma senza precedenti di dispositivi, piattaforme tecnologiche e canali di comunicazione, che non sono accompagnati dall'avvento di un approccio adeguato per la creazione di un modello PIM (Platform Independent Model) che possa essere utilizzato per progettare le interazioni dell'utente indipendentemente dalla piattaforma di implementazione. Ciò fa sì che lo sviluppo del front-end sia un processo costoso e inefficiente, in cui la codifica manuale è l'approccio di sviluppo predominante, il riutilizzo degli artefatti di progettazione è basso e la portabilità delle applicazioni su piattaforme rimane difficile.
IFML porta diversi vantaggi allo sviluppo dei front-end delle applicazioni:
* Supporta le specifiche formali del front-end da diverse prospettive: composizione dell'interfaccia, interazione dell'utente, gestione degli eventi.
* Supporta la connessione con la business logic, il modello di dati e il livello di presentazione grafica.
* Isola le specifiche del front-end da problemi specifici dell'implementazione.
* Migliora il processo di sviluppo, favorendo la separazione delle specifiche tra i ruoli nell’interaction design.
* Consente la comunicazione della progettazione dell'interfaccia utente a soggetti non tecnici.

## Software per IFML

IFML è attualmente utilizzato da WebRatio [1]. Qui è disponibile una serie di post sul blog che descrivono il processo di standardizzazione.

## Storia

IFML è stato ispirato dalla notazione WebML, inventata al Politecnico di Milano da Stefano Ceri e Piero Fraternali, con un team di persone tra cui Roberto Acerbis, Aldo Bongio, Marco Brambilla, Sara Comai, Stefano Butti e Maristella Matera.