Beruflich Dokumente
Kultur Dokumente
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
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.
Nome Joo
CPF
Data-Nascimento
Salrio 3000
012345678-90 10/04/1980
Maria Lcia
5000 1500
IMPORTANTE: Todos os registros de uma mesma tabela possuem a mesma estrutura (mesmo conjunto de atributos/campos).
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: 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
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
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
Aplicao Financeira
Chaves primrias:
Chaves secundrias:
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
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
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
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.)
Os programas de computador so mais ou menos dependentes da organizao fsica dos dados Eles podem ser classificados em quatro categorias
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
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
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
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
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
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:
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
Um programa utiliza um Input Stream para ler dados de uma fonte, um item de cada vez
Um programa utiliza um Output Stream para gravar dados em um destino, um item de cada vez
Na nossa disciplina
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
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
Entrada e Sada
Neste exemplo, o disco acessado para ler cada caractere do arquivo, e depois novamente para gravar cada caractere
MUITO LENTO!!
Para arquivos texto, possvel ler linhas inteiras de uma s vez, usando um buffer: BufferedReader (para leitura) e PrintWriter (para gravao) Linha:
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:
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
Lgica para testar final de arquivo agora no mais baseada no teste de valor -1 Capturar a excesso e fechar o DataStream
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
Orientao a objetos
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: