Você está na página 1de 7

MetaTree Biblioteca para Armazenar e Gerenciar Dados Genricos em Arquivo, utilizando rvore Binria Genrica Balanceada

Fbio Silveira Vidal fvidal@unitins.br

Fredson Vieira Costa fredsoncosta@hotmail.com

Claudiomiro Andr andrec@unitins.br

Departamento de Informtica Universidade do Tocantins UNITINS Endereo da UNITINS

Resumo: Este artigo apresenta uma biblioteca para C++ que possui funes que armazenam e gerenciam dados genricos em unidade de massa usando a estrutura de dados denominada rvore Binria, balanceando a mesma para atingir melhor performance na busca de dados. Esta biblioteca denominada MetaTree foi implementada usando a ferramenta de desenvolvimento Borland C++ Builder 5.0 Enterprise Sute, o qual proporcionou melhor performance ao sistema. Palavras-chave: Biblioteca para C++, rvore Binria, Dados Genricos, Borland C++ Builder Enterprise Sute.

MetaTree Biblioteca para Armazenar e Gerenciar Dados Genricos em Arquivo, utilizando rvore Binria Genrica Balanceada 1 Introduo Uma das dificuldades em armazenar e gerenciar dados em arquivo a forma de acesso aos registros. A busca feita seqencialmente, o que acarreta a uma performance extremamente baixa, em se tratando de milhares de registros em um arquivo. Outra dificuldade encontrada quanto forma de excluir um registro fisicamente, pois no existe um meio de excluir bytes de um arquivo. O mximo que pode ser feito, construir uma estrutura que possa gerenciar se o registro est em uso; em caso negativo, o registro ser considerado excluso do arquivo do ponto de vista do sistema, mas continua ocupando espao na unidade de massa, diminuindo a performance do sistema que est utilizando o arquivo. O propsito deste trabalho desenvolver uma biblioteca que permita manipular registros contendo dados genricos, utilizando uma rvore binria balanceada o que trar uma otimizao no sistema de busca. Este trabalho est organizado da seguinte maneira: no captulo 2, ser abordado o domnio de aplicao (armazenamento e gerenciamento de dados), que abordar principalmente, a busca de dados em arquivos. No captulo 3, dada uma viso geral sobre bibliotecas para C++, no captulo 4 sobre o Borland C++ Builder 5.0 Enterprise Sute, escolhido para ser utilizado para implementao desta biblioteca. No captulo 5, so definidas as estruturas genricas, as funes que compem a biblioteca e a metodologia utilizada para suas respectivas implementaes. No captulo 6, so apresentados os resultados obtidos atravs deste trabalho. 2 Domnio de Aplicao O domnio de aplicao o armazenamento e gerenciamento de dados em unidade de massa, no qual ser usada uma estrutura de dados chamada rvore Binria Genrica Balanceada. Os arquivos fornecem um meio de armazenamento de informaes a longo prazo. Em sistemas informatizados, as informaes, compostas pelos bits 1 e 0 (dgitos binrios), so armazenadas em memrias. Para que uma grande quantidade de dados possa ser armazenada, como, por exemplo: um sistema operacional e os aplicativos, necessria uma forma de armazenamento de baixo custo no voltil (em que as informaes e os dados possam ser

armazenados por longos perodos), como, por exemplo, os discos flexveis (disquete de 3 ), os discos rgidos (Hard Disk), os CD-ROMs, etc. Como a memria em disco est fora do microprocessador, os sistemas informatizados devem executar um conjunto de atividades para obter as informaes gravadas. Essas informaes esto armazenadas em pastas e arquivos, do mesmo modo que feito em um escritrio. Essa organizao dos dados como pastas suspensas e arquivos uma tentativa de organizar o armazenamento das informaes. A manipulao de arquivos em C se divide das seguintes formas: Arquivo Binrio, Arquivo de Acesso Seqencial e Arquivo de Acesso Aleatrio, como descritos na Tabela 1: Forma de manipulao Arquivo Binrio Descrio aquele em que os dados so armazenados byte a byte. O programador organiza e acessa os dados da forma que quiser. Este tipo de arquivo permite maior flexibilidade, mas por outro lado exige mais do programador, pois o cdigo fonte para isso deve ser mais depurado. Arquivo de Acesso Seqencial aquele escrito linha a linha, ou seja, uma linha de cada vez. Arquivo de Acesso Aleatrio aquele cujo o contedo pode ser lido ou gravado em qualquer ordem. Neste tipo de arquivo temos os registros que so conjuntos organizados de dados. Tabela 1: Formas de manipulao de arquivos Aps serem apresentados os conceitos relativos ao Domnio de Aplicao, conclui-se que a forma de armazenamento a ser utilizada ser a de Arquivo Binrio, pois apesar de ser uma forma mais complexa de ser implementada, a mais adequada para o armazenamento de registros. A seguir ser apresentada uma viso geral de bibliotecas para C++ que serviu como suporte para a construo da MetaTree Biblioteca para Armazenar e Gerenciar Dados Genricos em Arquivo, utilizando rvore Binria Genrica Balanceada. 3 Borland C++ Builder 5.0 Enterprise Sute

