aulas de java avançado 1 - faculdade idez 2010

Post on 06-Jun-2015

1.071 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Java AvançadoMaurício Linhares

Especialização em Desenvolvimento para a Web - iDez

Assuntos da aula

Revisão;

Composição e agregação de objetos;

Testes unitários em Java com JUnit;

Classe File;

Classes InputStream e OutputStream;

Classes Reader e Writer;

FileChannels e NIO;

Parsing de XML com DOM e StAX;

Acesso a bancos de dados em Java com JDBC;

Associações entre objetos

Objetos podem referenciar outros objetos como suas propriedades;

Quando objetos são associados, dois tipos de associação se configuram:Composição;Agregação;

Agregação

Quando um objeto referencia um ou mais objetos mas os objetos referenciados existem independentemente de quem os referencia;

Na agregação, os objetos referenciados normalmente são acessíveis para todos e fazem parte da API pública do objeto;

Eles tem outras responsabilidades no sistema além de serem referenciados pelo agregador;

Modelagem do barzinho da esquina

Modelando uma UniversidadeExercício

Composição

Associação na qual um objeto é tido como “dono” dos objetos os quais ele referencia;

Os objetos referenciados agora não podem mais existir sem o objeto raiz, não faz sentido os ter dentro do sistema de forma separada;

Em muitos casos, os objetos referenciados não ficam visíveis para quem utiliza o objeto raiz;

Modelando um carro

Modelando um computadorExercício

Introdução aos testes unitários

O que são testes unitários?

Pra que servem os testes unitários?

Eles são realmente testes?

Prática – TDD com Contas Bancárias

Prática – Criando uma classe Dinheiro

Prática – Calculando a data de entrega de um pedido

Arquivos em Java – java.io.File

Classe base que representa um caminho:ArquivosDiretóriosCaminho virtual (que ainda não existe no sistema de

arquivos)

Pode ser usada para:Criar;Remover;Mover;

Métodos comuns

createNewFile | mdkirCria um arquivo ou diretório

mkdirsCria o diretório e todos os diretórios pais que ainda

não existam

lenghtDiz o tamanho do arquivo em bytes

rename( File ) Renomeia (move) um arquivo para o caminho

passado como parâmero

Métodos comuns

delete()Remove o arquivo ou o diretório (apenas se o

diretório estiver vazio);

list()Lista todos os arquivos e pastas que estejam nesse

diretório (retorna nomes de arquivos, não caminhos);

list(FilenameFilter)Lista todos os arquivos do diretório que atenderem

ao requisito;

InputStream e OutputStream

Fluxo padrão para leitura e escrita de dados em formato binário em Java;

É usado para ler e escrever em arquivos, memória, conexões de rede ou entrada/saída padrão do sistema;

Contém várias classes complementares;

Outras de classes Stream em Java

Buffered(Input/Output)Stream;

File(Input/Output)Stream;

ByteArray(Input/Output)Stream;

Streams em Java – Decorator pattern

InputStream

FileInputStream

BufferedInputStream

Criando um OutputStream que faz backup automático

Object(Input|Output)Stream e Serializable

Classes utilizadas para escrever objetos Java diretamente em um arquivo;

Objetos salvos em formato binário, lido diretamente pela classe ObjectOutputStream;

Maneira simples de gravar dados da aplicação, mas pouco portável e pode causar problemas de compatibilidade;

Lendo e escrevendo Serializables em arquivos

Reader e Writer – lidando com caracteres

Classes especializadas em escrever fluxos de caracteres;

Podem ser utilizadas diretamente ou em conjunto (“decorando”) Input e Output streams;

Mais simples de serem utilizadas;

Classes comuns

InputStreamReader|InputStreamWriter;

File(Reader|Writer);

String(Reader|Writer);

CharArray(Reader|Writer);

Criando um par de Reader/Writer que criptografam o conteúdo

Criando um writer que faz backup do arquivo escritoExercício

FileChannel e NIO

Nova API para leitura e escrita de arquivos;

Faz escrita assíncrona e não bloqueante;

Normalmente é mais rápida que a forma comum;

Código bem mais complicado para lidar com arquivos;

Lendo e escrevendo em arquivos com FileChannel

Parsing de Arquivos XML

XML é um fomato padrão para troca de informações entre aplicações, seja via rede ou diretamente ingerindo arquivos;

Há várias formas de se fazer parsing de arquivos, sendo as mais comuns:DOM;SAX;StAX;

Fazendo parsing to staff.xml

Fazendo parsing da lista de músicasExercício

Lista de Albuns

Lista de Artistas

Gerando XML (e texto em geral) com FreeMarker

Engine de templates comum do Java, muito utilizado pra geração de XML e templates de email;

Tem sintaxe parecida com a dos JSP, é simples de ser utilizada e tem poucas dependências externas;

É capaz de executar condicionais simples dentro dos seus templates, quando necessário;

Exemplo de template do FreeMarker

<?xml version="1.0"?>

<empregados>

<#list empregados as empregado>

<empregado>

<nome>${empregado.id?html}</nome>

<#if empregado.posicao??>

<posicao>${empregado.posicao!}</posicao>

</#if>

</empregado>

</#list>

</empregados>

Acesso a bancos de dados em Java

Em Java, o acesso a bancos de dados é feito através da JDBC, que é a API de acesso a banco de dados padrão;

Os fornecedores desenvolvem Drivers JDBC que podem ser utilizados pelos

Acessando um banco de dados

Class.forName("org.h2.Driver");

Connection conexao = DriverManager.getConnection("jdbc:h2:~/clientes", "sa", "");

Passos

Primeiro você deve carregar a classe do Driver JDBC;

Após a carga, você pode abrir uma conexão com o banco através dos métodos getConnection() da classe DriverManager;

Executando comandos

Os comandos ou consultas feitas em Java usam os objetos Statement e PreparedStatement;

Um Statement é uma consulta comum feita através de uma String;

Um PreparedStatement é uma consulta que é pré-compilada e tende a ser mais rápida e mais segura que o Statement;

Exemplo de código usando JDBC

Connection conexao = DriverManager.getConnection("jdbc:h2:~/clientes", "sa", "");

Statement statement = conexao.createStatement();

statement.executeUpdate("CREATE TABLE clientes(id int, nome varchar, senha varchar, email varchar)");

conexao.close();

Usando um PreparedStatement para executar um update

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/lastfm", "root", "");

PreparedStatement statement = connection.prepareStatement( "update tracks set processed = true where id = ? and updated_at = ?" );

statement.setInt(1, id);

statement.setDate(2, new Date());

statement.executeUpdate();

connection.close();

Usando um PreparedStatement para fazer uma consulta

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/lastfm", "root", "");

PreparedStatement statement = connection.prepareStatement( "SELECT * FROM tracks" );

ResultSet resultSet = statement.executeQuery();

while(resultSet.next()) {

Track track = new Track();

track.title = resultSet.getString("title");

track.id = resultSet.getInt("id");

tracks.add(track);

}

connection.close();

top related