versão 1 - julho/2013 tecgraf puc-rio novembro de 2013 idl
TRANSCRIPT
versão 1 - julho/2013
Tecgraf PUC-RioNovembro de 2013
IDL
versão 1 - julho/2013
IDL
• Interface Definition Language• Linguagem neutra• Define a interface dos objetos CORBA
struct Book {string author;string title;
};
typedef sequence<Book> BookSeq;
interface Biblioteca {boolean addBook(in Book pbook);BookSeq getBooks();Book getBook(in string title);
};
versão 1 - julho/2013
Mapeamento de IDL para uma linguagem de programação
• A OMG define especificações para mapeamentos de IDL em diversas linguagens
• Cada especificação define como traduzir a descrição feita em IDL para o código gerado (stubs e skeletons) em uma determinada linguagem de programação
versão 1 - julho/2013
Conteúdo
• Elementos principais da IDL:• Interface• Tipos primitivos• Tipos estruturados (user-defined)• Tipo ANY• Módulos
versão 1 - julho/2013
Interface
• O tipo de um objeto CORBA é definido como uma interface IDL
• Uma interface IDL pode conter atributos e operações
• Atributos são simplesmente “açúcar sintático” para operações de get e set
• Um atributo readonly representa uma operação de estilo get
versão 1 - julho/2013
Interfaceinterface Account { void deposit (in double amount); void withdraw (in double amount) raises (insufficientFunds); double getTotal(); readonly attribute AccountDetails details; };
•A interface Account será implementada por um objeto CORBA que possua as operações deposit e withdraw•O atributo details representa uma operação de consulta ao valor AccountDetails
versão 1 - julho/2013
Herança de Interface
• Uma interface pode estender uma outra interface
interface Account { ...};
interface Savings : Account { //Inherits all Account definitions //then adds Savings definitions ...};
versão 1 - julho/2013
Operações da interface - parâmetros
• Os parâmetros de uma operação possuem uma direção, que pode ser:• in: o parâmetro é passado do cliente para o
servidor• out: o parâmetro é passado de volta para o cliente• inout: o parâmetro é passado em ambas as
direções
void deposit (in double amount);
versão 1 - julho/2013
Operações da interface – retorno
• As operações de uma interface IDL definem um valor de retorno
• Se a operação não possuir valor de retorno, o tipo void deve ser utilizado
void deposit (in double amount);double getTotal();
versão 1 - julho/2013
Operações da interface - exceções
• Uma operação pode lançar (raise) uma exceção se algo não ocorrer conforme esperado
• Existem mais de 30 tipos de exceções pré-definidas e o desenvolvedor pode definir novos tipos de exceções (user-defined)
exception insufficientFunds { }; interface Account { ...
void withdraw(in double amount) raises(insufficientFunds);
};
versão 1 - julho/2013
Operações da Interface – tipos dos parâmetros e do valor de retorno
• Os parâmetros de uma operação e o valor de retorno possuem tipos, que podem ser:• tipos primitivos (ex: boolean, string, long, etc)• tipos user-definedstruct AccountDetails { ...}; interface Account { ... void deposit (in double amount); double getTotal(); readonly attribute AccountDetails details; };
versão 1 - julho/2013
Tipos primitivos
versão 1 - julho/2013
Tipos user-defined
• struct• sequence• array• typedef• enum• union• valuetype
versão 1 - julho/2013
struct
• Permite definir um tipo que agrupa valores de outros tipos, primitivos ou estruturados
struct AccountDetails { string name; StringSeq address; long account_number; double current_balance; };
versão 1 - julho/2013
sequence
• Representa uma sequência de valores de um determinado tipo
• É como um array uni-dimensional que pode ter um tamanho máximo ou não
sequence<string> address;sequence<string, 30> address;
versão 1 - julho/2013
array
• Assim como sequence, representa uma sequência de valores de um determinado tipo
• Diferente de sequence, a dimensão do array é fixada na definição do tipo, portanto, não pode ser alterada em tempo de execução
• Pode ter várias dimensõesEmployeeRecord Employees[100];long shares[1000]; string spreadsheet[100][100];
versão 1 - julho/2013
typedef
• Define um novo nome para um tipo existente
• É bastante comum usar typedef para nomear um tipo definido como sequence ou array
typedef short id;typedef sequence<string> StringSeq;
versão 1 - julho/2013
enum
• Permite definir um tipo para representar uma lista enumerada
enum TrafficLight { red, yellow, green};
versão 1 - julho/2013
union
• É usado para definir um tipo cujo valor pode ser um dentro os tipos especificados
union Foo switch(short) { case 1: boolean boolVal; case 2: long longVal; case 3: string stringVal;};
enum PersonKind {A_GUEST, AN_EMPLOYEE, OTHER};union Person switch (PersonKind) { case A_GUEST :GuestRecord guest_record; case AN_EMPLOYEE: EmployeeRecord employee_record; default: string description;};
versão 1 - julho/2013
valuetype
• Usado para definir um objeto-por-valor que combina um struct (variáveis de estado) com operações
valuetype Date { public short year; public short month; public short date; public void next_day(); public void previous_day();};
versão 1 - julho/2013
valuetype
• Uma das vantagens do valuetype é que ele pode ser retornado como null
• A introdução do conceito de valuetype em CORBA tornou possível a definição de objetos com referências recursivas, o que não era possível usando apenas struct
valuetype Node { public long id; public Node next;};
versão 1 - julho/2013
abstract valuetype
• O valuetype pode ser definido como abstrato e, nesse caso, não pode ter estado, apenas operações
• Objetos do tipo abstract value type não podem ser instanciados
versão 1 - julho/2013
valuetype
• Podem ser estendidos usando herança
valuetype Time : Date { public short minutes; public short seconds; void next_time(); void previous_time();};
versão 1 - julho/2013
abstract interface
• Assim como abstract value type, possui apenas as operações e não possui estado.
• Representa uma entidade que, em tempo de execução, pode ser uma interface regular ou um objeto por valor (valuetype)
• Dependendo do tipo real da entidade em tempo de execução é escolhida a semântica usada na passagem de parâmetro: por referência ou por valor
versão 1 - julho/2013
abstract interface
abstract interface Describable { string get_description();};interface Example { void display (in Describable anObject);};interface Account : Describable {// by reference // Métodos de Account};valuetype Currency supports Describable {// by value // Métodos de Currency};
versão 1 - julho/2013
Tipo Any
• Pode armazenar valores de qualquer tipo de dado representável em IDL
• O tipo de seu conteúdo só pode ser verificado em tempo de execução
struct NameValuePair { string name; any value;};
versão 1 - julho/2013
Módulos
• Permite definir espaços de nomes para as interfaces e tipos definidos no arquivo IDL
• Podem ser aninhados
module tecgraf {
module openbus {
module DRMAA {...}