O Borland C++ Builder (BCB) um ambiente de desenvolvimento de aplicaes orientado a objeto que permite desenvolver sistemas para alguns sistemas operacionais, por enquanto somente da famlia Windows da Microsoft. A linguagem de programao usada no BCB o C++; portanto, aconselhvel que aquele que pretende se aventurar no mundo do BCB conhea um pouco de C++, alm de tambm estar familiarizado com a linguagem C. A razo da criao da linguagem C foi a necessidade de um ferramenta poderosa para escrever programas, que utilizasse os recursos de mquina de uma forma mais fcil que a linguagem de montagem: o assembly. A linguagem C derivada da linguagem ALGOL 68 e foi baseada na linguagem B d Ken Thompson. A grande aceitao dessa linguagem decorre da facilidade de conciliar o poder de programao de baixo nvel com o seu alto grau de portabilidade. O BCB uma linguagem de Nvel Mdio, exatamente pelo fato de usar o C++, apesar de viabilizar facilmente o desenvolvimento de aplicaes de diversos tipos, tais como: banco de dados, Internet etc. Quando falamos em C++, s vezes lembramos dos velhos compiladores para DOS da Borland ou da Microsoft, como Borland C++ e Microsoft Visual C++, entre outros, mas este poderoso em relao aos demais e pode ajudar na construo de uma aplicao rpida e sem muito esforo. 4 Bibliotecas para C++ Bibliotecas so arquivos que contm funes que so usadas comumente por vrios sistemas desenvolvidos em um certo ambiente. A grande vantagem de se usar bibliotecas que no h a necessidade de se reescrever um grande conjunto de funes que so utilizadas por quase todos os sistemas que um ou vrios programadores desenvolvem. Durante o processo de converso de um programa-fonte C++ em um programa executvel, o programa compilado linkeditado junto com os arquivos de biblioteca para produzir o programa executvel final. Assim, o programa final ser formado a partir de dois ou mais arquivos separados, mesmo que o programa-fonte original esteja em um nico arquivo. O

