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:
- any
- boolean
- char
- double
- fixo
- float
- long
- long double
- long long
- Object
- octet
- short
- string
- TypeCode
- unsigned long
- unsigned long long
- unsigned short
- ValueBase
- void
- wchar
- wstring
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 {
};
};