Beruflich Dokumente
Kultur Dokumente
Orientao:
Prof. Dr. Caetano Traina Jnior
Ao Humberto e
aos meus pais
com muito amor
ii
Agradecimentos
Ao Prof. Dr. Caetano Traina Jr., meu orientador e amigo, pelo precioso trabalho de
orientao, estmulo e confiana.
Ao Prof. Dr. Mauro Biajiz e ao Prof. Dr. Carlos Valncio, pela colaborao no
embasamento terico deste trabalho.
Prof. Dra. Maria Cristina Ferreira e Prof. Dra. Rosely Sanches, que prontamente me
auxiliaram como orientadora e co-orientadora acadmica, respectivamente.
s funcionrias Beth, Laura, Marlia, Adriana e Sandrinha, pelo atendimento atencioso na
secretaria da ps-graduao e na seo de bolsas.
FAPESP, pelo apoio financeiro que viabilizou o desenvolvimento deste trabalho.
Prof. Dra. Agma Traina, por todo o incentivo e o carinho demonstrados.
Aos amigos do Grupo de Bases de Dados e Imagens do ICMC, por toda a ajuda prestada
no decorrer do trabalho.
Ao meu marido Humberto, por estar sempre perto e pronto a me apoiar profissionalmente e
pessoalmente.
Aos meus pais, Celso e Maria Helena, pelo incentivo, apoio e confiana que sempre
dedicaram durante toda minha vida.
Aos amigos, que direta ou indiretamente, contriburam para a realizao deste trabalho.
iii
Resumo
Este trabalho mostra o desenvolvimento de uma Interface de Programao de Aplicativos
(Application Program Interface API) para um gerenciador de dados orientado a objetos.
A API composta por um conjunto de primitivas que integram a definio e a
manipulao de objetos em uma representao compatvel com uma linguagem de
programao orientada a objetos.
A definio da API explora os recursos bsicos de modelos de dados orientados a objetos e
baseia-se nas extenses de um metamodelo baseado em quatro abstraes: classificao,
generalizao, agregao e composio. O suporte abstrao de classificao com
hierarquias em mltiplos nveis tratado com especial destaque, pois resulta em uma das
caractersticas predominantes da API: o tratamento homogneo de tipos e instncias em
tempo de execuo, unificando comandos usualmente separados em DDL (Data Definition
Language) e DML (Data Manipulation Language).
A implementao da API sobre um gerenciador relacional emula um gerenciador de dados
orientado a objetos. Os conceitos envolvidos no trabalho de emulao foram aplicados no
desenvolvimento de uma verso com ncleo relacional do Gerenciador de Objetos SIRIUS,
criando em ambiente experimental, precursor verso com ncleo nativo desse
gerenciador. A API definida neste trabalho compatvel com ambas as verses do
Gerenciador SIRIUS, permitindo que uma aplicao utilize qualquer uma das verses sem
alteraes em seu cdigo fonte.
Para exemplificar a utilizao prtica da API, foi implementado um utilitrio de bases de
dados destinado representao de modelagens baseadas no modelo de dados SIRIUS
usando a verso relacional do Gerenciador de Objetos SIRIUS. Esse utilitrio, alm de
demonstrar a utilizao da API, demonstra tambm como as operaes tpicas da DDL e da
DML so integradas em um nico conjunto de comandos que no faz diferena entre a
definio de tipos e de instncias.
iv
Abstract
This work develops an Application Program Interface (API) for an object oriented data
manager. The API is composed by a set of methods that includes object definition and
manipulation appropriated for an object oriented programming language.
The API definition explores basic resources of object oriented data models. It is based on
extensions of a meta-model based on four abstractions: classification, generalization,
aggregation and composition. One of the API predominant characteristics is the support to
the classification abstraction. It is used a multiple-level classification hierarchy, enabling a
seamless treatment of types and instances, unifying the commands usually divided in the
DDL and DML parts of the query language.
The API was constructed employing a relational manager, aiming to emulate an object
oriented data manager. The target data model was based on the SIRIUS model, creating a
relational version of the SIRIUS Object Manager. Thus, this relational version is an
experimental environment, aiding the development of the full native version of that
manager. The API defined in this work is compatible with both versions of the SIRIUS
Manager, allowing applications to use any version without modifications in their codes.
In this work, the API usage is exemplified with the development of a database tool
designed to represent target modeling based on SIRIUS data model, using the relational
version of the SIRIUS Object Manager. This utility also shows how the DDL and DML
parts of the query language are unified in a unique, seamless command set, in which there
is no distinction between types and instances.
Sumrio
Lista de Figuras
Lista de Tabelas
Siglas e Abreviaes
1
INTRODUO............................................................................................................. 1
1.1
1.2
1.3
INTRODUO........................................................................................................... 72
DESCRIO DO E2SIRIUS ......................................................................................... 72
UTILIZAO DA API NO E2SIRIUS ........................................................................... 74
CONSIDERAES FINAIS.......................................................................................... 78
CONCLUSO ............................................................................................................. 79
7.1
7.2
7.3
Referncias Bibliogrficas
Anexo: API do Gerenciador SIRIUS
vii
Lista de Figuras
FIGURA 19 - CDIGO
NO E
FIGURA 20 - CDIGO
NO E
viii
Lista de Tabelas
ix
Siglas e Abreviaes
API
CAD
Computer-Aided Design
CAM
Computer-Aided Manufacturing
CASE
CIM
DDL
DHC
DML
DRI
ODBC
ODL
ODMG
OId
Object Identifier
OIF
OML
OQL
SGBD
SGBDOO
TAD
1 Introduo
1 Introduo
1 Introduo
1 Introduo
1 Introduo
2 Conceitos de SGBDOOs
e Padres
2.1 Introduo
Sistemas de Gerenciamento de Bases de Dados Orientados a Objetos so genericamente
definidos como SGBDs que integram a funcionalidade dos gerenciadores de bases de
dados e a funcionalidade das linguagens de programao orientadas a objetos. Em um
SGBDOO os objetos da base de dados so tratados como objetos da linguagem de
programao.
SGBDOOs possuem caractersticas que abrangem princpios inerentes a sistemas de bases
de dados e princpios do paradigma de orientao a objetos. Algumas caractersticas
podem ou no estar presentes num SGBDOO, dependendo da abordagem adotada para o
mesmo. Analogamente, o modelo de dados, a API, a linguagem de programao e a
linguagem de consulta podem apresentar particularidades compatveis com as prioridades
do SGBDOO do qual fazem parte.
As sees seguintes apresentam uma viso geral das principais caractersticas dos
SGBDOOs, algumas abordagens para a arquitetura destes sistemas, caractersticas
importantes da API e da linguagem de consulta, e padres para a construo de aplicaes
apoiadas em SGBDOOs, destacando os padres ODMG e o SQL3.
removido da base de dados, aquele OId no deve ser novamente associado a nenhum
outro objeto.
desfazer tudo o que for construdo, ou seja, pode levar o sistema passo a passo para
qualquer estado anterior que j tenha existido, a partir de qualquer estado atual.
Alm dos princpios discutidos nos itens anteriores, algumas caractersticas adicionais
podem aumentar a funcionalidade de um SGBDOO, como suporte a verses, distribuio e
transaes planejadas (transaes longas e transaes aninhadas).
2.3 Arquitetura
Os SGBDOOs, de um modo geral, so construdos com base em trs abordagens principais
[Cattell_94]:
2.4 API
As caractersticas da API de um SGBDOO [Perez_91] podem ser classificadas em
caractersticas relevantes para o sistema de base de dados e caractersticas relevantes para
os objetos individuais manipulados pela aplicao e gerenciados pelo sistema de base de
dados. Embora as APIs possam diferir de um SGBDOO para outro, algumas caractersticas
consideradas fundamentais so apresentadas nos itens seguintes.
Interface do sistema de base de dados - a API de um SGBDOO deve incorporar
interfaces que permitam que o programa da aplicao defina os limites entre a base de
dados e a execuo das transaes.
Nas consideraes a respeito da API, o termo persistente utilizado para objetos persistentes e para objetos
potencialmente persistentes (objetos transientes que podem tornar-se persistentes); o termo transiente
utilizado para objetos completamente transientes (objetos transientes que nunca se tornaro persistentes)
10
11
ODBC
GemStone
ObjectStore
POSTGRES
IRIS
Shutdown
Incio de Transao
Commit de Transao
Abort de Transao
"no se
aplica"
Objetos Modificao
Recuperao
Transaes Elaboradas
Grupos de Objetos
Verses Anteriores
Locks em Objetos
Nomeao de Objetos
Interface Startup
Do
Sistema
Interface Alocao/Desalocao
Atribuio/Comparao
de
Outras
Persistncia
Observaes da Comparao:
1. O ObjectStore permite apenas alocao de objetos completamente transientes ou
completamente persistentes. Objetos no podem ser alocados como transientes e
posteriormente indicados como persistentes.
2. No sistema IRIS todos os objetos so persistentes.
12
13
Alm dos princpios bsicos da orientao a objetos, uma linguagem de consulta orientada
a objetos pode aumentar sua funcionalidade atravs do suporte a consultas recursivas,
consultas aninhadas e criao dinmica de objetos no contexto de uma consulta
[Bertino_92] [Chan_94].
14
2.6.1 ODMG
O padro ODMG (Object Database Management Group) [Barry_98a] [Cattell_94]
[Cattell_97] [ODMG_00] foi projetado para SGBDs orientados a objetos com arquiteturas
baseadas em linguagens de programao. O objetivo principal do ODMG viabilizar a
construo de aplicaes portveis que possam ser executadas em diferentes SGBDOOs.
Para tanto, o esquema de dados, o binding da linguagem de programao e as linguagens
de manipulao de dados e de consulta tambm devem ser portveis.
De maneira geral, o ODMG pretende ser adotado como um padro de desenvolvimento de
aplicaes centradas em sistemas que integram linguagens de programao e bases de
dados orientadas a objetos. Para tais aplicaes o padro ODMG pode apresentar
resultados mais satisfatrios em relao, por exemplo, ao padro SQL3 [Barry_98b].
Declarao em
ODL ou ODL LP
Fonte da
Aplicao em LP
Pr-processador
de Declarao
Compilador LP
SGBDOO
Aplicao
Binria
Metadado
Linker
Acesso a
Dados
Base de Dados
Aplicao
Executvel
operaes que podem ser executadas sobre ou pelo objeto. Os construtores do modelo,
destacados acima, so utilizados na modelagem de aplicaes centradas em SGBDOOs,
permitindo a declarao explcita de relacionamentos e operaes. O modelo de objetos
gerado para uma aplicao corresponde ao esquema lgico na base de dados.
2.6.1.2 Linguagens de Especificao de Objetos
O padro ODMG possui linguagens de especificao, independentes da linguagem de
programao, que so usadas para a definio de esquemas, operaes e estados dos
objetos da base de dados de um SGBDOO. Essas linguagens tm como objetivo facilitar a
portabilidade de bases de dados em implementaes ODMG compilveis. Alm disso, as
linguagens de especificao auxiliam a interoperabilidade entre SGBDOOs de diferentes
vendedores. O ODMG possui duas linguagens de especificao principais: ODL - Object
Definition Language e OIF - Object Interchange Format.
A linguagem ODL, utilizada para a especificao dos tipos de objetos do Modelo de
Objetos do ODMG, oferece suporte a todos os construtores semnticos do modelo. A ODL
atua como uma linguagem de definio para a especificao de objetos (DDL para tipos de
objetos) e no como uma linguagem de programao completa.
A ODL pode ser adotada em projetos de aplicaes sem levar em considerao a
linguagem de programao a ser utilizada na implementao. Desta forma, os resultados de
um projeto podem ser utilizados diretamente no SGBDOO ou traduzidos para uma
linguagem qualquer de descrio de dados. No entanto, as especificaes ODL podem ser
traduzidas ou implementadas com mais eficincia pelas linguagens C++, Java e Smalltalk,
para as quais esto definidos bindings ODMG. Alm disso, a ODL permite que uma
mesma base de dados seja compartilhada por diferentes linguagens de programao,
possibilitando ainda que uma aplicao seja portada para uma linguagem diferente sem que
a definio do esquema seja re-escrita. A ODL tambm fornece um contexto de integrao
de esquemas de origens variadas, mesmo que estes esquemas tenham sido definidos a
partir de modelos de dados e linguagens de definio diferentes. Por exemplo, padres
como o SQL3 podem ter seus modelos mapeados para especificaes ODL, formando uma
base que permite que vrios modelos sejam integrados com uma semntica comum.
17
existem trs componentes: ODL, OML e OQL. O componente ODL trata a definio do
esquema da base de dados, enquanto o OML manipula as instncias dos tipos definidos no
esquema, a partir dos OIds dos objetos. O componente OQL um subconjunto do OML
destinado a consultas associativas, ou seja, acesso baseado em valores associados s
propriedades (atributos e relacionamentos) dos objetos.
O objetivo principal dos bindings para linguagens de programao tornar a existncia de
duas linguagens (linguagem de programao e linguagem de base de dados) transparente
para o programador, ou seja, o programador deve pensar que est trabalhando com
apenas uma linguagem. Conseqentemente, o sistema de tipos da linguagem de
programao e da base de dados unificado, e as instncias destes tipos podem ser
persistentes (caracterstica das bases de dados) ou transientes (caracterstica das linguagens
de programao).
O binding para uma determinada linguagem de programao mantm a sintaxe e a
semntica da linguagem bsica qual inserido. O binding estruturado apenas como um
subconjunto da linguagem de programao base, e portanto no altera a funcionalidade j
existente. As expresses em OML e OQL podem ser combinadas com expresses da
linguagem de programao base, e vice-versa.
Um aspecto importante no contexto de aplicaes apoiadas em bases de dados o suporte
a persistncia [Atkinson_94] [Cattell_94] [Elmasri_00]. Portanto, torna-se relevante que os
bindings para linguagens de programao ofeream esse suporte, uma vez que as
linguagens de programao tratam apenas objetos transientes. O binding para a linguagem
C++ permite a criao de classes que podem ter instncias persistentes ou transientes. Estas
classes, chamadas persistence-capable classes, utilizam operadores sobrecarregados cujos
argumentos definem o "tempo de vida" de um objeto, isto , criam objetos persistentes ou
transientes. O binding para a linguagem Java suporta persistncia atravs da noo de
"alcanabilidade", o que significa que quando uma transao efetivada (committed), os
objetos referenciados direta ou indiretamente por objetos persistentes tornam-se tambm
persistentes. O binding para Smalltalk, que habilita o armazenamento de objetos Smalltalk,
tambm trata persistncia por "alcanabilidade" e os objetos "no alcanados" so
coletados por um sistema de garbage collection.
19
2.6.2 SQL3
SQL3 um padro importante para gerenciamento de dados orientados a objetos e
relevante principalmente em sistemas de bases de dados relacionais estendidos[Cattell_94].
Entretanto, pode ter impacto sobre outras abordagens de arquiteturas de bases de dados,
uma vez que o padro SQL largamente difundido e utilizado em sistemas de bases de
dados. O padro SQL3 indicado para criar ou estender aplicaes relacionais com suporte
a objetos. Para tais aplicaes o SQL3 a abordagem mais simples e apropriada, se
comparado com o ODMG [Barry_98b].
Caracterizado como SQL orientado a objetos [Eisenberg_99], SQL3 uma linguagem de
consulta relacional a objetos definida a partir da extenso e do aprimoramento da segunda
gerao do padro SQL, conhecida como SQL2 ou SQL-92 [Date_97]. Logo, a definio
do SQL3 inclui toda a linguagem SQL2 como um subconjunto. Alm das caractersticas
herdadas do SQL2, o SQL3 possui extenses que incluem um modelo de dados que
permite a representao de informaes para as quais o formato tabular relacional no
adequado. Outra extenso a incluso de caractersticas procedimentais que possibilitam
criao, gerenciamento e consulta de objetos persistentes.
As subsees seguintes apresentam as caractersticas mais recentes introduzidas ao padro
SQL3 para suportar os requisitos da abordagem orientada a objetos, e fazer do SQL uma
linguagem computacionalmente completa [Cattell_94]. Descries mais detalhadas a
respeito dessas e outras caractersticas do SQL3, e especificaes sintticas e semnticas
da linguagem, como predicados, construtores, palavras-chave, regras e restries para
definio de clusulas, entre outros, podem ser encontradas em [Date_97], [Eisenberg_99]
e [SQL3_97].
2.6.2.1 Tipos de Dados e Funes Definidos pelo Usurio
O suporte a tipos e funes definidos pelo usurio, e conseqente suporte a Tipos
Abstratos de Dados (TADs), so considerados caractersticas fundamentais introduzidas ao
padro SQL3, pois so recursos de suporte orientao a objetos [Cattell_94]
[Eisenberg_99].
Os TADs na linguagem SQL3 especificam basicamente atributos e rotinas. Cada atributo
pode ser de um tipo bsico como INTEGER, de um tipo coleo como ARRAY, ou de um
20
outro TAD definido pelo usurio. As rotinas podem ser procedimentos, mtodos e funes
que representam os aspectos de comportamento do TAD, ou seja, as operaes vlidas
associadas ao mesmo. Assim como em linguagens de programao orientadas a objetos, as
rotinas de um TAD em SQL3 podem ser sobrecarregadas.
O exemplo a seguir ilustra a definio do tipo Pessoa, com os atributos Nome, RG e
Data_Nasc, e a rotina Idade:
CREATE TYPE Pessoa (
Nome
VARCHAR(20),
RG
INTEGER,
Data_Nasc DATE,
FUNCTION Idade RETURNS INTEGER
< Cdigo para calcular a idade>,
);
VARCHAR(20),
INTEGER,
DATE,
O padro SQL3 suporta a noo de hierarquia, o que significa que TADs j definidos
podem ser especializados em novos TADs (subtipos), compondo hierarquias de tipos. Os
subtipos herdam dos supertipos todos os atributos e rotinas, embora possam incluir novos
atributos e novas rotinas, como ilustrado no exemplo abaixo:
LARGE
restries que no permitem sua utilizao como chave primria (PRIMARY KEY) e como
chave estrangeira (FOREIGN KEY) [Eisenberg_99]. Alm disso, as comparaes entre
valores do tipo LOB so restritas a testes de igualdade e no igualdade.
O tipo ARRAY permite o armazenamento de colees de valores diretamente em uma
coluna de uma tabela da base de dados. Por exemplo, a clusula:
DIAS_DA_SEMANA VARCHAR(10) ARRAY[7]
armazena os nomes dos sete dias da semana diretamente em uma nica linha e em uma
nica coluna de uma tabela da base de dados. Neste caso, embora a informao
armazenada possa ser decomposta, pode-se dizer que o SQL3 no satisfaz a Primeira
Forma Normal (1NF) [Elmasri_00], que define que um atributo de uma tupla deve assumir
apenas valores atmicos, ou seja, armazenar coleo de valores em uma nica coluna e em
uma nica linha proibido pela 1NF.
O tipo ROW utilizado para armazenar valores estruturados em uma nica coluna, como
ilustrado pelo atributo Endereo nas clusulas abaixo:
CREATE TABLE Pessoa (
Nome
VARCHAR(30),
Endereo
ROW (
Rua
VARCHAR(30),
Cidade
VARCHAR(20),
Estado
CHAR(2),
),
);
As consideraes a respeito da 1NF para o tipo ARRAY tambm so vlidas para o tipo
ROW.
2.6.2.3 Segurana Adicional
O padro SQL3 disponibiliza um recurso baseado em papis (roles) definidos pelo usurio
que permite que privilgios sejam concedidos indistintamente mediante identificadores de
autorizao e mediante papis [Date_97] [Eisenberg_99]. Os papis, por sua vez, tambm
so privilgios concedidos a identificadores de autorizao e a outros papis. Este
mecanismo aninhado pode simplificar o gerenciamento de segurana em um ambiente de
base de dados.
23
As transaes com savepoints atuam como subtransaes que garantem que apenas as
aes realizadas a partir de um determinado ponto (savepoint) sejam afetadas por
operaes de "desfazer" (roll back). Isto evita que todas as aes de uma transao sejam
desfeitas, preservando as atualizaes efetuadas antes do savepoint especificado
[Eisenberg_99].
O mecanismo de vises, utilizado em muitas aplicaes, geralmente no permite operaes
de atualizao em vises. O SQL3, entretanto, permite que dependncias funcionais
inerentes aplicao determinem quais vises podem ser atualizadas e como as alteraes
so realizadas na base de dados [Eisenberg_99].
24
25
3.1 Introduo
Os SGBDOOs oferecem o suporte apropriado a aplicaes de mbito tcnico-cientfico,
como as citadas no Captulo 1. Tais aplicaes abrangem diferentes reas de
conhecimento, entre as quais esto engenharia, medicina e inteligncia artificial. No
entanto, aplicaes tradicionais voltadas para ambientes de negcios, usualmente apoiadas
em SGBDs relacionais, tambm podem obter benefcios da tecnologia dos SGBDOOs
[Cattell_94].
Vrios SGBDOOs vm sendo desenvolvidos com um objetivo em comum: integrar bases
de dados e linguagens de programao orientadas a objetos para oferecer suporte adequado
s exigncias de aplicaes no convencionais, ou seja, modelagem e tratamento adequado
de objetos complexos, armazenamento e gerenciamento de dados em larga escala,
extensibilidade, portabilidade, entre outras.
As sees seguintes descrevem os sistemas O2 e Jasmine, sintetizando as caractersticas de
seus principais componentes, lembrando que no objetivo deste trabalho fazer uma
descrio completa e detalhada de tais sistemas, mas sim apresentar uma viso geral de
cada um deles. Outros SGBDOOs so brevemente comentados na seo 3.5.
3.2 Sistema O2
O2 [Bancilhon_92] [Deux_90] [Deux_91] um sistema comercial atualmente
desenvolvido pela O2 Technology e comercializado pela Ardent Software, Inc. O O2
adequado ao desenvolvimento de aplicaes no convencionais, como sistemas de apoio
engenharia, sistemas geogrficos e automao de escritrios, podendo tambm ser
utilizado por aplicaes tradicionais.
26
O2Tools
C
C++
O2C
O2Query
O2Look
O2Engine
Gerenciador de Esquemas
Gerenciador de Objetos
Extenso do WiSS
Figura 3 - Arquitetura do O2 Engine
atributos Nome e Cidade so do tipo string e o atributo Menu uma lista de tuplas
formadas por Preo e Contedo. O mtodo, assim como em linguagens de
programao orientadas a objetos, implementado fora da especificao da classe.
class Restaurante
type tuple (
Nome: string,
Menu: list(tuple(Preo: real,
Contedo: string)),
Cidade: string)
O O2 suporta o conceito de herana, simples e mltipla, permitindo que uma classe tenha
seu tipo e seus mtodos herdados de outras classes. A herana mltipla pode gerar
eventuais colises de nomes quando atributos ou mtodos herdados de classes diferentes
possuem o mesmo nome. Neste caso, os nomes conflitantes so explicitamente
renomeados na subclasse (comando renaming). Novos atributos e mtodos podem ser
definidos para a subclasse, assim como tipos e mtodos podem ser redefinidos localmente.
O tratamento persistncia segue o princpio da "alcanabilidade", onde um objeto tornase persistente se estiver ligado a um objeto raiz persistente atravs de um relacionamento
de herana ou de composio (colees). O conceito de encapsulamento tratado no O2
em trs nveis: encapsulamento de atributos e mtodos numa classe, encapsulamento de um
conjunto de classes no esquema e encapsulamento da base de dados. Os dois ltimos tipos
permitem reusabilidade, pois um esquema pode exportar um conjunto de classes para outro
esquema, assim como uma aplicao rodando sobre uma base de dados em particular pode
acessar outra base de dados apenas invocando um mtodo que ser executado na base
remota.
3.2.3 Linguagem de Consulta
A linguagem de consulta O2Query um subconjunto da O2C, mas pode ser utilizada como
uma linguagem interativa independente ou pode ter seus comandos chamados dentro de
programas C e C++.
O2Query uma linguagem SQL-like estendida para manipular valores e objetos
complexos. Alm disso, todos os tipos de dados, operadores e mtodos so aceitveis em
uma consulta em O2Query. As consultas so especificadas basicamente em trs partes: a
29
}Menu;
char *Cidade;
};
Razes persistentes: so objetos nomeados atravs dos quais objetos C++ transientes
podem tornar-se persistentes pelo princpio da alcanabilidade.
Aplicao
Gerenciamento de Objetos
Gerenciamento de Dados
Base de Dados
Figura 4 - Arquitetura do Sistema Jasmine
Estudante
Db Universidade
Super Pessoa
Enumerated
INTEGER Nmero mandatory
DISCIPLINAS dc multiple
33
STRING Endereo
Cidade_Or Origem
STRING Turma
No exemplo, a palavra chave mandatory indica que o atributo no pode receber valor
nulo. Multiple indica atributo multi-valorado e enumerated indica incio de uma lista de
atributos definidos pelo programador. A palavra chave Db precede o nome da base de
dados qual a classe definida deve fazer parte e super indica quem sua superclasse. A
classe Composite, definida pelo sistema, uma superclasse das classes que esto no
nvel mais alto da hierarquia de classes criada pelo usurio. No exemplo, a classe Pessoa
no possui superclasse definida pelo usurio, ou seja, est no nvel mais alto da hierarquia.
Portanto, a superclasse de Pessoa a classe Composite definida pelo sistema.
Assume-se, para este exemplo, que a classe Cidade_Or, tipo do atributo Origem, foi
previamente definida.
O exemplo abaixo ilustra uma possvel instncia da classe Pessoa:
UniversidadePessoa001
Nome
"Paulo"
RG
99999
Endereo "Rua 05, nro 30"
Origem
UniversidadeCidade010
34
As expresses de objetos podem invocar demons que verificam restries definidas pelo
programador da aplicao. Alm disso, mtodos de classes e mtodos definidos pelo
sistema, como put, delete e print, tambm podem ser executados a partir de uma consulta.
O tratamento a mtodos definidos pelo sistema e mtodos definidos pelo usurio
uniforme. Na consulta abaixo, por exemplo, o mtodo put insere um novo valor para o
conjunto de disciplinas cursadas pelo estudante Paulo:
Estudante.put("Disciplinas","ICC-II")
where Estudante.Nome == "Paulo"
35
time travel, que permitem que o usurio faa uma consulta histrica e obtenha dados
vlidos de acordo como o "tempo" especificado na consulta.
KROSS [Kim_96] um sistema de base de dados espacial orientado a objetos que utiliza o
ObjectStore como plataforma de implementao. O KROSS incorpora um modelo de
dados baseado em assinatura espacial (SAS - spatial signature) que suporta os tipos de
objetos espaciais e as operaes correspondentes. A linguagem de consulta espacial
orientada a objetos (SOQL - spatial object query language), alm de manipular objetos
espaciais, possui um mecanismo integrado para recuperao e apresentao grfica de
objetos espaciais. Sistemas de informaes geogrficas e sistemas de gerenciamento de
imagens mdicas so exemplos de aplicaes baseadas em dados espaciais.
TriGS [Kappel_98] um sistema de triggers implementado sobre o GemStone, inserindo
conceitos ativos em um SGBDOO. O TriGS oferece suporte ao desenvolvimento de
aplicaes centradas em bases de dados ativas, permitindo a definio de regras associadas
a eventos, condies e aes. So exemplos de tais aplicaes: gerenciamento de fluxo de
trabalho, CAM e aplicaes multimdia.
SIRIUS um SGBDOO que vem sendo desenvolvido pelo Grupo de Banco de Dados e
Imagem (GBDI) do ICMC-USP. A pesquisa bsica e a pesquisa tecnolgica a cerca do
desenvolvimento do SIRIUS tm como objetivo principal aplicar os resultados obtidos em
atividades de desenvolvimento de sistemas centrados em bases de dados, voltados para
aplicaes no convencionais. Destacam-se sistemas de apoio medicina e ambientes de
armazenamento e distribuio de imagens.
37
38
4.1 Introduo
O Modelo de Dados SIRIUS um metamodelo orientado a objetos baseado em quatro
abstraes:
classificao,
generalizao,
agregao
composio
[Biajiz_96a]
Abstrao
Classificao
Associao
Generalizao
Agregao
Composio
agregao/separao
composio/decomposio.
Abstrato
Descreve
Abstrai
Propriedades
Detalhe
40
Tipo de Caracterstica
Caracterstica
Smbolo
Esttica
texto
Tx
nmero
Nu
booleano
Bo
regra
Rg
procedimento
Pc
visualizao
Vs
som
So
partitura
Pa
imagem
Im
grfico
Gr
estrutura de dados
Ed
tempo
Tm
tupla
Tp
atributo de atributo
Aa
relacionamento
Re
Dinmica
Interface
Estrutural
41
a) Agregao de atributo
a objeto
Tp Endereo
Tx Nome
Nu Nmero
Nu Idade
Tx Cidade
Tx Profisso
Aa Passaporte
Pessoa
Nu Nro Passaporte
Data Expedio
rgo Expedidor
c)
Empregado
Re Trabalha Em
Empresa
Re Emprega
respectivamente.
Quando um atributo agregado a um objeto, algumas propriedades da abstrao de
agregao devem ser definidas, tais como a organizao do atributo, ou seja, se a atributo
mono-valorado ou multi-valorado, e os limites inferior e superior, que determinam
respectivamente o nmero mnimo e mximo de valores que podem ser assumidos pelo
atributo.
4.2.2 Abstrao de Composio
Os objetos em SIRIUS podem ser compostos por outros objetos, criando hierarquias de
composio. Os elementos sintticos colnia e tipo de colnia so as estruturas utilizadas
para representar o conceito de composio.
Uma colnia um conjunto de todos os objetos que compem diretamente outro objeto, de
acordo com um aspecto especfico. Numa hierarquia de composio, o objeto abstrato,
chamado de objeto composto, constringe uma colnia onde habitam os objetos detalhe,
chamados de objetos parte.
42
b) DRI
a) DHC
Global
Global
Universidade
Universidade
Usp
Universidade
UFSCar
CCursos
CCursos
CCursos
Curso
Curso
Matemtica
Curso
Computao
Curso
Fsica
Curso
Computao
CDiscip
Disciplina
CDiscip
Disciplina
ICC - I
Disciplina
Bases de Dados
colnia do tipo CCursos, como definido no DHC apresentado na Figura 8a. Nessa
colnia habitam os objetos Computao e Matemtica, do tipo Curso, que compem o
objeto USP. Da mesma forma, o objeto UFSCar constringe uma colnia do tipo CCursos,
1
O tipo de colnia Global e a colnia instncia deste tipo so definidos pelo sistema. Na colnia do tipo
Global habitam todos os objetos do tipo Meta Tipo, tambm definido pelo sistema.
43
colnia do tipo CDiscip onde habitam os objetos ICC I e Bases de Dados, do tipo
Disciplina.
Por definio, um objeto habita exatamente uma colnia. No entanto, um objeto composto
pode constringir vrias colnias, desde que sejam de tipos diferentes [Ferreira_96].
4.2.3 Abstrao de Generalizao
A abstrao de generalizao fundamental em modelos de dados orientados a objetos,
pois atravs dela abstrai-se em um objeto genrico o comportamento e as propriedades de
objetos especficos [Biajiz_96a]. Um tipo de objeto, chamado de sub-tipo ou tipo
especfico, pode especializar um outro tipo de objeto j existente, chamado de super-tipo
ou tipo genrico, acrescentado detalhes pertinentes somente ao tipo de objeto especfico,
criando a hierarquia de generalizao.
Um tipo de objeto especializado segundo um critrio de especializao, que pode ser
definido pelo valor de um nico atributo, num domnio discreto e pr-definido, ou atravs
da avaliao de um predicado sobre os valores de um ou mais atributos. Alm disso, duas
restries so aplicadas especializao: a disjuno (D) ou sobreposio (S), e a
participao total (T) ou parcial (D).
Pessoa
D
Idade
Adulto
Criana
Idade <= 12
Inic.
Idoso
Idade >= 60
Inic.
44
45
a)
(1) Ttulo
1 Autor
(2) Edio
2 Ano
(3) Nro Cpia
3 Emprestado Para
Livro
Livro
Bases de Dados
Bases de Dados
2a Edio
Ano: 1995
1 Ano
(2) Nro Cpia
2 Emprestado Para
Bases de Dados
Meta Tipo
c)
(1) Edio
b)
d)
Bases de Dados
2a Edio
BD2a_001
Emprestado Para:
Joo Silva
Para exemplificar uma ocorrncia da classificao numa situao real, ser considerado um
sistema de informao de uma biblioteca, onde cada ttulo de livro pode ter vrias edies
e cada edio pode ter vrias cpias. Isso significa que o conceito de Livro instanciado
em Ttulo, Ttulo instanciado em Edio e Edio instanciado em Cpia. Como
Livro instncia de Meta-Tipo (definido pelo sistema), define-se uma hierarquia de
quatro nveis, como ilustrado na Figura 10. As Figuras 10a, 10b, 10c e 10d representam,
respectivamente, o objeto Livro como uma instncia de Meta-Tipo, o ttulo Bases de
46
nveis da hierarquia.
O suporte a atributo extra um recurso importante para a classificao em mltiplos
nveis. Os atributos extras permitem que novos atributos, tanto de classificao quanto de
instanciao, sejam includos em qualquer nvel da hierarquia. Deste modo, um atributo
extra pode ser vinculado a um objeto mesmo que no esteja previsto em seu tipo. Na
Figura 10a, todos os atributos de Livro so atributos extras, pois o objeto Meta-Tipo
no tem esses atributos definidos.
47
a)
b)
(1) Nro Cpia
1 Emprestado Para
1 CDEmprestado Para: ningum
Bases de Dados
Bases de Dados
3a Edio
Ano: 2000
Bases de Dados
3a Edio
BD3a__001
Emprestado Para: Joo Silva
CD Emprestado Para:
Maria Silva
48
49
5 API SIRIUS
5.1 Introduo
O sistema SIRIUS, como citado no Captulo 3, vem sendo desenvolvido pelo Grupo de
Banco de Dados e Imagens do ICMC-USP com o objetivo de oferecer suporte aplicao
de resultados das atividades de pesquisa cientfica do grupo.
A origem do sistema SIRIUS remota construo do GErenciador de Objetos - GEO
[Traina_91], cuja implementao teve como base os conceitos do modelo de dados MRO Modelo de Representao de Objetos [Biajiz_92] [Traina_92]. O sistema GEO/MRO foi
criado como uma "bancada de experimentao" para o desenvolvimento de algoritmos e
tcnicas que contribussem para a criao de SGBDOOs eficientes e confiveis. A
experincia e o conhecimento adquiridos nesse processo levaram definio do modelo
SIRIUS, descrito no Captulo 4, a partir do qual iniciou-se o desenvolvimento do sistema
SIRIUS, mais especificamente do Gerenciador de Objetos SIRIUS, descrito na seo 5.2.
Aplicao
Centrada em
SGBD Relacional
Aplicao Centrada em
Gerenciador SIRIUS
Gerenciador
Relacional
Tcnicas de
Desenvolvimento
SIRIUS
Especificao
da Aplicao
Gerenciador de
Objetos SIRIUS
Modelo
SIRIUS
Sistema SIRIUS
5 API SIRIUS
5 API SIRIUS
Mdulos Semnticos
N c l e o
Lista
ndice
SG-Atr
Blob
Composio
Subsistema de Gerenciamento de
Registros Lgicos
SG-Log
Subsistema de Gerenciamento de
Transaes
SG-Tran
52
5 API SIRIUS
baseada em um ncleo que utiliza um gerenciador relacional padro SQL. Essa verso
oferece o suporte bsico aos mdulos semnticos do modelo SIRIUS e, embora no seja
to eficiente quanto a verso nativa, j possui um prottipo operacional, resultante deste
trabalho. Um ponto importante a ser considerado aqui que a tcnica utilizada para a
implementao realizada permite emular construes semnticas oriundas de um modelo
orientado a objetos ( e suas respectivas abstraes) em um modelo muito mais simples,
como o caso do modelo relacional.
Interface de Programao de Aplicativos - API
Mdulos Semnticos
Nvel
Semntico
SGBD
Relacional
53
5 API SIRIUS
O que se pretende com a verso sobre ncleo relacional disponibilizar uma bancada
experimental para a elaborao de algoritmos, tcnicas de desenvolvimento e extenses
para suporte a aspectos ainda no tratados, possibilitando a definio de alternativas
adequadas para uma implementao mais eficiente na verso nativa.
Elemento Sinttico
Classe da API
SiriusObject
Atributo
SiriusAttribute
Colnia
SiriusColony
Tipo de Colnia
SiriusColonyType
5 API SIRIUS
Caracterstica de Atributo
Classe da API
Texto
SiriusAttribText
Nmero
SiriusAttribNumber
Atributo de Atributo
SiriusAttribAttrib
conjuntos.
Elementos Recuperados
Classe da API
SiriusObjectCursor
Atributos
SiriusAttributeCursor
SiriusColonyCursor
As classes definidas para a API compem alguns dos mdulos semnticos do Gerenciador
SIRIUS: Mdulo Objeto, Mdulo Atributo Texto, Mdulo Atributo Nmero, Mdulo
Atributo de Atributo e Mdulo Colnia. Esses mdulos implementam a semntica das
55
5 API SIRIUS
Mdulo Semntico
Classes da API
Mdulo Objeto
SiriusObject
SiriusObjectCursor
SiriusAttribute
SiriusAttribText
SiriusAttributeCursor
Mdulo Atributo Nmero
SiriusAttribute
SiriusAttribNumber
SiriusAttributeCursor
SiriusAttribute
SiriusAttribAttrib
SiriusAttributeCursor
Mdulo Colnia
SiriusColony
SiriusColonyType
SiriusColonyCursor
Tabela 6 - Composio dos Mdulos Semnticos
criado, sua estrutura interna inicializada de forma a preparar o sobrestante para a criao
de um novo objeto-sirius (mtodo CreateObject), ou para a leitura de um objeto-sirius
armazenado na base de dados (mtodo ReadObject).
1
5 API SIRIUS
acesso a objetos-sirius restrito a colnias abertas, isto , a aplicao somente tem acesso a
objetos-sirius que habitam suas colnias abertas. A classe SiriusColony possui o
mtodo OpenColony, que explicitamente abre uma colnia para a aplicao. Uma
instncia da classe SiriusColony, chamada de sobrestante colnia, representa em
memria as informaes de uma colnia definida na base de dados. Cada colnia
acessada pela aplicao atravs do nome de seu tipo e do OId do objeto-sirius que a
constringe. Assim como na classe SiriusObject, criar um sobrestante colnia no
significa criar uma colnia, pois a classe SiriusColony tambm possui um mtodo
dedicado a essa operao: CreateColony.
A classe SiriusColonyType oferece suporte criao da hierarquia de tipos da
abstrao de composio, definida atravs do DHC, descrito no Captulo 4. A aplicao
tem acesso s informaes de um tipo de colnia atravs de seu nome. Os tipos de colnia
57
5 API SIRIUS
Por
exemplo,
os
mtodos
GetClassificationInfo
in
Computer
Science, Computer
5 API SIRIUS
a) DHC
b) DRI
Global
Biblioteca
Prof. Achille B as si
CBibl
Pe ridico
CBibl
Com puter
Networks
Transactions in
Com puter Science
Com puter
Networks
CBibl
3rd Edition
c)
(1)Tx Ttulo
(1)Tx Nom e
1 Nu Ano
2 Nu Ano
(2)Tx Edio
1 Tx Instituio: USP
Bibliotec a
Prof. Achille B as si
(1)Tx Edio
Livro
CBibl
Com puter
Networks
Com puter
Networks
CBibl
3rd Edition
Ano: 1996
Instituio:
ICMC/US P
O objeto-sirius Biblioteca do tipo Meta Tipo e habita a colnia do tipo Global, que
est sempre aberta para a aplicao. Portanto, Biblioteca pode ser o primeiro objetosirius a ser criado. Na criao de Biblioteca, METATYPE e GLOBAl so palavras prdefinidas na API para o Meta Tipo (que tipo de Biblioteca) e para o tipo de colnia
Global (que o tipo de colnia onde vo habitar as instncias de Biblioteca). O
);
59
5 API SIRIUS
// propriedades da agregao
// nvel de instanciao
class.id = IDENTIFIER;
// identificador
class.def = DEFINED;
// definido
class.dflt = NON-DEFAULT;
class.fix = FIX;
// fixo
agreg.org = MONOVALUED;
// mono-valorado
agreg.lBound = 1;
agreg.uBound = 1;
5 API SIRIUS
instncias, e portanto no possui tipo de colnia definido para instncias. Neste caso, o
mtodo CreateObject chamado apenas com os parmetros de nome e tipo do objetosirius. Os atributos definidos em Biblioteca so criados implicitamente para sua
instncia. As propriedades de classificao e agregao so preservadas, alterando-se
apenas o nvel de instanciao, que decrementado. O valor default USP pode ser alterado
em Prof. Achille Bassi, como ilustrado na modelagem. Para tanto, o mtodo
GetAttribute habilita o acesso ao atributo Instituio atravs do sobrestante
vAttrib, e o mtodo UpdateValue altera o valor default para ICMC-USP. Note-se que
);
Criado o tipo de colnia CBibl, possvel criar uma colnia deste tipo constrita pelo
objeto-sirius Prof. Achille Bassi, representado no sobrestante vBassi.
SiriusColony *vColony = new SiriusColony;
vColony->CreateColony( CBibl, vBassi );
61
5 API SIRIUS
delete vColony;
sobrestante colnia, no tendo efeito algum sobre a colnia j criada na base de dados. Os
destrutores das demais classes atuam da mesma forma, havendo uma pequena diferena no
destrutor da classe SiriusObject, j que se um sobrestante objeto for removido, o
objeto-sirius correspondente s existir na base se for persistente. As classes da API
definem mtodos especficos para a remoo de elementos da base SIRIUS, como por
exemplo, DeleteObject da classe SiriusObject.
Retornando ao exemplo da modelagem, o objeto-sirius Livro, cujo tipo Meta Tipo,
habita a colnia do tipo Global e define CBibl como o tipo de colnia onde vo habitar
suas instncias. De maneira anloga criao de Biblioteca, as linhas de cdigo a
seguir criam o objeto-sirius Livro.
SOID livroOId;
SiriusObject *vLivro = new SiriusObject;
vLivro->CreateObject( Livro, METATYPE, CBibl );
livroOId = vLivro->SetAsPersistent(
);
62
5 API SIRIUS
Para criar as instncias de Livro preciso abrir uma colnia do tipo CBibl. O mtodo
OpenColony abre a colnia criada anteriormente.
SiriusColony *vColony = new SiriusColony;
vColony->OpenColony( CBibl, vBassi );
5 API SIRIUS
try
{
SOID cnOId, edOId;
SiriusObject *vCN = new SiriusObject;
vCN->CreateObject(Computer Networks,Livro,CBibl );
cnOId = vCN->SetAsPersistent(
);
SiriusAttribNumber *vAttrib;
SiriusObject *vEd = new SiriusObject;
vEd->CreateObject( 3rdEdition, Computer Networks );
edOId = vEd->SetAsPersistent(
);
vEd->GetAttribute( Ano );
vAttrib->SetValue( 1996 );
}
catch ( SiriusError erro )
printf( Erro: %s , erro.GetMessage( ) );
Para exemplificar a utilizao de mtodos de consulta, dois tipos de busca podem ser
considerados:
Buscar todos os ttulos de livros da biblioteca Prof. Achille Bassi. Como as
instncias de Livro habitam colnias do tipo CBibl, necessrio abrir a colnia
constrita por Prof. Achille Bassi, pois como j foi dito anteriormente, os
mtodos da API s tm acesso a objetos-sirius de colnias abertas para a aplicao.
Quando a aplicao requisita que uma colnia seja aberta, o mtodo OpenColony
fecha qualquer outra colnia do mesmo tipo que estiver aberta, pois SIRIUS define que
apenas uma colnia de cada tipo pode estar aberta simultaneamente para a aplicao.
O mtodo SearchObject sobrecarregado na classe e faz a busca segundo o critrio
especificado nos parmetros. Todos os OIds recuperados na consulta so armazenados e
percorridos atravs do cursor controlado no mtodo EndOfObjects. O mtodo
GetObject retorna para a aplicao o OId apontado pelo cursor.
SiriusColony *vColony = new SiriusColony;
vColony->OpenColony( CBibl, vBassi );
SOID objId;
64
5 API SIRIUS
Network. O mtodo
65
5 API SIRIUS
SIRIUS
Startup
Classe: SIRIUS
Mtodo: Connect( ... )
Interface Shutdown
Classe: SIRIUS
Mtodo: Disconnect( ... )
Do
Incio de Transao
Classe: SIRIUS
Mtodo: BeginTransaction( ... )
Sistema
Commit de Transao
Classe: SIRIUS
Mtodo: CommitTransaction( ... )
Abort de Transao
Classe: SIRIUS
Mtodo: AbortTransaction( ... )
Alocao/Desalocao
Classe: SiriusObject
Mtodos: SiriusObject( ... )
~SiriusObject( ... )
Interface
Atribuio/Comparao
Persistncia
Classe: SiriusObject
De
Objetos
Mtodo: SetAsPersistent(... )
Modificao
Recuperao
Classe: SiriusObject
Mtodo: ReadObject( ... )
Outras
Transaes Elaboradas
Grupos de Objetos
Verses Anteriores
Locks em Objetos
Nomeao de Objetos
66
5 API SIRIUS
Observao:
* Caractersticas no previstas na API, pois ainda no foi definido o suporte a cada uma
delas no Gerenciador de Objetos SIRIUS.
5.3.2 Implementao da API
As classes definidas para a API SIRIUS, com exceo da classe SiriusAttribAttrib,
foram implementadas como uma DLL que exporta os mtodos pblicos destas classes para
a aplicao. A implementao da API compe um conjunto de mdulos semnticos para a
verso com ncleo relacional do Gerenciador de Objetos SIRIUS. A Figura 16 ilustra a
estrutura implementada.
Aplicao
Objeto Atrib.
Texto
Atrib.
Atrib.
Nmero Atrib.
API
Colnia
Mdulos Semnticos
Mdulo de Acesso
aos Dados
SGBD
Relacional
5 API SIRIUS
O conjunto de clusulas SQL que permitem o acesso aos dados armazenados na base
relacional, na verso da API sobre ncleo relacional, foi gerado a partir das clusulas SQL
2
criadas para a verso original do E SIRIUS, como citado na seo 5.2. Algumas dessas
clusulas foram alteradas para otimizar algumas operaes, mas a essncia da estrutura de
2
...
...
AtId
AtNm Value(s)
5 API SIRIUS
O OId composto por dois campos: um campo address e um campo counter. Na verso
nativa, address armazena do endereo lgico do objeto-sirius e counter armazena o
nmero de vezes que esse endereo foi utilizado por objetos-sirius diferentes, mantendo
assim duas propriedades importantes do OId: a unicidade e a no reutilizao do mesmo
durante toda a existncia da base de dados [Valncio_00]. Na verso relacional, o campo
address perde o sentido, e portanto mantido com valor 0 (zero); o campo counter
gerado automaticamente pelo gerenciador para objetos-sirius declarados persistentes,
mantendo as propriedades citadas acima.
Assim como os objetos-sirius, atributos, colnias e tipos de colnia tambm possuem
cdigos identificadores nicos, gerados pelo gerenciador. Entretanto, a aplicao tem
acesso somente aos OIds dos objetos-sirius; os atributos so identificados atravs de seus
nomes; uma colnia identificada atravs do nome de seu tipo e do OId do objeto-sirius
que a constringe, e o tipo de colnia identificado por seu nome.
O sobrestante objeto possui ainda um flag indicando se o objeto-sirius persistente ou
transiente e, se for transiente, um flag indicando se valores de atributos foram adicionados,
removidos ou alterados, pois quando declarado persistente, o objeto-sirius representado
no sobrestante objeto dever ser criado na base de dados assim como definido no
sobrestante. Quando um objeto-sirius de um determinado tipo criado no sobrestante
objeto, toda a estrutura do sobrestante criada independentemente do novo objeto-sirius
ser persistente ou transiente. Se, por exemplo, o tipo em questo possuir valor default para
algum atributo, o novo objeto-sirius tambm possuir esse valor para o atributo. Porm, se
esse valor for alterado enquanto o objeto-sirius for transiente, essa alterao dever ser
mantida quando o objeto-sirius tornar-se persistente e for criado na base de dados.
As classes que manipulam conjuntos, ou seja, as classes SiriusObjectCursor,
SiriusAttributeCursor e SiriusColonyCursor, so estruturadas como listas
69
5 API SIRIUS
70
5 API SIRIUS
71
6 E2SIRIUS
6.1 Introduo
2
O E Sirius [Araujo_98a] [Araujo_98b], embora tenha sido criado com base no modelo
SIRIUS, foi desenvolvido com a finalidade de demonstrar principalmente o suporte a
atributos extras e a hierarquias de classificao em mltiplos nveis, utilizando um
conjunto nico de comandos para o tratamento de tipos e instncias em tempo de
execuo.
2
base de dados relacional. Neste trabalho, o E Sirius foi re-implementado, e suas operaes
passaram a utilizar apenas as primitivas da API desenvolvida. Este captulo pretende
apresentar a nova abordagem de implementao do Editor de Esquemas, demonstrando que
a API pode ser utilizada na criao de um utilitrio de bases de dados genrico, como o
2
6 E2SIRIUS
utilitrio. Nesse formulrio, o interador Object, composto pelos campos Object Name,
Object Type e Instances Colony Type definem, respectivamente, o nome do
objeto, seu tipo e o tipo da colnia onde habitam as suas instncias. Para criar um objeto, o
usurio escolhe seu tipo dentre os disponveis em Object Type. Quando a base de dados
criada, existe apenas o tipo Meta Tipo, definido pelo sistema. Logo, o primeiro objeto
criado deve ter esse tipo, iniciando a hierarquia de classificao. Os prximos objetos a
serem criados podem ser de qualquer tipo disponvel, ressaltando que um objeto
considerado tipo quando sua definio inclui atributos de classificao, como descrito no
Captulo 4.
6 E2SIRIUS
Gerenciador SIRIUS, a nova verso do E Sirius pode utilizar, como utilitrio, tanto a
verso relacional quanto a verso nativa desse gerenciador.
A funcionalidade geral do Editor de Esquemas foi preservada na nova implementao, pois
os conceitos inerentes s abstraes de dados que o editor suporta, com exceo da
abstrao de generalizao, esto presentes na API. Entretanto, o cdigo resultante bem
mais conciso e mais simples, pois todas as operaes de acesso direto base de dados
emulando um ambiente orientado a objetos so feitas na API. Alm disso, as operaes
especficas de verificao de consistncia e de restries de integridade referentes ao
modelo de dados tambm so tratadas na API, deixando para o utilitrio apenas a tarefa de
verificar, se como resultado, houve ou no a ocorrncia de erros. Alm disso, a maioria dos
74
6 E2SIRIUS
trechos de cdigo que envolvem uma lgica mais complexa ficaram implementados
internamente API.
Essa nova abordagem de implementao facilitou significativamente a atividade de
desenvolvimento do editor, finalizado num tempo muito menor que a verso original,
mesmo levando-se em considerao a experincia anteriormente adquirida com o
desenvolvimento da mesma. Uma medida quantitativa desse ganho pode ser vista pelo
nmero de linhas de cdigo do editor: desconsiderando-se os mdulos que no foram
alterados por no haver sido criado na API o suporte necessrio (como por exemplo o
suporte abstrao de generalizao), 6.389 linhas de cdigo da verso original foram
transformadas em 2.948 linhas na verso que utiliza a API. Uma vantagem importante
dessa nova abordagem a reduo na complexidade da tarefa de manuteno e extenso do
Editor de Esquemas.
Para ilustrar, so apresentados trechos de cdigo da verso original e da verso utilizando
a API para a mesma operao. A Figura 19 apresenta o cdigo que efetua a criao de um
novo objeto na verso original do editor, e a Figura 20 apresenta o cdigo para a mesma
operao na verso que utiliza a API. Note-se que no exemplo da verso original todas as
funes utilizadas foram implementadas na prpria ferramenta, enquanto no exemplo da
verso utilizando a API so utilizados apenas mtodos implementados nas classes da API,
com exceo da funo RefreshGrids, que refere-se apenas interface com o usurio, e
da macro SAFEDELETE, cuja lgica refere-se a restries impostas pelo editor.
75
6 E2SIRIUS
76
6 E2SIRIUS
O Editor de Esquemas foi re-implementado com o objetivo de validar a API definida neste
trabalho, a qual comprovou ser um mecanismo consistente de desenvolvimento de
aplicativos centrados num gerenciador de dados orientado a objetos. Foi demonstrado que
a API pode ser utilizada para implementar um utilitrio de bases de dados genrico e
abrangente, oferecendo suporte consistente aos conceitos das abstraes de dados de um
modelo orientado a objetos. Naturalmente, a API tambm pode ser utilizada no
desenvolvimento de aplicaes para a resoluo de problemas mais especficos, e pode ser
expandida para suportar tipos de dados complexos caractersticos de aplicaes no
convencionais, em diversas reas de conhecimento.
77
6 E2SIRIUS
78
7 Concluso
7 Concluso
79
7 Concluso
A API, assim como o prottipo da verso com ncleo relacional do Gerenciador SIRIUS,
foi validada atravs da reformulao do Editor de Esquemas SIRIUS, que passou a realizar
toda a comunicao com a base de dados atravs dos mtodos definidos na API
[Araujo_98b]. O resultado obtido foi um cdigo conciso, consistente e compatvel com as
necessidades do editor, ou seja, suporte edio de modelagens centradas no modelo
SIRIUS, alimentao da base de dados, consulta e atualizao. A reformulao do editor
demonstrou que a API oferece os recursos adequados ao desenvolvimento de uma
ferramenta que incorpora as particularidades das abstraes de classificao, agregao,
composio e generalizao, como o caso do Editor de Esquemas. Portanto, a API pode
ser utilizada no desenvolvimento de aplicaes cujas informaes sejam representadas
segundo as abstraes citadas acima.
Conclui-se que a API resultante deste trabalho atende aos requisitos considerados
fundamentais no contexto ao qual est inserida:
incorpora a funcionalidade bsica da API de um gerenciador de base de dados,
disponibilizando operaes de criao, remoo, atualizao e consulta;
abrange os conceitos principais do modelo SIRIUS, destacando-se as abstraes de
dados que o modelo suporta;
permite acesso ao esquema e manipulao de dados utilizando um mesmo conjunto de
primitivas, unificando operaes usualmente divididas em DDL e DML;
compatvel com as verses com ncleo relacional e com ncleo nativo do gerenciador
de objetos SIRIUS;
oferece suporte adequado abstrao de classificao com hierarquia em mltiplos
nveis atravs do tratamento homogneo de tipos e instncias.
Este ltimo requisito particularmente significativo, pois demonstra (pela primeira vez na
literatura, segundo o melhor de nosso conhecimento), de maneira prtica, a utilizao da
abstrao de classificao em um ambiente relacional, e a unio dos subconjuntos DDL e
DML de uma linguagem de consulta em apenas um conjunto de comandos [Machado_00].
80
7 Concluso
81
7 Concluso
7 Concluso
7 Concluso
84
Referncias Bibliogrficas
Referncias Bibliogrficas
[Araujo_98a] Araujo, M. R. B. - Representao de Construtores Semnticos em SIRIUS e
Suporte atravs de um Editor de Esquemas, Dissertao de Mestrado - ICMC - USP,
So Carlos, 1998.
[Araujo_98b] Araujo, M. R. B.; Traina Jr, C.; Biajiz, M.; Machado, E. P. - Editor de
Esquemas com Suporte para Hierarquias de Classificao, Anais do XIII Simpsio
Brasileiro de Banco de Dados, pp. 135 - 149, Maring, Outubro 1998.
[Atkinson_94] Atkinson, M. et al. - The Object-Oriented Database System Manifesto,
Readings in Database System, edited by M. Stonebraker, Morgan Kaufmann
Publishers, pp. 946 - 954, 1994, Second Edition.
[Bancilhon_92] Bancilhon, F.; Delobel, L.; Kanellakis, P. - Building an Object-Oriented
Database System, The Story of O2, Morgan Kaufmann, 1992.
[Barry_98a] Barry, D. There's an ODMG Database in Your Future, Database
Programming & Design, pp. 66, April 1998. Disponvel on line em
http://www.odmg.org.
[Barry_98b] Barry, D. If You Want Better Answers..., Database Programming &
Design, pp. 72, July 1998. Disponvel on line em http://www.odmg.org.
[Bertino_91] Bertino, E.; Martino, L. Object-Oriented Database Management Systems:
Concepts and Issues, Computer IEEE, vol. 24, no. 4, pp. 33 - 47, April 1991.
[Bertino_92] Bertino, E.; Negri, M.; Pelagatti, G.; Sbattella, L. Object-Oriented Query
Languages: The Notion and the Issues, IEEE Transactions on Knowledge and Data
Engineering, vol. 4, no. 3, pp. 223 - 237, June 1992.
[Biajiz_92] Biajiz, M. Uma Atualizao do Modelo de Representao de Objetos e
Uma Abordagem Formal, Dissertao de Mestrado - ICMC -USP, So Carlos, Julho
1992.
[Biajiz_96a] Biajiz, M. - Representao de Modelos de Dados Orientados a Objetos
atravs de Parametrizao de Abstraes, Tese de Doutorado IFSC - USP, So
Carlos, Setembro 1996.
[Biajiz_96b] Biajiz, M.; Traina Jr., C.; Vieira, M. T. P. - SIRIUS - Modelo de Dados
Orientado a Objetos Baseado em Abstraes de Dados, Anais do XI Simpsio
Brasileiro de Banco de Dados, pp. 338 - 352, So Carlos, Outubro 1996.
[Butterworth_91] Butterworth, P.; Otis, A.; Stein, J. - The GemStone Object Database
Management System, Communications of the ACM, vol. 34, no. 10, pp. 64 - 77,
October 1991.
[Cattell_94] Cattell, R. G. G. - Object Data Management - Object-Oriented and Extended
Relational Database Systems, Addison - Wesley, 1994.
85
Referncias Bibliogrficas
Associates,
86
Referncias Bibliogrficas
Guide,
http://www.cs.hut.fi/~las/odbc.htm,
acessado
em
87
Referncias Bibliogrficas
88
Anexo:
API do Gerenciador de Objetos SIRIUS
89
Classe SiriusObject
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
SiriusObject ( )
Descrio:
Parmetros:
Exemplos:
vJohn->CreateObject(John, Person);
Mtodo:
~SiriusObject ( )
Descrio:
Mtodo:
SOID SetAsPersistent ( )
Descrio:
Parmetros:
Retorno:
SOID - OId do objeto persistente
Exemplos:
Mtodo:
bool IsPersistent ( )
Descrio:
Parmetros:
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
Retorno:
true - objeto persistente
false - objeto transiente
Exemplos:
Resultado:
persistent == true;
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
object - OId do objeto a ser lido
Mtodo:
void DeleteObject ( )
Descrio:
Parmetros:
Exemplos:
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
attribName - nome do atributo a ser removido
Exemplos:
vPerson->DeleteAttribute( Address );
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
level - nvel de instanciao do atributo identificador a ser manipulado
Retorno:
SiriusAttribute* - referncia para o sobrestante do atributo identificador
Exemplos:
Mtodo:
Mtodo:
SString GetColonyType ( )
Descrio:
Descrio:
Parmetros:
Parmetro de entrada:
attribName - nome do atributo a ser manipulado
Parmetros:
Retorno:
SString - nome do tipo de colnia
Exemplos:
Retorno:
SiriusAttribute* - referncia para o sobrestante do atributo
Exemplos:
SiriusAttribNumber *vAge;
vAge = (SiriusAttribNumber*) vPaul->GetAttribute( Age );
Resultado:
);
typeName == GLOBAL
Mtodo:
SString GetName ( )
Resultado:
Descrio:
Parmetros:
Retorno:
SString - nome do objeto
Exemplos:
value == 20
Resultado:
objName == Person
Mtodo:
Mtodo:
SOID GetType ( )
Descrio:
Descrio:
Parmetros:
Retorno:
SOID - OId do tipo do objeto
Exemplos:
Parmetros:
Parmetro de Retorno:
ctrObject - OId do objeto que constringe a colnia recuperada
Retorno:
SString - nome do tipo da colnia recuperada
Exemplos:
Mtodo:
SOID obj;
SString colony = vPerson->GetColony( &obj );
Descrio:
Resultado:
colony == GLOBAL
Mtodo:
SOID GetOId ( )
Descrio:
Parmetros:
Retorno:
SOID - OId do objeto
Exemplos:
Parmetros:
Exemplos:
Classe SiriusObjectCursor
Uma instncia da classe SiriusObjectCursor, chamada de sobrestante cursor objeto,
armazena os OIds de um conjunto de objetos da base de dados recuperados numa consulta,
segundo algum critrio.
Mtodo:
SiriusObjectCursor ( )
Descrio:
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
isType - define um critrio de seleo dos objetos das colnias:
isType = 0 (default) - seleo de todos os objetos, tipos ou no
isType = 1 - seleo de objetos que so tipos
Exemplos:
vResult->SearchObject( );
Parmetros:
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
typeOId - OId do tipo de objeto
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
typeOId - OId do tipo de objeto
attribName - nome do atributo
value - valor a ser procurado
Exemplos:
Mtodo:
Mtodo:
bool EndOfObjects( )
Descrio:
Descrio:
Parmetros:
Parmetros de entrada:
Parmetros:
Retorno:
1 - todos os OIds foram percorridos
0 - ainda existem OIds a serem percorridos
Exemplos:
colony - referncia para a colnia aberta onde deve ser feita a busca
isType - define um critrio de seleo dos objetos da colnia:
isType = 0 (default) - seleo de todos os objetos, tipos ou no
isType = 1 - seleo de objetos que so tipos
Exemplos:
SOID object;
vResult->SearchObject( personOId );
while ( !vResult->EndOfObjects( ) )
{
object = vResult->GetObject( );
.....
}
Mtodo:
Mtodo:
~SiriusObjectCursor ( )
Descrio:
Destrutor da classe
SOID GetObject ( )
Descrio:
Parmetros:
Retorno:
SOID - OId do objeto
Exemplos:
Classe SiriusAttribute
Uma instncia da classe SiriusAttribute, chamada de sobrestante atributo, uma
representao em memria de um atributo vinculado a um objeto armazenado na base de
dados e representado num sobrestante objeto.
Mtodo:
SiriusAttribute ( )
Descrio:
Mtodo:
~SiriusAttribute ( )
Descrio:
Mtodo:
SString GetName ( )
Descrio:
Parmetros:
Retorno:
SString - nome do atributo
Exemplos:
Mtodo:
SFeature GetFeature ( )
Descrio:
Parmetros:
Retorno:
SFeature - caracterstica do atributo
Exemplos:
Mtodo:
SClassification GetClassificationInfo ( )
Descrio:
Parmetros:
Retorno:
SClassification - propriedades da abstrao de classificao
Exemplos:
Mtodo:
SAggregation GetAggregationInfo ( )
Descrio:
Parmetros:
Parmetro de retorno:
SAggregation - propriedades da abstrao de agregao
Exemplos:
Resultado:
aggregInfo.org == MONOVALUED;
aggregInfo.lBound == 1;
aggregInfo.uBound == 2;
Mtodo:
Descrio:
SiriusAttribText ( )
Descrio:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
attribName - nome do atributo criado
Exemplos:
SiriusAttribText *vProfession =
new SiriusAttribText( Profession );
Parmetros:
Exemplos:
Classe SiriusAttribText
(derivada da classe SiriusAttribute)
Mtodo:
Mtodo:
Descrio:
Descrio:
Parmetros:
Parmetro de entrada:
value - valor a ser atribudo ao atributo
Parmetros:
Exemplos:
Exemplos:
SiriusAttribText *vNicknames;
vNicknames = (SiriusAttribText *)
vJohn->GetAttribute( Nicknames );
vNicknames->DeleteValue( Jonny );
Mtodo:
STextValue GetValue( )
Descrio:
Parmetros:
Retorno:
STextValue - valor do atributo
Exemplos:
Resultado:
value == doctor
Mtodo:
Descrio:
Parmetros:
Exemplos:
Mtodo:
bool EndOfValues( )
Mtodo:
Descrio:
Descrio:
Parmetros:
Parmetros de entrada:
Parmetros:
Exemplos:
Retorno:
0 - ainda existem valores a serem percorridos
1 - todos os valores foram percorridos
Exemplos:
Classe SiriusAttribNumber
(derivada da classe SiriusAttribute)
Uma instncia da classe SiriusAttribNumber chamada de sobrestante atributo, e representa
um atributo com caracterstica Nmero.
Mtodo:
SiriusAttribNumber ( )
Descrio:
Mtodo:
Descrio:
Parmetros:
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
value - valor a ser atribudo ao atributo
Exemplos:
vJohn->GetAttribute( Age );
Mtodo:
SNumberValue GetValue( )
Parmetro de entrada:
attribName - nome do atributo criado
Descrio:
Parmetros:
Retorno:
SNumberValue - valor do atributo
Exemplos:
SiriusAttribNumber *vAge;
SNumberValue value;
vAge = (SiriusAttribNumber *)
value = vAge->GetValue( );
Resultado:
value == 25;
vJohn->GetAttribute( Age );
Mtodo:
bool EndOfValues( )
Mtodo:
Descrio:
Descrio:
Parmetros:
Parmetros de entrada:
Parmetros:
Exemplos:
Retorno:
0 - ainda existem valores a serem percorridos
1 - todos os valores foram percorridos
Exemplos:
SiriusAttribNumber *vAge;
SNumberValue currentValue = 25";
SNumberValue newValue = 26";
vAge = (SiriusAttribNumber *) vJohn->GetAttribute( Age );
vAge->UpdateValue( currentValue, newValue );
SiriusAttribNumber *vBankAc;
vBankAc = (SiriusAttribNumber *)
vJohn->GetAttribute( BankAccounts );
vBankAc->UpdateValue(22334", 22335);
SiriusAttribNumber *vBankAc;
SNumberValue value;
vBankAc = (SiriusAttribNumber *)
vJohn->GetAttribute( BankAccounts );
while( !vBankAc->EndOfValues( ) )
{
value = vBankAc->GetValue( );
// processa valor ...
}
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
value - valor a ser removido
Exemplos:
Mtodo:
Descrio:
Parmetros:
Exemplos:
Mtodo:
~SiriusAttribNumber ( )
Descrio:
Classe SiriusAttribAttrib
(derivada da classe SiriusAttribute)
Uma instncia da classe SiriusAttribAttrib chamada de sobrestante atributo, e representa
um atributo com caracterstica Atributo de Atributo.
Mtodo:
SiriusAttribAttrib ( )
Descrio:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
attribName - nome do atributo criado
Exemplos:
Mtodo:
Descrio:
Parmetros:
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
Parmetro de entrada:
attribName - nome do atributo a ser acessado
Retorno:
SiriusAttribute* - referncia para o sobrestante atributo que representa
o sub-atributo requerido
Exemplos:
SiriusAttribNumber *vPassNr =
new SiriusAttribNumber( Passport Number);
vPassport->AddSubAttribute(vPassNr,IDENTIFIER);
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
attribName - nome do sub-atributo a ser removido
Exemplos:
vPassport->DeleteSubAttribute(Issued by);
Mtodo:
SiriusAttribute* GetIdSubAttribute ( )
Descrio:
Parmetros:
Retorno:
SiriusAttribute* - referncia para o sobrestante atributo que representa
o sub-atributo identificador
Exemplos:
SiriusAttributeCursor ( )
Descrio:
Parmetros:
Resultado:
Exemplos:
Mtodo:
~SiriusAttributeCursor ( )
Descrio:
Destrutor da classe
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
object - sobrestante objeto que representa o objeto do qual sero
selecionados os atributos
Exemplos:
Mtodo:
Descrio:
Parmetros:
Exemplos:
Classe SiriusAttributeCursor
Mtodo:
~SiriusAttribAttrib ( )
Descrio:
vResult->SearchAttribute( vPerson );
Mtodo:
SiriusAttribute* GetAttribute ( )
Descrio:
Classe SiriusColonyType
Uma instncia da classe SiriusColonyType, chamada de sobrestante tipo de colnia, uma
representao em memria de um tipo de colnia definido na base de dados.
Mtodo:
SiriusColonyType ( )
Parmetros:
Retorno:
SiriusAttribute * - referncia para um sobrestante atributo que representa
um atributo do objeto
Descrio:
Exemplos:
SiriusAttribute *attrib;
attrib = vResult->GetAttribute( );
Mtodo:
~SiriusColonyType ( )
Descrio:
Mtodo:
bool EndOfAttributes ( )
Descrio:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
typeName - nome do tipo de colnia a ser lido
Exemplos:
Parmetros:
Exemplos:
Retorno:
0 - ainda existem atributos a serem percorridos
1 - todos os atributos foram percorridos
Seleciona todos os atributos do objeto Person, cujo OId personId, e
percorre todo o conjunto de atributos selecionados, imprimindo um a um
os nomes dos atributos:
SiriusAttribute * attrib;
vResult->SearchAttribute( personId );
while( !vResult->EndOfAttributes( ) )
{
attrib = vResult->GetAttribute( );
attribName = (attrib->GetName( )).c_str( );
printf( %s, attribName);
}
Mtodo:
SOID GetCHDObject ( )
Mtodo:
Descrio:
Descrio:
Parmetros:
Parmetros de entrada:
Parmetros:
Retorno:
SOID - OId do tipo de objeto
Exemplos:
Mtodo:
void DeleteColType ( )
Descrio:
Parmetros:
Exemplos:
);
Exemplos:
Classe SiriusColony
Uma instncia da classe SiriusColony, chamada de sobrestante colnia, uma representao
em memria de uma colnia definida na base de dados.
Mtodo:
SiriusColony ( )
Descrio:
Mtodo:
bool IsOpen ( )
Descrio:
Parmetros:
Retorno:
1 - colnia aberta
0 - colnia fechada
Exemplos:
Mtodo:
~SiriusColony ( )
Descrio:
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
colType - nome do tipo da colnia a ser aberta
ctrObject - sobrestante objeto que representa o objeto que constringe a
colnia , de acordo com o Diagrama de Representao de Instncias
Mtodo:
SString GetType ( )
Descrio:
Parmetros:
Retorno:
SString - nome do tipo da colnia
Exemplos:
Resultado:
typeName == Countries
Exemplos:
Mtodo:
Mtodo:
SOID GetIRDObject ( )
Descrio:
Descrio:
Parmetros:
Parmetros de entrada:
Parmetros:
Retorno:
SOID - OId do objeto que constringe a colnia
Exemplos:
);
Mtodo:
void DeleteColony ( )
Remove da base de dados a colnia representada no sobrestante
Mtodo:
Descrio:
Descrio:
Parmetros:
Parmetros:
Parmetros de entrada:
Exemplos:
);
Mtodo:
void CloseColony ( )
Descrio:
Parmetros:
Exemplos:
Classe SiriusColonyCursor
Uma instncia da classe SiriusColonyCursor, chamada de sobrestante cursor colnia,
armazena colnias recuperadas numa consulta, segundo algum critrio.
Mtodo:
Descrio:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
ctrObject - OId do tipo de objeto
Exemplos:
SiriusColonyCursor ( )
Construtor da classe: cria uma estrutura para armazenar um conjunto de
colnias recuperadas em uma consulta. O conjunto de colnias
percorrido atravs de cursores definidos para esta estrutura.
Obs: a colnia identificada pelo nome de seu tipo e pelo OId do objeto
que a constringe.
Parmetros:
Exemplos:
Mtodo:
vResult->SearchCHDTypes( contId );
Mtodo:
void SearchOpenColonies ( )
Descrio:
void SearchCHDTypes ( )
Parmetros:
Descrio:
Parmetros:
Exemplos:
Exemplos:
vResult->SearchOpenColonies( );
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
ctrObject - OId do objeto
Exemplos:
);
vResult->SearchColony( EuropeId );
Mtodo:
Mtodo:
bool EndOfColonies ( )
Descrio:
Descrio:
Parmetros:
Parmetro de entrada:
colName - nome do tipo de colnia
Parmetros:
Retorno:
Exemplos:
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetro de retorno:
ctrObject - OId do objeto que constringe a colnia. O parmetro default
= Null pode ser utilizado quando feita busca de tipos de colnias, pois
estes podem ser identificados apenas por seus nomes.
Retorno:
SString - nome do tipo da colnia
Exemplos:
Mtodo:
~SiriusColonyCursor ( )
Descrio:
Destrutor da classe
Classe SiriusError
A classe SiriusError destina-se ao tratamento de erros da API, numa abordagem similar ao
tratamento de excees disponvel na biblioteca padro da linguagem C++. Na implementao
da API, a ocorrncia de um erro, ou de uma situao que pode gerar inconsistncia na base,
gera uma exceo que pode ser tratada na aplicao atravs dos comandos try e catch da
linguagem C++.
Mtodo:
SErrorId GetErrorId ( )
Descrio:
Parmetros:
Retorno:
SErrorId - identificador do erro
Exemplos:
Mtodo:
SString GetErrorMessage ( )
Descrio:
Parmetros:
Retorno:
SString - mensagem de erro
Exemplos:
Mtodo:
~SiriusError( )
Descrio:
Destrutor da classe
Classe SIRIUS
Esta classe responsvel por operaes de interface com o gerenciador de dados. Um objeto
da classe SIRIUS representa uma conexo com a base de dados.
Mtodo:
SIRIUS ( )
Descrio:
Construtor da classe
Mtodo:
~SIRIUS ( )
Descrio:
Destrutor da classe
Mtodo:
Descrio:
Parmetros:
Parmetros de entrada:
databaseAlias - alias que identifica a base de dados
username - nome do usurio
password - senha do usurio
Exemplos:
Mtodo:
int BeginTransaction ( )
Descrio:
Parmetros:
Retorno:
int - identificador da transao
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
transId - identificador da transao
Exemplos:
Mtodo:
Descrio:
Parmetros:
Parmetro de entrada:
transId - identificador da transao
Exemplos:
Mtodo:
void Disconnect ( )
Descrio:
Parmetros:
Exemplos:
base->Disconnect( );
Error Id
Error Message
SYSTEM_OBJECT
UNKNOWN_TYPE
UNKNOWN_OBJECT
UNKNOWN_COLONY_TYPE
UNKNOWN_COLONY
UNKNOWN_ATTRIBUTE
UNKNOWN_VALUE
UNDEFINED_COLONY
UNDEFINED_IDENTIFIER
CLOSED_COLONY
TRANSIENT_OBJECT
DUPLICATED_NAME
DUPLICATED_ATTRIBUTE
DUPLICATED_IDENTIFIER
DUPLICATED_VALUE
DUPLICATED_COLONY_TYPE
DUPLICATED_COLONY
TYPE_MISMATCH
VALUES_OVERFLOW
CHD_ERROR