Para iniciar uma operação de geração, você pode clicar com o botão direito do mouse em um diagrama ou em um elemento de modelo e, em seguida, selecionar um dos dois comandos no menu Modelagem UPIA:
O domínio operacional em um modelo de arquitetura contém o conceito de uma conexão entre dois nós operacionais lógicos que representa informações que estão sendo transmitidas ou trocadas para executar seus respectivos recursos. No domínio operacional, essas conexões são denominadas trocas de informações. Cada troca possui um ou mais elementos de informações propagadas. Além disso, a direção de cada troca identifica o produtor e o consumidor das informações transmitidas. No domínio do sistema, o elementos de dados que são transmitidos entre os sistemas são representados no modelo por uma troca de dados. As trocas de informações e as trocas de dados são modeladas pelo elemento de fluxo de informações UML e a propriedade "conveyed" de um fluxo de informações identifica os elementos de informações que estão sendo transmitidos.
Uma única associação de linha de necessidade entre dois nós operacionais pode representar várias trocas de informações entre esses nós. Da mesma forma, uma única associação da interface do sistema entre os dois sistemas iguais pode representar várias trocas de dados entre esses sistemas, e uma associação de fluxos de recursos entre dois executores pode representar várias trocas de recursos entre esses dois executores iguais.
Na modelagem de arquitetura integrada, uma única abstração de troca pode ser executada ou refinada por constructos UML mais específicos, como fluxos de mensagens ou de objetos de atividade de interação. Ambos esses constructos podem definir informações ou dados que são transmitidos de um elemento de domínio para outro.
A ferramenta de geração na UPIA pode varrer um modelo para os constructos UML, como fluxos de mensagens e de objetos, que definem uma troca entre nós operacionais ou entre sistemas e, em seguida, criam informações apropriadas ou elementos de troca de dados. Subseqüentemente, é possível executar uma operação de geração para varrer o modelo para elementos de troca e criar as linhas de necessidade ou elementos da interface do sistema apropriados.
Ao criar um modelo UPIA, você tem duas opções básicas para prosseguir:
Em uma abordagem de modelagem de cima para baixo, você começa definindo constructos abstratos como linhas de necessidades e trocas de informações, para representar as necessidades de comunicação no modelo lógico. À medida que continua o processo de refinamento, você pode criar diagramas de seqüência e diagramas de atividades para fornecer exemplos concretos de trocas abstratas.
Quando as trocas, fluxos de recursos, linhas de necessidades e interfaces do sistema forem criados manualmente, as restrições no perfil UPIA requerem que o usuário defina as mensagens de execução, que envolvem tarefas e fluxos de objetos, que representam informações da operação ou do sistema. A ferramenta de geração para modelos UPIA garante que essas referências cruzadas sejam configuradas se um novo elemento for criado ou se um elemento existente for encontrado. Na abordagem de cima para baixo, a ferramenta de geração localiza as realizações concretas e atualiza as referências cruzadas nos elementos de troca abstrata existentes. A ferramenta de geração também pode notificá-lo se uma nova troca for gerada, o que indica que o modelo de alto nível pode não ter sido concluído antes do processo de refinamento. Da mesma forma, a geração atualiza os fluxos de recursos, as linhas de necessidades e as interfaces do sistema após localizar a trocas, e poderá criar novos elementos, se eles estiverem ausentes.
Em uma abordagem de modelagem de baixo para cima, você cria diagramas e diagramas de seqüência para elaborar os casos de uso que foram identificados para a arquitetura modelada. Em seguida, você abstrai essas necessidades de comunicação específicas em trocas e, em seguida, as abstrai ainda mais em fluxos de recursos, linhas de necessidades e interfaces do sistema. Não é necessário criar manualmente as trocas, os fluxos, as linhas de necessidades ou as interfaces do sistema. Ao selecionar o comando de geração apropriado, esses comandos são criados automaticamente, juntamente com a configuração das referências cruzadas necessárias.
Em uma atividade, uma troca é definida por um fluxo de objetos UML estereotipado como «Fluxo de Informações Operacionais» ou «Fluxo de Informações do Sistema», em que as ações correspondentes são ações da operação de chamada para tarefas operacionais e tarefas do sistema, respectivamente. Os pinos de entrada e de saída nessas ações da operação de chamada correspondem aos tipos de parâmetro da tarefa, que devem ser elementos de informações ou elementos de dados.
Por exemplo, suponha que exista dois nós operacionais, OpNodeA e OpNodeB, e que OpNodeB contenha uma tarefa operacional, chamada de "doThis", com dois parâmetros: o primeiro é um parâmetro de entrada do tipo InfoElementX, e o segundo é um parâmetro de retorno do tipo InfoElementY. Se existir uma interação, que representa um rastreio de evento operacional em que o diagrama de seqüência tem duas linhas de vida para OpNodeA e OpNodeB, respectivamente, então uma mensagem, que representa uma chamada de tarefa síncrona, de OpNodeA para OpNodeB está na verdade definindo duas trocas de informações. Na primeira, InfoElementX está sendo transmitido de A para B e, na segunda, InfoElementY está sendo retornado de B para A. Portanto, essa mensagem de interação única pode ser utilizada para gerar duas trocas de informações.

Semelhantemente, se o OpNodeA tinha uma tarefa operacional chamada "doThat" com um parâmetro de saída do tipo InfoElementX, então um diagrama de atividades operacional também pode definir uma troca de informações. Nesse caso, o diagrama de atividades conteria duas ações da operação de chamada: OpNodeA::doThat e OpNodeB::doThis. Um fluxo de objetos UML, que representa um conector do fluxo de informações operacionais, do pino de saída InfoElementX na ação OpNodeA para o pino de entrada correspondente na ação OpNodeB, também define uma troca de informações entre OpNodeA e OpNodeB.

A ferramenta de geração procura mensagens, que representam chamadas de tarefa, e fluxos de objetos de atividade, que representam fluxos de informações operacionais, e gera as trocas de informações correspondentes.
Quando uma troca de informações, de dados ou de recurso é gerada, várias propriedades do elemento UML estereotipado são configuradas para identificar o que está sendo trocado e as realizações da troca. A troca de informações e a troca de dados são especializações da troca de recurso que define várias propriedades em comum para todos os tipos de trocas. De maneira semelhante, a linha de necessidade e a interface do sistema são especializações do fluxo de recursos.
A tabela a seguir exibe as propriedades de troca no elemento de fluxo de informações UML e as propriedades de estereótipo «Troca de Recurso» que são modificadas quando a geração de troca é executada.
| Propriedade | Descrição |
|---|---|
| Origem | Contém o elemento que corresponde ao produtor dos dados trocados |
| Destino | Contém o elemento que corresponde ao consumidor dos dados trocados |
| Propagado | Contém uma lista dos elementos de informações ou elementos de dados que foram transmitidos do elemento de destino da troca para o elemento de origem |
| RealizingMessage | Configurado para todas as mensagens de chamada da tarefa que correspondem a esta troca |
| RealizingActivityEdge | Configurado para todos os fluxos operacionais ou de informações do sistema (fluxos de objetos UML) que correspondem a esta troca |
| Realização | Configurado para associação de fluxo de recursos, linha de necessidade ou interface do sistema que representa essa troca e trocas semelhantes entre os dois elementos iguais |
| ConsumingTask (Troca de Recurso) | Quando uma troca é criada de uma mensagem de interação ou de um fluxo do objeto de atividade, a operação de destino é a tarefa de consumo para a troca |
| ProducingTask (Troca de Recurso) | Quando uma troca é criada de uma mensagem de interação ou de um fluxo do objeto de atividade, a operação de origem é a tarefa de produção para a troca. Para mensagens de interação, a operação de origem é determinada a partir do bloco de execução na linha de vida da origem que iniciou a mensagem. Em alguns casos, essa tarefa de produção não pode ser determinada |
Quando a geração do fluxo de recursos (associação) é executada, a propriedade Exchanges de cada fluxo de recurso é configurada como o recurso, informações ou trocas de dados correspondentes que fazem com que o fluxo de recursos, a linha de necessidade ou a interface do sistema correspondentes sejam criados. Se a associação de fluxos já existir, a propriedade Exchanges será atualizada de forma correspondente.
Considere um modelo UPIA que contém dois nós operacionais (OpNodeA e OpNodeB), e que OpNodeB contenha uma tarefa operacional, chamada de "doThis", com dois parâmetros: o primeiro é um parâmetro de entrada do tipo InfoElementX, e o segundo é um parâmetro de retorno do tipo InfoElementY. Se existir uma interação, representando um rastreio de evento operacional, em que o diagrama de seqüência tenha duas linhas de vida OpNodeA e OpNodeB, respectivamente, então uma mensagem, representando uma chamada de tarefa síncrona, de OpNodeA para OpNodeB está na verdade definindo duas trocas de informações: na primeira, InfoElementX está sendo transmitido de A para B e, na segunda, InfoElementY está sendo retornado de B para A.
Se as trocas de informações fossem geradas para este modelo, o diagrama de seqüência seria varrido, resultando na seguinte saída de resumo:
Quando ocorre a geração de trocas, a mesma troca é utilizada se os elementos de origem e de destino forem iguais e se a lista de elementos propagados for idêntica. No exemplo acima, suponha que OpNodeB tenha duas tarefas operacionais em que uma operação tem um parâmetro de entrada do tipo InfoElementX e a outra tenha dois parâmetros de entrada: um do tipo InfoElementX e o outro do tipo InfoElementY. Se duas tarefas forem chamadas de OpNodeA para OpNodeB, em que uma chamada é feita para cada tarefa operacional em B, então duas trocas separadas são criadas de A para B: uma que transmite InfoElementX e a outra que transmite InfoElementX e InfoElementY. Essas trocas são diferentes porque, em um caso, apenas uma única informação é necessária; mas, no outro, duas informações são necessárias.
Além da geração de trocas de informações neste exemplo, a ferramenta de geração também pode gerar linhas de necessidade com base nas trocas de informações existentes. Se ocorreu essa geração, todas as trocas entre os dois nós operacionais iguais serão representadas por uma única associação de linha de necessidade. Se as trocas estiverem todas na mesma direção, então a linha de necessidade será uma associação direcionada. Se as trocas ocorrerem em ambas as direções, a linha de necessidade gerada será uma associação bidirecional. Além disso, se um conector com o estereótipo «Linha de Necessidade» existir entre as partes do nó operacional, uma associação de linha de necessidade bidirecional será criada entre os nós operacionais correspondentes.
Os fluxos de recursos e as interfaces do sistema são sempre criados como associações bidirecionais.