Sie sind auf Seite 1von 52

Arquivos

Estruturas de Dados II Vanessa Braganholo

Entidades

Aplicaes precisam armazenar dados sobre as mais diversas entidades, que podem ser concretas ou abstratas.

Funcionrio de uma empresa (concreto) Carros de uma locadora de veculos (concreto) Contas-corrente dos clientes de um banco (abstrato) Ligaes telefnicas dos clientes de uma empresa de telefonia (abstrato)

Atributos

Cada uma dessas entidades pode ser descrita por um conjunto de atributos.

Funcionrio: nome, CPF, data-nascimento, salrio Carro: marca, modelo, ano-fabricao, placa Conta-Corrente: agncia, conta, saldo Ligaes Telefnicas: data, origem, destino, durao

Os atributos tambm podem ser chamados de campos

Registros

Indivduos dessas entidades possuem um valor para cada um desses atributos (chamados de pares atributo-valor). Um conjunto de pares atributo-valor que identifica um indivduo de uma entidade chamado de registro.

Exemplos de Registros
Funcionrio: <nome, Joo>, <CPF, 012345678-90>, <datanascimento, 10/04/1980>, <salrio, 3000> Carro <marca, Honda>, <modelo, Fit>, <ano-fabricao, 2010>, <placa, XYZ0123> Conta-Corrente <agencia, 0123>, <conta, 123456>, <saldo, 2000> Ligao Telefnica <data, 01/07/2010>, <origem, 21-2598-3311>, <destino, 21-2589-3322>, <durao, 1036>

Tabela

Uma tabela um conjunto ordenado de registros. Uma tabela pode ser armazenada em memria principal ou em memria secundria (disco). Nesse segundo caso, tambm costuma ser chamada de arquivo.

Exemplo: Arquivo de Funcionrios

Nome Joo

CPF

Data-Nascimento

Salrio 3000

012345678-90 10/04/1980

Maria Lcia

234567890-12 25/07/1978 345678901-23 27/04/1981

5000 1500

IMPORTANTE: Todos os registros de uma mesma tabela possuem a mesma estrutura (mesmo conjunto de atributos/campos).

Problema: encontrar registros

Problema comum de diversas aplicaes: encontrar um ou mais registros em uma tabela.

Encontrar o empregado Maria Encontrar todos os empregados que ganham 3000 Encontrar todos os empregados que nasceram em 27/04/1981

Conceito de Chave

Dados usados para encontrar um registro: chave Chave: subconjunto de atributos que identifica um determinado registro.

Chave Primria e Secundria

Chave primria: subconjunto de atributos que identifica unicamente um determinado registro. Exemplo: CPF do funcionrio ou RG do funcionrio

Na hiptese de uma chave primria ser formada por uma combinao de campos, essa combinao deve ser mnima (no deve conter campos suprfulos) Eventualmente, podemos encontrar mais de uma combinao mnima de campos que forma uma chave primria

Chave secundria: subconjunto de atributos que identificam um conjunto de registros de uma tabela. Exemplo: Nome do funcionrio

Tabelas

Aplicaes reais lidam com vrias tabelas, cada uma delas representando uma entidade Uma aplicao de controle bancrio precisaria de quais tabelas?

Aplicao Bancria

Uma aplicao de controle bancrio precisaria de quais tabelas?

Cliente Agncia Conta-Corrente

Certa redundncia necessria

Neste caso, necessrio correlacionar os dados, para que seja possvel saber que conta pertence a que agncia, e que conta pertence a que cliente Para isso, usual repetir algum dado (um cdigo,por exemplo) no outro arquivo.

Cliente: CodCliente, Nome, CPF, Endereo Agncia: CodAgencia, NumeroAgencia, Endereco Conta-Corrente: CodAgencia, CodCliente, Saldo

Certa redundncia necessria

Neste caso, necessrio correlacionar os dados, para que seja possvel saber que conta pertence a que agncia, e que conta pertence a que cliente Para isso, usual repetir algum dado (um cdigo,por exemplo) no outro arquivo.

Cliente: CodCliente, Nome, CPF, Endereo Agncia: CodAgencia, NumeroAgencia, Endereco Conta-Corrente: CodAgencia, CodCliente, Saldo

Quais so as chaves primrias e secundrias deste exemplo?

Aplicao Financeira

Chaves primrias:

Cliente: CodCliente Agncia: CodAgencia Conta-Corrente: CodAgencia E CodCliente

Chaves primrias alternativas:


Cliente: CPF Agncia: NumeroAgencia OU Endereco Conta-Corrente: --

Chaves secundrias:

Cliente: Nome Agncia: -Conta-Corrente: Saldo

Discusso sobre chaves

Por qu no usar CPF como chave primria de cliente? Por qu os atributos artificiais (cdigo)?

