Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introduc¸a˜o a` Organizac¸a˜o de Arquivos: Aula 8 Departamento de Cieˆncia da Computac¸a˜o Instituto de Cieˆncias Exatas Universidade de Bras´ılia 1 / 38 Suma´rio Conceitos Ba´sicos sobre Estrutura de Arquivos 1 Arquivo Stream 2 Organizac¸a˜o por Campos 3 Organizac¸a˜o por Registros 4 Acesso a Registros 5 Acesso a Arquivos 6 Metadados 7 Portabilidade e Padronizac¸a˜o 2 / 38 Acesso a` Arquivos Vs Organizac¸a˜o de Arquivos Pode-se organizar um arquivo em registros de: tamanho fixo tamanho varia´vel O acesso pode ser: direto sequencial 3 / 38 Acesso a` Arquivos Vs Organizac¸a˜o de Arquivos Acesso Direto em Arquivos Acesso direto em registro de tamanho fixo: E´ imediato e implementa´vel. Func¸a˜o fseek() Acesso direto em registro de tamanho varia´vel: Precisa-se conhecer a PRR em bytes. Implementado via uma estrutura de ı´ndice. A LP C permite acesso a qualquer byte, e o programador pode implementar acesso direto a registros de tamanho varia´vel. A LP Pascal exige que o arquivo tenha todos os elementos do mesmo tipo e tamanho.(Logo, o acesso direto e´ de dif´ıcil implementac¸a˜o em pascal por exemplo). 4 / 38 Acesso a` Arquivos Vs Organizac¸a˜o de Arquivos Formas Mais Complexas de Organizac¸a˜o de Arquivos Vamos analisar algumas formas mais complexas de organizac¸a˜o de arquivos, em que os arquivos sa˜o mais do que simplesmente um conjunto de registros organizados em campos. 5 / 38 Tipo Abstrato de Dados Tipo Abstrato de Dados (TAD) Objetivo: Focar no conteu´do da informac¸a˜o, ao inve´s de no seu formato f´ısico. Antigamente Os computadores processavam: registros de carto˜es perfurados e fitas magne´ticas. Memo´ria limitada. Linguagens de Programac¸a˜o primitivas. Atualmente E´ poss´ıvel: Processar e transmitir som. Processar e mostrar imagens. Processar e interagir com documentos. Este tipo de informac¸a˜o na˜o se ajusta bem a` meta´fora de dados armazenados como sequeˆncias de registros separados em campos. 6 / 38 Tipo Abstrato de Dados TAD Para muitas aplicac¸o˜es e´ interessante conhecer: Seus objetos; Suas propriedades; Operac¸o˜es realizadas dobre tais objetos; Na˜o interessa a maneira como esses objetos ficam armazenados fisicamente (tratar como transparente!). TAD permite: Descrever os objetos, suas propriedades e operac¸o˜es. Ter uma visa˜o dos dados orientada a aplicac¸a˜o. Que a organizac¸a˜o e o acesso aos dados seja conforme a aplicac¸a˜o os veˆ, e na˜o como os dados esta˜o fisicamente armazenados. 7 / 38 Tipo Abstrato de Dados Implementando TAD Visa˜o de um TAD: Os detalhes da implementac¸a˜o dos objetos sa˜o encapsulados (escondidos do programador). Visa˜o do programador: nome do tipo e lista de operac¸o˜es dispon´ıveis. No arquivo existem informac¸o˜es que: Descrevem os objetos nesse arquivo. Tais informac¸o˜es sa˜o usadas pelo software de acesso para entender esses objetos. Poupam o programador de entender como os dados esta˜o fisicamente armazenados. 8 / 38 Tipo Abstrato de Dados Arquivo Auto-Descritivo E´ um arquivo com registro cabec¸alho contendo todas as informac¸o˜es que o descreve: Nu´mero de campos por registro; Nome de cada campo; Tipo de cada campo; Nu´mero de registros efetivos, etc. . . Permite o uso de programas gene´ricos: um programa gene´rico pode ler ou escrever “qualquer” arquivo autodescrito. Observac¸a˜o Temos uma Contrapartida: os programas precisam ser mais sofisticados. 9 / 38 Metadados Exemplo Um astroˆnomo, que estuda imagens geradas por telesco´pios, precisa projetar uma estrutura de arquivo para guardar as representac¸o˜es digitais dessas imagens. Podera˜o existir milhares de imagens, a serem guardadas em arquivos individuais. Dados de interesse: as imagens. Pore´m, va´rias informac¸o˜es sobre cada imagem devem estar dispon´ıveis: a localizac¸a˜o no ce´u, a data de obtenc¸a˜o, o telesco´pio utilizado, etc. . . Esse tipo de informac¸a˜o e´ chamado de Metadado, isto e´, sa˜o dados que descrevem os dados prima´rios em um arquivo. 10 / 38 Metadados Metadados Sa˜o dados descrevendo dados: Descric¸o˜es de dados prima´rios num arquivo. E´ bastante conveniente armazenar os metadados junto aos dados prima´rios. Podem ser implementados via registro cabec¸alho. Podem ser inseridos em qualquer arquivo cujos dados prima´rios precisam de suporte de informac¸a˜o: Me´todos espec´ıficos usando metadados, precisam ser empregados para interpretar os dados prima´rios. Exemplo do Uso de Metadados Imagens me´dicas (DICOM – Data Image Communication). Imagens astronoˆmicas (FITS – Flexible Image Transport System). 11 / 38 DICOM (Data Image Communication) DICOM Possui aplicac¸o˜es em imagens me´dicas; A rede e´ o grande “gargalo” da grande maioria dos sistemas de imagens me´dicas; Formato DICOM oferece suporte ao sistema Open Communication Standards (MUST); Grande variedade de produtos na a´rea me´dica utilizam o formato DICOM ; DICOM esta´ se tornando o formato padra˜o de imagens me´dicas. 12 / 38 DICOM 13 / 38 Imagens formato DICOM 14 / 38 FITS (Flexible Image Transport System) FITS Arquivo: <cabec¸alho em ascii> < imagem em bina´rio > Cabec¸alho Cabec¸alho: uma colec¸a˜o de blocos de 2880bytes. Cada bloco tem registros de 80 bytes. Cada registro tem um u´nico metadados com a notac¸a˜o: < keyword = value > / < comenta´rios > Exemplo Exemplo: BITPIX = 16/bits per pixel NAXIS = 2/number of axes DATE = ‘22/09/1989’/date file written END 15 / 38 FITS Observac¸a˜o Uma imagem FITS e´ um bom exemplo de um tipo abstrato de dados: o dado prima´rio na˜o tem sentido sem a informac¸a˜o contida no cabec¸alho. Metadados + dados prima´rios = TAD Observac¸a˜o 2 E´ importante observar que me´todos espec´ıficos para o FITS devem ser usados para converter a informac¸a˜o em dados inteleg´ıveis. E´ importante observar que um arquivo com metadados na˜o e´ necessariamente uma TAD. Para ser TAD os metadados devem dar informac¸a˜o de como MANIPULAR e/ou INTERPRETAR os dados prima´rios. Um arquivo pode ter metadados sobre informac¸a˜o adicional (por exemplo, data de criac¸a˜o) que na˜o definem como manipular ou interpretar os dados. 16 / 38 FITS Figura: Imagem FITS: presenc¸a de metadados 17 / 38 Metadados Exemplo de Metadados e TDA Imagem de televisa˜o colorida: E´ um arranjo retangular de pontos coloridos (pixels) que sa˜o exibidos no v´ıdeo. Metadados para descrever uma imagem de televisa˜o (Color Raster Image) sa˜o: Nu´mero de pixels por linha e nu´mero de linhas (Dimensa˜o da imagem). Nu´mero de bits usados para descrever cada pixel. Palette (tabela/espac¸o de cores): Indica que cor deve ser associada a cada valor de pixel na imagem . 18 / 38 Metadados Exemplo de Metadados e TDA Quando uma imagem e´ tratada como um Tipo Abstrato de Dado, poss´ıveis operac¸o˜es associadas sa˜o: Exibir uma imagem numa janela do v´ıdeo. Associar uma imagem a uma particular paleta de cores. Sobrepor uma imagem com outra (Composic¸a˜o de Imagens). Exibir va´rias imagens em sucessa˜o ao longo do tempo (Produzir Animac¸a˜o). Uma Color Raster Image e´ um exemplo de tipo de objetos de dado que requer mais do que a tradicional estrutura de campos/registros. 19 / 38 Metadados Figura: Color Raster Image 20 / 38 Mistura de Tipos de Objetos em um U´nico Arquivo Exemplo Um astroˆnomo pode desejar guardar, num mesmo arquivo, va´rias imagens FITS (metadados + dados) juntamente com algumas notas de laborato´rio, associadas a` imagem, escritas por ele. Nesse caso o arquivo pode ser visto como uma mistura de objetos cujo conteu´do pode sermuito diferente. As estruturas de arquivos vistas ate´ agora na˜o suportam adequadamente esses casos. 21 / 38 Mistura de Tipos de Objetos em um U´nico Arquivo Arquivos com muitos objetos diferentes: Primeira soluc¸a˜o Arquivo com palavra-chave, metadados e registro de tamanho varia´vel para conter cada objeto: Aqui o programa de acesso e´ constru´ıdo contendo: O conhecimento da ordem de cada objeto no arquivo, por exemplo, < cabec¸alho >< documento >< imagem >< cabec¸alho > O conhecimento do que e´ cada objeto. O arquivo precisa conter exatamente os objetos descritos e na ordem especificada. O acesso precisa ser sequencial (acesso a uma dada imagem em arquivos grandes fica muito lento). 22 / 38 Mistura de Tipos de Objetos em um U´nico Arquivo Arquivos com muitos objetos diferentes: Segunda Soluc¸a˜o Usa-se uma tabela de ı´ndices, onde cada entrada na tabela conte´m: Tag (identificando o objeto). PRR (posic¸a˜o relativa do objeto no arquivo). Tamanho do objeto em bytes. Permitem programas gene´ricos. Exemplo de tabela de ı´ndice com tags: 23 / 38 Mistura de Tipos de Objetos em um U´nico Arquivo Uso da Tag O uso de tag permite: Aplicac¸o˜es usando metadados. Misturas de objetos diferentes. Os registros agora podem ser diferentes: Podem estar desordenados. Mas esta liberdade tem prec¸o: Temos que escrever e ler tags. Temos que escrever e ler os dados (propriamente ditos). Tais dados podem ter diferentes estruturas e formatos. Aumento da complexidade! 24 / 38 Mistura de Tipos de Objetos em um U´nico Arquivo Estruturas Tagged Estruturas Tagged sa˜o comuns hoje em dia: TIFF (Tagged Image File Format): uso popular no armazenamento de imagens. HDF (Hierachical Data Format): padra˜o utilizado no armazenamento de dados cient´ıficos, incluindo imagens. SGML (Standard General Markup Language): linguagem para descrever a estrutura de documentos e para definic¸a˜o de tags utilizados marcar (mark up) a estrutura. HTML – (HyperText Markup Language): utilizada para descrever documentos da World Wide Web (WWW). 25 / 38 Mistura de Tipos de Objetos em um U´nico Arquivo Questo˜es Para um programa que precisa acessar objetos em um tagged file, algumas perguntas: 1 Onde encontrar um objeto ja´ armazenado? 2 Onde armazenar um objeto no arquivo? 3 Como e onde armazenar sua tag? 4 Dado que os objetos sa˜o diferentes, como determinar o me´todo correto para armazenar e recuperar tais objetos? As questo˜es 1 e 2 dizem respeito a tabela de ı´ndices e sera˜o abordadas no Cap´ıtulo 6. A questa˜o 3 e´ abordada nesse cap´ıtulo. 26 / 38 Acesso a Arquivo Orientado a Objeto Acesso a Arquivo Orientado a Objeto A aplicac¸a˜o na˜o tem acesso ao formato real dos dados: A especificac¸a˜o da tag ja´ vem acompanhada da maneira de ler e escrever nesse arquivo. O procedimento de leitura ou escrita usa os dados da tag para acessar o arquivo real. A aplicac¸a˜o se preocupa em manipular o objeto em termos lo´gicos: Na˜o interessa como fisicamente o objeto e´ armazenado. O objeto e´ um TAD com suas operac¸o˜es lo´gicas. E´ delegado a outros mo´dulos a responsabilidade de traduzir de/para o formato f´ısico do objeto. 27 / 38 Acesso a Arquivo Orientado a Objeto Formato de Arquivos Etiquetados E´ um meio de implementar uma visa˜o conceitual de organizac¸a˜o e acesso. Na especificac¸a˜o da tag vem: A especificac¸a˜o dos me´todos de leitura e escrita. O enfoque orientado a objeto pressupo˜e: separac¸a˜o da especificac¸a˜o do TAD do correspondente formato de arquivo. 28 / 38 Acesso a Arquivo Orientado a Objeto Exemplo Seja uma aplicac¸a˜o que trabalha com imagens em RAM de 8 bits precisa processar uma colec¸a˜o de arquivos. Alguns arquivos esta˜o armazenados no padra˜o FITS e outros em TIFF. Adotando a orientac¸a˜o a objetos nessa aplicac¸a˜o, o programa utilizaria uma rotina que leria os objetos para a memo´ria no formato esperado (8 bits). A rotina de leitura, por sua vez, estaria encarregada de, a cada arquivo, invocar o procedimento correto para conversa˜o daquele arquivo no formato 8-bits necessa´rio. Tagged files sa˜o uma maneira de implementar esse tipo de organizac¸a˜o de arquivos, com esse tipo de acesso ao arquivo. A especificac¸a˜o de uma tag pode ser acompanhada de me´todos para leitura, escrita, etc., do objeto correspondente, de acordo com as necessidades de uma aplicac¸a˜o. 29 / 38 Portabilidade e Padronizac¸a˜o Portabilidade e Padronizac¸a˜o Ao se criar um arquivo, deve se pensar que ele possa ser acessado por: Diferentes computadores com diferentes S.O. Diferentes programas de aplicac¸a˜o. Nesse contexto o arquivo e´ compartilha´vel. O compartilhamento de um arquivo e´ afetado por dois fatores: Portabilidade. Padronizac¸a˜o. 30 / 38 Portabilidade e Padronizac¸a˜o Fatores Que Afetam Portabilidade Diferenc¸as entre sistemas operacionais: O formato final de um arquivo pode variar em func¸a˜o de diferenc¸as entre sistemas operacionais: Por exemplo, o UNIX e DOS tratam diferentemente as marcas de fim-de-linha e fim-de-arquivo. Diferenc¸as entre linguagens: O layout f´ısico de um arquivo pode ser restringido pela linguagem de manipulac¸a˜o: Em Pascal todos os registros de um arquivo precisam ser do mesmo tamanho. Em C pode-se misturar registros de tamanhos diferentes. Diferenc¸as entre arquitetura de ma´quinas: Ma´quinas diferentes podem representar bina´rios diferentemente (independentes da LP). Armazenam registros diferentemente. 31 / 38 Portabilidade e Padronizac¸a˜o Exemplo Se nosso arquivo de clientes possui 3210 registros, esse nu´mero, em uma Sun 3, usando C, estara´ fisicamente guardado em hexadecimal como 0020, enquanto que num IBM PC ou num VAX, o mesmo valor sera´, fisicamente, 2000. Similarmente, o valor 500000.00010 seria armazenado em hexa como 1dcd6500 na Sun, e como 0065cd1d no PC e no VAX. 32 / 38 Portabilidade e Padronizac¸a˜o Fatores que Afetam Portabilidade Diferenc¸as entre Arquitetura de Ma´quinas: Representam textos diferentemente: Ma´quinas que usam a tabela EBCDIC (Extended Binary-Coded Decimal Interchange Code): codificac¸a˜o de caracteres criado pela IBM. Ma´quinas que usam a tabela ASCII: usado pela maioria das ma´quinas. Ha´ ma´quinas que suportam ambos. Representac¸a˜o de diferentes conjuntos de caracteres: Caracteres pro´prios de uma l´ıngua: portugueˆs, japoneˆs, franceˆs, etc . . . Criou-se um novo padra˜o: Unicode de 16 bits. 33 / 38 Portabilidade e Padronizac¸a˜o Obtendo Portabilidade Algumas diretrizes para tratar do problema sa˜o: Escolha e mantenha um formato de registro f´ısico padra˜o. (FITS, TIFF). Escolha uma codificac¸a˜o bina´ria padra˜o para os elementos de dados. (EBCDIC, ASCII, XDR (External Data Representation) e formatos padra˜o IEEE). Estude os casos de conversa˜o de textos e nu´meros. 34 / 38 Pro´xima aula Pro´xima Aula Organizando Arquivos Para Desempenho 35 / 38 Co´digos Co´digos Os co´digos foram retirados de File Structures: An Object-Oriented Approach with C ++, 3rd Edition e apresentam a descric¸a˜o das principais classes. Para a versa˜o escrita em C, consulte File Structures, 2nd Edition. recordFile.cpp: Classe que suporta operac¸o˜es de leitura e escrita de maneira gene´rica, isto e´, lida com objetos diferentes sem necessitar criar diferentes verso˜es da classe. 36 / 38 Co´digos I 1 //Template c l a s s Record F i l e 2 3 #i n c l u d e ” b u f f i l e . h” 4 #i n c l u d e ” i o b u f f e r . h” 5 6 // Template c l a s s to suppo r t d i r e c t r ead and w r i t e o f r e c o r d s 7 // The temp la t e paramete r RecType must suppo r t the f o l l o w i n g 8 // I n t Pack ( Buf fe rType &); packr e c o r d i n t o b u f f e r 9 // I n t Unpack ( Buf fe rType & ) ; unpack r e c o r d from b u f f e r 10 11 12 template <c l a s s RecType> 13 c l a s s R e c o r d F i l e : p u b l i c B u f f e r F i l e 14 { 15 p u b l i c : 16 i n t Read ( RecType& r e c o r d , i n t r e c a d d r =−1); 17 i n t Write ( const RecType & r e c o r d , i n t r e c a d d r =−1); 18 R e c o r d F i l e ( I O B u f f e r & b u f f e r ) : B u f f e r F i l e ( b u f f e r ) {} 19 } ; 20 21 // temp la t e method bod i e s 22 23 24 25 26 template <c l a s s RecType> 27 37 / 38 Co´digos II 28 29 i n t R e c o r d F i l e<RecType> : : Read ( RecType & r e c o r d , i n t r e c a d d r =−1) 30 { 31 i n t wr i teAddr , r e s u l t ; 32 w r i t e Addr = B u f f e r F i l e : : Read ( r e c a d d r ) ; 33 i f ( ! w r i t e A d d r ) r e t u r n −1; 34 r e s u l t = r e c o r d . Unpack ( B u f f e r ) ; 35 i f ( ! r e s u l t ) r e t u r n −1; 36 r e t u r n w r i t e A d d r ; 37 } 38 39 template <c l a s s RecType> 40 i n t R e c o r d F i l e<RecType> : : Wr i te ( const RecType & r e c o r d , i n t r e c a d d r =−1) 41 { 42 i n t r e s u l t ; 43 r e s u l t = r e c o r d . Pack ( B u f f e r ) ; 44 i f ( ! r e s u l t ) r e t u r n −1; 45 r e t u r n B u f f e r F i l e : : Wr i te ( r e c a d d r ) ; 46 } Co´digo 1: recordFile.cpp 38 / 38
Compartilhar