programa-fonte deve, portanto, incluir declaraes tanto para funes da biblioteca como para funes definidas pelo programador, que esto definidas em um arquivo separado. Um modo de fornecer as declaraes de funes de biblioteca necessrias escrev-las explicitamente, como nos programas em mltiplos arquivos. Isso pode ser montono, contudo, uma vez que um programa pequeno pode usar vrias funes de biblioteca o mximo possvel. O C++ nos oferece um modo inteligente de fazer isso, colocando as declaraes das funes de biblioteca necessrias em arquivos-fontes especiais chamados arquivos header. A maioria dos compiladores C++ inclui vrios arquivos header, cada qual contendo declaraes funcionalmente relacionadas. Por exemplo, stdio.h um arquivo header que contm declaraes para rotinas de entrada/sada, math.h contm declaraes para certas funes matemticas e assim por diante. Os arquivos header podem conter tambm outras informaes relacionadas com o uso de funes de biblioteca, como definies de constantes simblicas. A independncia da mquina um vantagem significativa no uso de funes de biblioteca e arquivos header. Dessa forma, as caractersticas dependentes da mquina podem ser fornecidas como funes de biblioteca, como constantes caracter ou como macros includas no arquivo header. Um programa C++ tpico executar, portanto, em diferentes computadores sem alterao, uma vez que as funes de biblioteca e os arquivos header apropriadas so utilizados. A portabilidade resultante dessa abordagem contribui para a popularidade do C. 5 rvores Uma rvore uma coleo finita de n > -1 nodos. Se n = 0, dizemos que a rvore nula; caso contrrio; uma rvore apresenta as seguintes caractersticas: Existe um nodo especial denominado raiz; Os demais so particionados em T1, T2, ..., Tk estruturas disjuntas de rvores; As estruturas T1, T2, ..., Tk denominam-se subrvres.

5.1 rvores Binrias Um rvore binria um conjunto finito de elementos que est vazio ou particionado em trs subconjuntos disjuntos. O primeiro subconjunto contm um nico elemento, chamado raiz da rvore. Os outros dois subconjuntos so em si mesmos rvores binrias, chamadas subrvores

esquerda e direita da rvore original. Uma subrvore esquerda ou direita pode estar vazia. Cada elemento de uma rvore binria chamado n da rvore. Um mtodo convencional de ilustrar uma rvore binria aparece na Figura 1. Essa rvore consiste em nove ns com A como sua raiz. Sua subrvore esquerda est enraizada em B e sua subrvore direita, em C. Isso aparece indicado pelas duas ramificaes que saem de A: para B, no lado esquerdo e para C, no lado direito. Por exemplo, a subrvore esquerda, da rvore binria enraizada em C e a subrvore direita da rvore binria enraizada em E esto, ambas, vazias. As rvores binrias enraizadas em D, G, H e I tm subrvores direita e esquerda vazias. Se A a raiz de uma rvore binria e B a raiz de sua subrvore direita ou esquerda, ento diz-se que A o pai de B e que B o filho direito ou esquerdo de A.

A B D G E H C F I

Figura 1 Exemplo de uma rvore Binria 5.2 rvore Binria Balanceada rvore Binria Balanceada uma rvore, na qual o nmero de nodos das duas subrvores (direita e esquerda) so iguais ou possui a diferena de no mximo uma unidade. 6 A Biblioteca MetaTree A Biblioteca MetaTree possui um conjunto de funes que permitiro ao programador armazenar e manipular registros em arquivos de forma genrica, usando a estrutura de rvore Binria, a qual sempre estar balanceada. Para isso ser necessrio construir uma estrutura chamada TTreeNode que possibilite armazenar dados de forma genrica e a navegao entre os mesmos atravs da rvore Binria. 6.1 A Estrutura TTreeNode

Uma Estrutura, na Linguagem de Programao C++ Builder, uma declarao de um novo tipo de dado; no caso em questo esse novo tipo ser utilizado para manipular os nodos da rvore. A estrutura acima mencionada descrita na tabela 1: Nome do Campo IsBusy Father Left Right Data Tipo do Campo Nmero Inteiro Utilidade Flag que indica se o registro est em uso.

Nmero Inteiro Longo Informa o pai do registro em questo. Nmero Inteiro Longo Informa o filho da esquerda do registro em questo. Nmero Inteiro Longo Informa o filho da direita do registro em questo. Ponteiro de Caracteres Armazenar os dados do registro.

Tabela 1: Definio da Estrutura TTreeNode 6.2 Definio das Funes Implementadas na Biblioteca MetaTree A primeira funo a ser implementada deve ser a de criao de um nodo