Exerccio
Deseja-se automatizar uma locadora de automveis. A locadora possui filiais espalhadas por todo pas. Cada filial possui um cdigo que a identifica, um telefone e um endereo. Cada filial da locadora sedia um conjunto de veculos que ela aluga. O veculo identificado por um nmero sequencial que o distingue dos demais veculos da filial. Para o veculo importante saber a placa, data de vencimento do seguro, nome do modelo, nmero de portas e se possui ar-condicionado ou no. Quando um veculo alugado fechado um contrato de aluguel. Cada contrato possui um nmero identificador, uma data de sada do veculo, uma data de retorno provvel, para veculos ainda no retornados, e uma data de retorno efetivo, para veculos j retornados. O contrato feito para um veculo e um cliente. Para os clientes preciso armazenar seu nome, CPF, endereo, o telefone, bem como o nmero e data de expirao de seu carto de crdito.

Exerccio

Para o cenrio das locadoras, identificar:

Entidades Atributos Chaves primrias

Banco de Dados

Esse conjunto de arquivos pode ser considerado um banco de Dados?

Caractersticas de um Banco de Dados

Natureza auto-descritiva do sistema de banco de dados: banco de dados possui um catlogo onde esto descritas as estruturas e tipos de dados de cada tabela e suas restries ex. quais so as chaves primrias de cada tabela Isolamento entre os programas e os dados, e a abstrao dos dados: em programao com arquivos a estrutura dos arquivos embutida dentro das aplicaes. Isso no acontece quando se usa banco de dados. Suporte para as mltiplas vises dos dados: usurios diferentes podem ver pores diferentes dos dados Compartilhamento de dados e processamento de transaes multi-usurios

Caractersticas de um Banco de Dados

Natureza auto-descritiva do sistema de banco de dados: banco de dados possui um catlogo onde esto descritas as estruturas e tipos de dados de cada tabela e suas restries ex. quais so as chaves primrias de cada tabela Isolamento entre os programas e os dados, e a abstrao dos dados: em programao com arquivos a estrutura dos arquivos embutida dentro das aplicaes. Isso no acontece quando se usa banco de dados. Suporte para as mltiplas vises dos dados: usurios diferentes podem ver pores diferentes dos dados Compartilhamento de dados e processamento de transaes multi-usurios

NO O NOSSO FOCO NESSA DISCIPLINA!

Nveis de Organizao das tabelas/arquivos

Organizao Lgica dos dados: a viso que o usurio tem dos dados, com base em entidades, seus atributos e seus relacionamentos Organizao Fsica dos dados: a maneira pela qual as informaes ficam armazenadas nos dispositivos perifricos (disco, pen-drive, etc.)

Dependncia entre programas e dados

Os programas de computador so mais ou menos dependentes da organizao fsica dos dados Eles podem ser classificados em quatro categorias

Categoria 1: Programas Dependentes dos Dados

Programas tm acesso aos dados especificando endereos absolutos de clulas de armazenamento Se os dados mudarem de lugar, os programas que os acessam precisam ser modificados Ocorre nas chamadas de baixo nvel dos sistemas operacionais Exemplo: informao sobre espao livre em um arquivo em um sistema operacional pode ser guardada em um bloco particular do disco

Categoria 2: Independncia Fsica dos Dados

Programas acessam a memria pelo nome e no por endereo (memria primria), ou pela posio relativa ao incio do arquivo (memria secundria) O mapeamento (nome endereo) feito pelo sistema operacional Exemplo: programas escritos em linguagens de Terceira Gerao que s precisam conhecer a organizao lgica dos dados Programas dependem da estrutura lgica dos arquivos

Categoria 3: Independncia Lgica Parcial dos Dados

Programas desta categoria podem operar sobre diversos arquivos (com estruturas diferentes) sem serem modificados. Estes programas buscam a estrutura dos dados nas informaes disponveis no meio do armazenamento e fazem uma adaptao em tempo de execuo do programa. Caso a adaptao ocorresse em tempo de compilao, seria o caso de programas de categoria 2 Exemplo de operao: ler o prximo registro de um arquivo

Categoria 4: Independncia Lgica dos Dados

Programas dessa categoria armazenam a descrio dos dados junto com eles Por isso, os programas no necessitam definir a estrutura dos dados Exemplo: programas que utilizam SGBDs

Operaes sobre arquivos

Programas que lidam com arquivos realizam os seguintes tipos de operaes sobre eles:

Criao: alocao e inicializao da rea de dados, assim como de seus descritores Destruio: liberao da rea de dados e descritores usados na representao da tabela Insero: incluso de novo registro na tabela Excluso: remoo de um registro da tabela Alterao: modificao dos valores de um ou mais atributos/campos da tabela Consulta: obteno dos valores de todos os campos de um registro, dada uma chave de entrada

Refrescando a memria

Tutorial sobre Manipulao de Arquivos em Java


Fonte: http://download.oracle.com/javase/tutorial/essential/io

IDE Java: NetBeans

I/O Stream

Um I/O Stream em Java representa uma fonte de entrada ou sada destino Um stream pode representar diferentes tipos de fonte ou destino:

Arquivos em disco Dispositivos Outros programas Estruturas em memria

Suportam diferentes tipos de dados:

Bytes Tipos primitivos de dados (inteiros, strings, ) Caracteres Objetos

I/O Stream

Independente de como funcionam internamente, todos os streams seguem um modelo simples de interao com programas Um stream uma sequencia de dados

Para leitura: input stream Para gravao: output stream

I/O Input Stream

Um programa utiliza um Input Stream para ler dados de uma fonte, um item de cada vez

I/O Output Stream

Um programa utiliza um Output Stream para gravar dados em um destino, um item de cada vez

Na nossa disciplina

Fonte e destino so arquivos Exemplo de arquivo a ser manipulado

xanadu.txt In Xanadu did Kubla Khan A stately pleasure-dome decree: Where Alph, the sacred river, ran Through caverns measureless to man Down to a sunless sea.

Byte Streams

Permitem realizar entrada e sada de bytes de 8bits Ver arquivo CopyBytes.java

ByteStream: Como funciona

Consideraes sobre o exemplo

Mtodo read() retorna um int ao invs de um byte


Isso acontece para que seja possvel o mtodo retornar -1 quando o stream terminar

Sempre feche os streams utilizados

Ao fech-los, vc libera a memria consumida por eles

Pode ocorrer erro ao abrir o InputStream ou o OutputStream (ou ambos)

Por isso importante testar se so diferentes de null antes de fech-los

ByteStream

Muito baixo nvel Existem outros tipos de stream para tratar outros tipos de dados Mas so importantes porque todos os outros so construdos sobre ele Nosso arquivo exemplo um arquivo de texto, ento vamos modificar o programa um pouco para tratar isso

Character Stream

Mesmo princpio de funcionamento do ByteStream Faz converso automtica da representao dos caracteres em Java (que usa Unicode) para o enconding de caracteres local

Ver aquivo CopyCharacter.java


Principais diferenas entre este exemplo e o anterior:

Uso de FileReader ao invs de FileInputStream Uso de FileWriter ao invs de FileOutputStream

Entrada e Sada

Neste exemplo, o disco acessado para ler cada caractere do arquivo, e depois novamente para gravar cada caractere

MUITO LENTO!!

Soluo: utilizar BufferedStreams

O SO faz I/O apenas quando o Buffer est vazio

I/O Orientada a linhas

Para arquivos texto, possvel ler linhas inteiras de uma s vez, usando um buffer: BufferedReader (para leitura) e PrintWriter (para gravao) Linha:

delimitada por um CR ou LF ("\r\n") delimitada por CR ("\r") delimitada por LF ("\n")

Ver arquivo CopyLine.java

Foco da disciplina

Arquivos binrios ao invs de arquivos texto Como implementar um programa que grava registros de funcionrios, e depois l esses registros?

Usar DataStreams

Possuem mtodos especficos para ler/gravar tipos especficos (inteiro, string, etc)

DataStreams

Exemplo do funcionrio Primeiro problema: em Java no existe o conceito de registro Soluo de contorno:

Criar uma classe Funcionrio com os atributos do funcionrio

Classe Funcionrio
public class Funcionario { public int codFuncionario; public String nome; public String cpf; public String dataNascimento; public float salario; }

NOTA IMPORTANTE: no uma boa prtica de programao utilizar atributos pblicos nas classes. Na disciplina, vamos adotar esta opo apenas para simplificar os exemplos. O correto seria implementar mtodos get e set para cada atributo.

Manipulao

DataStream detecta final de arquivo lanando uma exceo java.io.EOFException

Lgica para testar final de arquivo agora no mais baseada no teste de valor -1 Capturar a excesso e fechar o DataStream

Ver arquivo ManipulaFuncionario.java

Exerccio

Alterar a classe ManipulaFuncionario para ler os dados do funcionrio a ser gravado do teclado (ateno: criar uma nova classe! No sobreescrever a classe!) A cada funcionrio informado, perguntar se deseja ler os dados de mais um funcionrio

Se sim, ler mais um funcionrio Se no, gravar todos os funcionrios lidos

Orientao a objetos

Exemplo anterior fere os princpios de orientao a objetos

Ideal dar a responsabilidade de ler registro e gravar registro classe Funcionrio


Ver arquivo FuncionarioOO.java Ver arquivo ManipulaFuncionarioOO.java

Flush

Os mtodos que utilizam buffer para gravao s fazem a gravao em disco quando o buffer est cheio s vezes necessrio ter mais controle sobre quando os dados realmente sero gravados

AutoFlush: Algumas classes buffered output (ex. PrintWriter) possuem um atributo autoFlush. Quando este atributo est ligado (true), o buffer gravado em disco a cada vez que uma operao println executada Alternativa: Mtodo flush fora gravao do buffer em disco

Fonte

http://download.oracle.com/javase/tutorial/essential/io Note que parte deste tutorial (Path) no se aplica ao nosso caso, pois o NetBeans ainda no trabalha com o JDK 7

Pratique!

Execute os cdigos dos exemplos teste tutorial em casa Modifique as classes para lidar com os registros de conta-corrente que fizemos em aula Trs arquivos:

Cliente Agncia Conta-Corrente

Das könnte Ihnen auch gefallen