Per ciascuna dichiarazione di associazione nel modello di associazione, il framework di creazione trasformazioni genera un file di origine Java con nome nTransform.java, dove n rappresenta il nome della dichiarazione di associazione. Tutti insieme, questi file Java costituiscono il codice della trasformazione. Oltre alla generazione del codice di implementazione per la trasformazione, il framework di creazione della trasformazione genera anche il codice per registrare la trasformazione con il servizio di trasformazione. Dopo aver creato una dichiarazione di associazione, è possibile aggiungere regole di associazione in modo incrementale e generare il codice di origine, o le implementazioni, per le regole di associazione. Non è necessario dover definire tutte le regole di associazione prima della generazione del codice sorgente.
Generalmente la convenzione di denominazione delle dichiarazioni di associazione è x2y, dove x rappresenta il tipo di oggetto di input e y rappresenta il tipo di oggetto di output. Ad esempio, la dichiarazione di associazione Package2EPackage specifica una dichiarazione di associazione che ha Package come oggetto di input e EPackage come oggetto di output.
Un'associazione tra elementi stabilisce la corrispondenza tra i rispettivi attributi, che permette lo scambio dei dati tra loro. Quasi tutte le associazioni consentono di manipolare ulteriormente i dati tra l'origine e la destinazione. Ad esempio, è possibile scegliere di specificare calcoli o apportare altre modifiche ai dati creando codice personalizzato, che consente di assegnare valori alla destinazione.
Per creare una dichiarazione di associazione classe-a-classe nel modello di associazione:
Per aggiungere un oggetto di input e un oggetto di output alla dichiarazione di associazione classe-a-classe:


Dopo aver aggiunto gli oggetti di input e di output alla dichiarazione di associazione, sarà possibile definire le regole di associazione tra gli attributi. Le regole di associazione, chiamate anche associazioni, specificano come assegnare un valore ad un attributo di un oggetto di output, in base ai valori degli attributo di un oggetto di input.
La regola di associazione deve essere creata tra l'attributo name degli oggetti di input e di output. La classe di destinazione ha lo stesso nome della classe nel modello di input; questa procedura è simile alla creazione di una copia della classe. In una lezione successiva, verranno aggiunte le operazioni di associazione alla regola di associazione.
Creare una regola di associazione secondaria tra l'attributo ownedOperation degli oggetti di input e di output. Per ciascuna operazione nella raccolta ownedOperation, l'operazione generata nel modello di destinazione avrà lo stesso nome e visibilità dell'operazione nel modello di input.
Un'associazione secondaria è una chiamata a una associazione dall'interno di un'altra associazione. L'associazione secondaria da richiamare può, ma non è obbligatorio, essere definita nello stesso file di associazione dell'associazione che la richiama. Un'associazione secondaria consente di associare un tipo complesso nel modello di input a un tipo complesso nel modello di output. L'associazione secondaria creata può richiamare un'associazione che esiste in qualsiasi file di associazione. La definizione delle associazioni secondarie nei file di associazione separati favorisce il riutilizzo delle associazioni; tuttavia la creazione di più file di associazione potrebbe aumentare le operazioni di gestione del progetto. Le associazioni secondarie possono includere anche altre associazioni secondarie, che risultano in una struttura gerarchica.
È anche possibile creare regole di associazione secondaria tra gli oggetti di input e gli oggetti di output in una dichiarazione di associazione.
Per ciascuna associazione secondaria in una dichiarazione di associazione, viene generato un estrattore chiamato getfunzioneInputTofunzioneOutput_UsingAssociazione_Extractor nel trasformatore di contenuto, dove funzioneInput rappresenta il nome dell'attributo di input, funzioneOutput rappresenta il nome dell'attributo di output e Associazione rappresenta il nome della dichiarazione di associazione.
È possibile specificare perfezionamenti semantici utilizzando l'API OCL (Object Constraint Language) fornita da Eclipse.
Una regola di associazione ereditata e la regola o l'estrattore generati da tale associazione, conservano la stessa posizione relativa nell'ordine di elaborazione della regola di associazione sovrascritta e i rispettivi estrattore o regola generati.
Per ciascuna regola associazione di spostamento o personalizzata, viene aggiunta una regola al codice sorgente della trasformazione generata. Per ciascuna regola di associazione secondaria, nel codice sorgente della trasformazione viene generato un estrattore di contenuto. Quando si crea una regola di associazione, il tipo viene determinato dagli attributi di input e di output selezionati. Ad esempio, se gli attributi di input e di output sono tipi primitivi compatibili, ad esempio string o integer, viene specificata una regola di associazione di spostamento. Se gli attributi di input e di output sono tipi complessi, viene specificata una regola di associazione secondaria. Se né il tipo regola di associazione spostamento né associazione secondaria sono appropriati, viene specificata una regola di associazione personalizzata.
Per definire le regole di associazione nella dichiarazione di associazione Class2Class:
A questo punto della lezione, nell'area editor, all'associazione secondaria è associato un simbolo che raffigura una X in un cerchio rosso, che indica un errore. Posizionare il puntatore del mouse su questo simbolo per visualizzare il messaggio di errore. Il messaggio di errore riporta che è necessario selezionare una dichiarazione di associazione che la regola di associazione secondaria dovrà richiamare. Per risolvere questo errore, creare una dichiarazione di associazione operazione-a-operazione.
Per creare dichiarazione di associazione operazione-a-operazione: