Interpretação de Elementos de Modelo UML por Transformações de UML em CORBA

A Linguagem de Definição de Interface (IDL) da Common Object Request Broker Architecture (CORBA) que a transformação gera depende dos elementos de modelo UML e suas características.

Modelo

Um modelo não é mapeado diretamente para um elemento CORBA. A transformação não gera elementos CORBA se não houver nenhum componente no modelo de origem.

Componente

A transformação gera um único arquivo CORBA IDL a partir de um componente. O arquivo IDL contém elementos CORBA que o componente possui.

Tipos Primitivos

A transformação gera um tipo CORBA básico ou um tipo CORBA nativo de um tipo primitivo. A biblioteca de modelos Tipos CORBA contém tipos primitivos UML que correspondem a tipos CORBA básicos. Como alternativa, é possível criar um tipo primitivo no modelo de origem que tem o mesmo nome que um tipo CORBA básico. A lista a seguir mostra os tipos que a biblioteca de tipos CORBA básicos contém:

Um tipo primitivo no modelo de origem que não está listado acima representa um tipo CORBA nativo. Para tipos CORBA nativos, a transformação gera a definição nativa no arquivo IDL.

Pacotes

A transformação gera módulos CORBA de pacotes de um componente. A transformação ignora pacotes que não estão em um componente.

Interfaces

A transformação gera uma interface CORBA a partir de uma interface no modelo de origem. Uma generalização de uma interface corresponde à herança de uma interface CORBA. A tabela a seguir lista a propriedade UML do elemento de modelo de origem e o elementos CORBA correspondente que a transformação gera.
Propriedade UML Saída da Transformação
Nome Nova interface CORBA em IDL com o nome especificado, com caracteres ilegais removidos
Visibilidade, pública Interface normal
Visibilidade, privada Interface local
Abstrato Interface CORBA abstrata
Folha Ignorado

Atributos e Associações

A transformação gera atributos CORBA de atributos e associações. A tabela a seguir lista as propriedades UML do elemento de modelo de origem e o elemento CORBA correspondente que a transformação gera.
Propriedade UML Saída da Transformação
Nome Atributo CORBA com o mesmo nome
Tipo (propriedade de associação) Atributo CORBA com o tipo como o fornecedor dessa associação
Tipo (propriedade do atributo) Atributo CORBA com o tipo básico especificado
Valor "É Estático" e "padrão" Constante CORBA
De leitura Atributo CORBA de leitura
Ordenando Ordem de IDL
O estereótipo «switch» aplicado aos atributos em classes que possuem o estereótipo «CORBAUnion» aplicado Instrução switch em uma união IDL

Cada caso na instrução de comutação corresponde a um atributo UML que possui o estereótipo «switch» aplicado

Operações

A transformação gera uma operação IDL a partir de uma operação que é declarada em uma interface ou em uma classe que tem o estereótipo «CORBAValue» aplicado a ela. A tabela a seguir lista a propriedade UML do elemento de modelo de origem e o elementos CORBA correspondente que a transformação gera.
Propriedade UML Saída da Transformação
Nome Nova operação CORBA com o nome especificado
Tipo de retorno Tipo de retorno da operação CORBA
Rodas as outras propriedades Ignorado
Operação com o estereótipo «CORBAOneway» Operação IDL de via única
Esteriótipo «create» em operação na classe «CORBAValue» Mapeia para uma operação do inicializador de valor CORBA
Propriedade context no estereótipo «CORBAOperation», que é aplicado a uma operação Um conjunto de valores de cadeia que mapeia para os identificadores que são uma parte da chamada de operação.

A transformação gera o seguinte fragmento de código de um modelo UML que contém
uma interface denominada Interface1 que contém uma operação denominada Operation1, cuja propriedade de
contexto contém os valores "sys_time" e "sys_location":

module Module1 {
	interface Interface1 {
		long Operation1() context ("sys_time", "sys_location");
	};
};

Parâmetros

A partir de um parâmetro UML, a transformação gera uma operação IDL. A tabela a seguir lista a propriedade UML do elemento de modelo de origem e o elementos CORBA correspondente que a transformação gera.
Propriedade UML Saída da Transformação
Nome Novo parâmetro com o nome especificado
Direção (in, out, inout) Parâmetro correspondente em IDL
Tipo Parâmetro com tipo especificado
Visibilidade Ignorado

Enumerações

A transformação gera uma enumeração CORBA a partir de uma enumeração UML. Uma enumeração pode conter somente literais de enumeração.

Classe com o Estereótipo «CORBAUnion»

A transformação gera uma união CORBA, que é um valor construído a partir de uma classe que tem o estereótipo «CORBAUnion» aplicado.

Considere o exemplo a seguir, que supõe um modelo UML que contém os seguintes itens:
  • Um componente denominado ComponentIDL1
  • O componente ComponentIDL1 contém um pacote UML denominado Module1
  • O módulo Module1 contém uma classe denominada Union1
  • A classe Union1 tem o estereótipo «CORBAUnion» aplicado, com a propriedade switchType definida para long
  • A classe contém três atributos de tipos long, string e char, respectivamente; cada atributo tem o estereótipo «switch» aplicado
  • O primeiro e o segundo atributos possuem sua propriedade case definida para 1 e 2 respectivamente; o terceiro atributo possui a propriedade isDefault definida para true
A transformação gera a seguinte união no arquivo ComponentIDL1.idl, no módulo Module1, como mostrado no seguinte fragmento de código:
module Module1
{
    		union Union1 switch(long) {
			case 1: long u1;
			case 2: string u2;
			default: char u3;
    		};
    
};

Classe com o Esteriótipo «CORBAValue»

A transformação gera um tipo de valor CORBA a partir de uma classe que tem o estereótipo «CORBAValue» aplicado a ela. O estereótipo «CORBAValue» tem uma propriedade chamada especificação. A propriedade de especificação é uma enumeração com o valor: none, custom ou boxed. O valor padrão é none.

Um tipo de valor CORBA é uma entidade que tem um estado opcional e um método inicializador que são separados das propriedades de uma interface. Os atributos do estereótipo «CORBAState» representam os membros de estado de um tipo de valor CORBA. O estereótipo «create» representa os métodos do inicializador de um tipo de valor CORBA.

A tabela a seguir lista a propriedade UML do elemento de modelo de origem e o elementos CORBA correspondente que a transformação gera.

Propriedade UML Saída da Transformação
Estereótipo «CORBAValue»
Nome Novo tipo de valor com o nome especificado
Visibilidade Ignorado
Abstrato Tipo de valor abstrato
Atributos com «CORBAState» com visibilidade pública ou privada Membro de estado CORBA do tipo de valor CORBA, com visibilidade pública ou privada
Operação com o estereótipo «create» O método factory CORBA do tipo de valor não-abstrato
Relacionamento de generalização com o estereótipo «CORBAtruncatable» aplicado; o relacionamento deve estar entre duas classes que possuem o estereótipo «CORBAValue» aplicado Indica herança de truncatable entre duas classes

Atributo Estático

Uma declaração de constante CORBA pode aparecer no escopo de um arquivo IDL, um módulo, uma interface ou um tipo de valor. No modelo de origem, um atributo estático em uma interface ou classe pode representar uma constante CORBA existente no escopo de uma interface ou tipo de valor.

Uma constante CORBA no escopo de um módulo CORBA ou um arquivo IDL deve ser um atributo em uma classe que tem o estereótipo «CORBAConstants». A classe deve estar em um pacote para uma constante de escopo de módulo ou em um componente para uma constante do escopo IDL. A transformação ignora o nome da classe. Cada atributo da classe que tem o estereótipo «CORBAConstants» represeta uma declaração de constante.

Classe com o Esteriótipo «CORBAStruct»

A transformação gera uma estrutura CORBA a partir de uma classe que tem o estereótipo «CORBAStruct». A classe deve ter somente atributos e nenhuma operação. Os atributos ou associações da classe representam os membros da estrutura.

Classe com o Estereótipo «CORBAException»

A transformação gera uma exceção CORBA a partir de uma classe que tem o estereótipo «CORBAException». A classe pode conter atributos.

Classe com o Esteriótipo «CORBATypedef»

A transformação utiliza o estereótipo «CORBATypedef» para designar um novo nome para um tipo CORBA existente. Uma classe com o estereótipo «CORBATypedef» corresponde a typedef de CORBA. Um relacionamento de substituição da classe com o tipo CORBA existente representa a typedef de CORBA.

Relacionamento de Generalização com o estereótipo «CORBATruncatable»

A transformação gera código para uma herança de tipo de valor truncatable.

Considere o exemplo a seguir, que supõe um modelo UML que contém os seguintes itens:
  • Um componente denominado ComponentIDL1
  • O componente ComponentIDL1 contém um pacote UML denominado Module1
  • O módulo Module1 contém, duas classes, denominadas Class1 e Class2
  • Um relacionamento de generalização existe de Class1 para Class2, e o estereótipo «CORBATruncatable» é aplicado ao relacionamento
A transformação gera o seguinte código no arquivo ComponentIDL1.idl, no módulo Module1, como mostrado no seguinte fragmento de código:
module Module1 {
    		valuetype Class2 {
			};
			valuetype Class1 : truncatable Class2 {
			};    
};

Feedback